diff options
author | mkuppe | 2008-02-06 17:02:27 +0000 |
---|---|---|
committer | mkuppe | 2008-02-06 17:02:27 +0000 |
commit | 406cf5138cd2cb2ff409f65e19413180ea3f8e79 (patch) | |
tree | 2f3cdcc8016d1f2f73cf0bdafc98ba09028831e5 /providers/bundles/org.eclipse.ecf.provider.jslp | |
parent | 435a8504ed1763748441bd000bf84af997411ae7 (diff) | |
download | org.eclipse.ecf-406cf5138cd2cb2ff409f65e19413180ea3f8e79.tar.gz org.eclipse.ecf-406cf5138cd2cb2ff409f65e19413180ea3f8e79.tar.xz org.eclipse.ecf-406cf5138cd2cb2ff409f65e19413180ea3f8e79.zip |
NEW - bug 218027: [Discovery][jSLP] Provider doesn't handle scope correctly
https://bugs.eclipse.org/bugs/show_bug.cgi?id=218027
Diffstat (limited to 'providers/bundles/org.eclipse.ecf.provider.jslp')
5 files changed, 26 insertions, 13 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/Activator.java b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/Activator.java index 95bfc1c3f..d1b3ec14e 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/Activator.java +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/Activator.java @@ -201,8 +201,7 @@ public class Activator implements BundleActivator { public Collection getServiceURLs(JSLPServiceTypeID stid) throws ServiceLocationException { Set result = new HashSet(); - //TODO-mkuppe honor the scope during service discovery - result.addAll(Collections.list(findServices(stid.getServiceType(), /* Arrays.asList(stid.getScopes()),*/null, null))); + result.addAll(Collections.list(findServices(stid.getServiceType(), Arrays.asList(stid.getScopes()), null))); return result; } } diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/ServiceURLAdapter.java b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/ServiceURLAdapter.java index f4482a707..499b68dd7 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/ServiceURLAdapter.java +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/internal/provider/jslp/ServiceURLAdapter.java @@ -27,8 +27,13 @@ public class ServiceURLAdapter { private IServiceID serviceID; public ServiceURLAdapter(ServiceURL aServiceURL) { + this(aServiceURL, new String[0]); + } + + public ServiceURLAdapter(ServiceURL aServiceURL, String[] scopes) { Assert.isNotNull(aServiceURL); - setIServiceID(aServiceURL); + Assert.isNotNull(scopes); + setIServiceID(aServiceURL, scopes); setURI(aServiceURL); } @@ -47,10 +52,10 @@ public class ServiceURLAdapter { uri = URI.create(buf.toString()); } - private void setIServiceID(ServiceURL aServiceURL) { + private void setIServiceID(ServiceURL aServiceURL, String[] scopes) { Namespace namespace = IDFactory.getDefault().getNamespaceByName(JSLPNamespace.NAME); try { - serviceID = (IServiceID) namespace.createInstance(new Object[] {aServiceURL}); + serviceID = (IServiceID) namespace.createInstance(new Object[] {aServiceURL, scopes}); } catch (IDCreateException e) { // may never happen Trace.catching(Activator.PLUGIN_ID, JSLPDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "setIServiceID", e); //$NON-NLS-1$ diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/container/JSLPDiscoveryContainer.java b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/container/JSLPDiscoveryContainer.java index cacf35b75..23ca2da16 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/container/JSLPDiscoveryContainer.java +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/container/JSLPDiscoveryContainer.java @@ -174,8 +174,8 @@ public class JSLPDiscoveryContainer extends AbstractDiscoveryContainerAdapter { public IServiceInfo[] getServices(IServiceTypeID type) { Assert.isNotNull(type); try { - JSLPServiceID sid = (JSLPServiceID) IDFactory.getDefault().createID(getConnectNamespace(), new Object[] {type.getInternal()}); - return convertToIServiceInfo(Activator.getDefault().getServiceURLs((JSLPServiceTypeID) sid.getServiceTypeID())); + JSLPServiceID sid = (JSLPServiceID) IDFactory.getDefault().createID(getConnectNamespace(), new Object[] {type, null}); + return convertToIServiceInfo(Activator.getDefault().getServiceURLs((JSLPServiceTypeID) sid.getServiceTypeID()), type.getScopes()); } catch (IDCreateException e) { Trace.catching(Activator.PLUGIN_ID, JSLPDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "getServices(IServiceTypeID)", e); //$NON-NLS-1$ } catch (ServiceLocationException e) { @@ -191,9 +191,8 @@ public class JSLPDiscoveryContainer extends AbstractDiscoveryContainerAdapter { Assert.isNotNull(aServiceInfo); try { JSLPServiceInfo si = new JSLPServiceInfo(aServiceInfo); - //TODO-mkuppe honor the scope during service announcement IServiceTypeID stid = si.getServiceID().getServiceTypeID(); - Activator.getDefault().register(si.getServiceURL(),/* Arrays.asList(stid.getScopes()),*/si.getServiceProperties().asProperties()); + Activator.getDefault().register(si.getServiceURL(), Arrays.asList(stid.getScopes()), si.getServiceProperties().asProperties()); } catch (ServiceLocationException e) { Trace.catching(Activator.PLUGIN_ID, JSLPDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "registerService(IServiceInfo)", e); //$NON-NLS-1$ throw new ECFException(e.getMessage(), e); @@ -214,10 +213,14 @@ public class JSLPDiscoveryContainer extends AbstractDiscoveryContainerAdapter { } private IServiceInfo[] convertToIServiceInfo(Collection serviceURLs) { + return convertToIServiceInfo(serviceURLs, new String[0]); + } + + private IServiceInfo[] convertToIServiceInfo(Collection serviceURLs, String[] scopes) { List tmp = new ArrayList(); for (Iterator itr = serviceURLs.iterator(); itr.hasNext();) { ServiceURL url = (ServiceURL) itr.next(); - IServiceInfo serviceInfo = new JSLPServiceInfo(new ServiceURLAdapter(url), -1, -1, new ServiceProperties()); + IServiceInfo serviceInfo = new JSLPServiceInfo(new ServiceURLAdapter(url, scopes), -1, -1, new ServiceProperties()); tmp.add(serviceInfo); } return (IServiceInfo[]) tmp.toArray(new IServiceInfo[tmp.size()]); diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPNamespace.java b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPNamespace.java index 73628a93a..35701388f 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPNamespace.java +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPNamespace.java @@ -33,7 +33,7 @@ public class JSLPNamespace extends Namespace { throw new IDCreateException(Messages.JSLPNamespace_3); } else if (parameters[0] instanceof ServiceURL) { // handles internal creation ServiceURL anURL = (ServiceURL) parameters[0]; - JSLPServiceTypeID stid = new JSLPServiceTypeID(this, anURL); + JSLPServiceTypeID stid = new JSLPServiceTypeID(this, anURL, (String[]) parameters[1]); return new JSLPServiceID(this, stid, anURL.getHost()); } else if (parameters[0] instanceof JSLPServiceID) { // handles conversion call where conversion isn't necessary return (ID) parameters[0]; diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPServiceTypeID.java b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPServiceTypeID.java index 145ae3b74..2c9b37db4 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPServiceTypeID.java +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/src/org/eclipse/ecf/provider/jslp/identity/JSLPServiceTypeID.java @@ -63,9 +63,13 @@ public class JSLPServiceTypeID extends ServiceTypeID { } } - JSLPServiceTypeID(Namespace namespace, ServiceURL anURL) throws IDCreateException { + JSLPServiceTypeID(Namespace namespace, ServiceURL anURL, String[] scopes) throws IDCreateException { this(namespace, anURL.getServiceType().toString()); + if (scopes != null && scopes.length > 0) { + this.scopes = scopes; + } + // set the protocol if provided String protocol = anURL.getProtocol(); if (protocol != null) { @@ -86,7 +90,9 @@ public class JSLPServiceTypeID extends ServiceTypeID { } buf.append(":"); //$NON-NLS-1$ } - st = new ServiceType(buf.toString()); + // remove dangling colon + String string = buf.toString(); + st = new ServiceType(string.substring(0, string.length() - 1)); } /** |