Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/osgi
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2011-04-09 16:16:45 +0000
committerMarkus Alexander Kuppe2011-04-09 16:16:45 +0000
commit0460ae315c12f6857dc1745718ee3a18a04358f7 (patch)
treeb7f2e941e830b19ae739fd970091ba6c6dc4aa68 /osgi
parent531a850e521ba5db2e20583d031d835a98982b41 (diff)
downloadorg.eclipse.ecf-0460ae315c12f6857dc1745718ee3a18a04358f7.tar.gz
org.eclipse.ecf-0460ae315c12f6857dc1745718ee3a18a04358f7.tar.xz
org.eclipse.ecf-0460ae315c12f6857dc1745718ee3a18a04358f7.zip
NEW - bug 342356: RSA override properties handling incomplete
https://bugs.eclipse.org/bugs/show_bug.cgi?id=342356
Diffstat (limited to 'osgi')
-rw-r--r--osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/PropertiesUtil.java38
-rw-r--r--osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java15
-rw-r--r--osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java8
3 files changed, 59 insertions, 2 deletions
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 4616553d9..e1e5236f0 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
@@ -20,10 +20,12 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteConstants;
import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
public class PropertiesUtil {
@@ -318,6 +320,16 @@ public class PropertiesUtil {
return target;
}
+ public static Map<String, Object> copyProperties(
+ final ServiceReference serviceReference,
+ final Map<String, Object> target) {
+ final String[] keys = serviceReference.getPropertyKeys();
+ for (int i = 0; i < keys.length; i++) {
+ target.put(keys[i], serviceReference.getProperty(keys[i]));
+ }
+ return target;
+ }
+
public static Map<String, Object> copyNonECFProperties(
Map<String, Object> source, Map<String, Object> target) {
for (String key : source.keySet())
@@ -360,5 +372,31 @@ public class PropertiesUtil {
target.put(keys[i], rsReference.getProperty(keys[i]));
return target;
}
+
+ public static Map mergeProperties(final ServiceReference serviceReference,
+ final Map<String, Object> overrides) {
+ return mergeProperties(copyProperties(serviceReference, new HashMap()),
+ overrides);
+ }
+
+ public static Map mergeProperties(final Map<String, Object> source,
+ final Map<String, Object> overrides) {
+
+ // copy to target from service reference
+ final Map target = copyProperties(source, new HashMap());
+
+ // now do actual merge
+ final Set<String> keySet = overrides.keySet();
+ for (final String key : keySet) {
+ // skip keys not allowed
+ if (Constants.SERVICE_ID.equals(key)
+ || Constants.OBJECTCLASS.equals(key)) {
+ continue;
+ }
+ target.remove(key.toLowerCase());
+ target.put(key, overrides.get(key));
+ }
+ return target;
+ }
}
diff --git a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java
index c754093b9..60526691c 100644
--- a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java
+++ b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java
@@ -50,6 +50,7 @@ public class EndpointDescription extends
private String rsFilter;
private int hashCode = 7;
+ private Map overrides;
private void computeHashCode() {
this.hashCode = 31 * this.hashCode + getId().hashCode();
@@ -234,4 +235,18 @@ public class EndpointDescription extends
+ ",properties=" + getProperties() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
+ void setPropertiesOverrides(Map propertiesOverrides) {
+ this.overrides = PropertiesUtil.mergeProperties(super.getProperties(),
+ propertiesOverrides);
+ }
+
+ /* (non-Javadoc)
+ * @see org.osgi.service.remoteserviceadmin.EndpointDescription#getProperties()
+ */
+ @Override
+ public Map<String, Object> getProperties() {
+ if(overrides != null)
+ return overrides;
+ return super.getProperties();
+ }
}
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 76503a3dd..2816c2651 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
@@ -167,8 +167,9 @@ public class RemoteServiceAdmin implements
trace("exportService", "serviceReference=" + serviceReference //$NON-NLS-1$ //$NON-NLS-2$
+ ",properties=" + overridingProperties); //$NON-NLS-1$
- overridingProperties = (overridingProperties == null) ? Collections.EMPTY_MAP
- : overridingProperties;
+ overridingProperties = PropertiesUtil.mergeProperties(serviceReference,
+ overridingProperties == null ? Collections.EMPTY_MAP
+ : overridingProperties);
// First get exported interfaces
String[] exportedInterfaces = PropertiesUtil.getExportedInterfaces(serviceReference,overridingProperties);
@@ -1417,6 +1418,9 @@ public class RemoteServiceAdmin implements
Map proxyProperties = createProxyProperties(endpointDescription,
rsContainer, selectedRsReference, rs);
+ // sync sref props with endpoint props
+ endpointDescription.setPropertiesOverrides(proxyProperties);
+
List<String> serviceTypes = endpointDescription.getInterfaces();
ServiceRegistration proxyRegistration = proxyServiceFactoryContext

Back to the top