From f1384a6d3068160830d90678c5ba8237da3d41d9 Mon Sep 17 00:00:00 2001 From: slewis Date: Thu, 8 Mar 2018 15:17:18 -0800 Subject: for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=532205 Added support for new intents handling and intents properties handling in RSA impl. Change-Id: I0a71ec9eb77e8ac78037a545aa815dc1aea5c397 --- .../remoteserviceadmin/PropertiesUtil.java | 60 ++++++++++++++++------ .../remoteserviceadmin/RemoteServiceAdmin.java | 18 +++++-- 2 files changed, 60 insertions(+), 18 deletions(-) (limited to 'osgi') diff --git a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/PropertiesUtil.java b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/PropertiesUtil.java index b881c3afe..9ae44be3b 100644 --- a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/PropertiesUtil.java +++ b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/PropertiesUtil.java @@ -14,6 +14,7 @@ import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Dictionary; import java.util.Enumeration; import java.util.HashMap; @@ -42,7 +43,7 @@ public class PropertiesUtil { // Don't have them "service.bundleid", //$NON-NLS-1$ "service.scope", //$NON-NLS-1$ - "component.id", //$NON-NLS-1$ + "component.id", //$NON-NLS-1$ "component.name", //$NON-NLS-1$ org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_FRAMEWORK_UUID, org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_ID, @@ -59,16 +60,16 @@ public class PropertiesUtil { protected static final List ecfProperties = Arrays.asList(new String[] { // ECF properties - org.eclipse.ecf.remoteservice.Constants.OBJECTCLASS, org.eclipse.ecf.remoteservice.Constants.SERVICE_ID, - RemoteConstants.ENDPOINT_CONNECTTARGET_ID, - RemoteConstants.ENDPOINT_ID, RemoteConstants.ENDPOINT_CONTAINER_ID_NAMESPACE, - RemoteConstants.ENDPOINT_TIMESTAMP, RemoteConstants.ENDPOINT_IDFILTER_IDS, - RemoteConstants.ENDPOINT_REMOTESERVICE_FILTER, RemoteConstants.SERVICE_IMPORTED_VALUETYPE }); + org.eclipse.ecf.remoteservice.Constants.OBJECTCLASS, org.eclipse.ecf.remoteservice.Constants.SERVICE_ID, + RemoteConstants.ENDPOINT_CONNECTTARGET_ID, RemoteConstants.ENDPOINT_ID, + RemoteConstants.ENDPOINT_CONTAINER_ID_NAMESPACE, RemoteConstants.ENDPOINT_TIMESTAMP, + RemoteConstants.ENDPOINT_IDFILTER_IDS, RemoteConstants.ENDPOINT_REMOTESERVICE_FILTER, + RemoteConstants.SERVICE_IMPORTED_VALUETYPE }); public static void testSerializable(Object value) throws Exception { new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(value); } - + public static String verifyStringProperty(Map properties, String propName) { Object r = properties.get(propName); try { @@ -182,7 +183,8 @@ public class PropertiesUtil { } public static List getStringPlusProperty(Map properties, String key) { - return org.eclipse.ecf.remoteservice.util.EndpointDescriptionPropertiesUtil.getStringPlusProperty(properties, key); + return org.eclipse.ecf.remoteservice.util.EndpointDescriptionPropertiesUtil.getStringPlusProperty(properties, + key); } public static Object getPropertyValue(ServiceReference serviceReference, String key) { @@ -253,7 +255,8 @@ public class PropertiesUtil { result.put(key, val); } catch (Exception e) { LogUtility.logWarning("createSerializableDictionaryFromMap", DebugOptions.EXCEPTIONS_CATCHING, //$NON-NLS-1$ - PropertiesUtil.class, "Cannot serialize value for " + key+ ". Removing from properties", e); //$NON-NLS-1$ //$NON-NLS-2$ + PropertiesUtil.class, "Cannot serialize value for " + key + ". Removing from properties", //$NON-NLS-1$ //$NON-NLS-2$ + e); } } } @@ -277,7 +280,7 @@ public class PropertiesUtil { return Integer.valueOf((String) o); return def; } - + public static String[] getStringArrayWithDefault(Map properties, String key, String[] def) { Object o = properties.get(key); if (o instanceof String) { @@ -312,9 +315,9 @@ public class PropertiesUtil { return target; } - public static Map copySerializableProperties(Map source, - Map target) { - if (source == null) return target; + public static Map copySerializableProperties(Map source, Map target) { + if (source == null) + return target; for (String key : source.keySet()) { Object value = source.get(key); try { @@ -322,7 +325,8 @@ public class PropertiesUtil { target.put(key, value); } catch (Exception e) { LogUtility.logWarning("copySerializableProperties", DebugOptions.EXCEPTIONS_CATCHING, //$NON-NLS-1$ - PropertiesUtil.class, "Cannot serialize value for property=" + key+". Removing from properties", e); //$NON-NLS-1$ //$NON-NLS-2$ + PropertiesUtil.class, + "Cannot serialize value for property=" + key + ". Removing from properties", e); //$NON-NLS-1$ //$NON-NLS-2$ } } return target; @@ -419,7 +423,7 @@ public class PropertiesUtil { for (Iterator it = results.keySet().iterator(); it.hasNext();) { for (int i = 0; i < configs.length; i++) { String prop = it.next(); - if (isConfigProperty(configs[i], prop) && prop.substring(configs[i].length()+1).startsWith(".")) //$NON-NLS-1$ + if (isConfigProperty(configs[i], prop) && prop.substring(configs[i].length() + 1).startsWith(".")) //$NON-NLS-1$ it.remove(); } } @@ -437,4 +441,30 @@ public class PropertiesUtil { } return results; } + + public static Map copyIntentProperties(Map source, String[] intents, Map target) { + // Copy everything from existing target + Map results = copyProperties(target, + new TreeMap(String.CASE_INSENSITIVE_ORDER)); + for (String intent : intents) { + // put intent with empty string into results + results.put(intent, "intent"); //$NON-NLS-1$ + // for each property, if intent or intent config in source then copy to results + for (String sourceKey : source.keySet()) + if (sourceKey.equals(intent) || isConfigProperty(intent, sourceKey)) + results.put(sourceKey, source.get(sourceKey)); + } + return results; + } + + public static Map copyNonIntentsProperties(IRemoteServiceReference rsReference, String[] intents, + Map target) { + List intentsList = (intents == null) ? Collections.EMPTY_LIST : Arrays.asList(intents); + String[] keys = rsReference.getPropertyKeys(); + for (int i = 0; i < keys.length; i++) + if (!isReservedProperty(keys[i]) && !intentsList.contains(keys[i])) + target.put(keys[i], rsReference.getProperty(keys[i])); + return target; + } + } diff --git a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java index 83038a2fb..9e2588840 100644 --- a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java +++ b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java @@ -546,7 +546,7 @@ public class RemoteServiceAdmin implements org.osgi.service.remoteserviceadmin.R private boolean removeImportRegistration(ImportRegistration importRegistration) { synchronized (importedRegistrations) { - localExportedRegistrations.remove(importRegistration); + localImportedRegistrations.remove(importRegistration); return importedRegistrations.remove(importRegistration); } } @@ -2079,7 +2079,11 @@ public class RemoteServiceAdmin implements org.osgi.service.remoteserviceadmin.R IRemoteServiceReference rsReference, IRemoteService remoteService) { Map resultProperties = new TreeMap(String.CASE_INSENSITIVE_ORDER); - PropertiesUtil.copyNonReservedProperties(rsReference, resultProperties); + Map edProps = endpointDescription.getProperties(); + String[] supportedIntents = PropertiesUtil.getStringArrayWithDefault(edProps, + org.osgi.service.remoteserviceadmin.RemoteConstants.REMOTE_INTENTS_SUPPORTED, null); + PropertiesUtil.copyNonIntentsProperties(rsReference, supportedIntents, resultProperties); + PropertiesUtil.copyNonReservedProperties(endpointDescription.getProperties(), resultProperties); // remove OBJECTCLASS resultProperties.remove(org.eclipse.ecf.remoteservice.Constants.OBJECTCLASS); @@ -2121,9 +2125,17 @@ public class RemoteServiceAdmin implements org.osgi.service.remoteserviceadmin.R Map endpointDescriptionProperties) throws Exception { // Create remote service properties - Map remoteServiceProperties = copyNonReservedProperties(serviceReference, + Map remoteServiceProperties = copyNonReservedProperties(serviceReference, (Map) overridingProperties, new TreeMap(String.CASE_INSENSITIVE_ORDER)); + // Added for R7 support. Copy intents and intent options to remote service + // properties + String[] intents = PropertiesUtil.getStringArrayWithDefault(remoteServiceProperties, + org.osgi.service.remoteserviceadmin.RemoteConstants.REMOTE_INTENTS_SUPPORTED, new String[] {}); + + remoteServiceProperties = PropertiesUtil.copyIntentProperties(endpointDescriptionProperties, intents, + remoteServiceProperties); + IRemoteServiceContainerAdapter containerAdapter = rsContainer.getContainerAdapter(); // create serializable dictionary from remote service properties -- cgit v1.2.3