diff options
author | mkuppe | 2008-06-02 11:40:04 +0000 |
---|---|---|
committer | mkuppe | 2008-06-02 11:40:04 +0000 |
commit | 793f3e8252b5405d19a43be326208d2220b92cd0 (patch) | |
tree | 11876744d831f89f0707bbdf761cba5e7b3a466c /providers | |
parent | 01a2e8d4c47eb631416ae72c5d91a2d5917b83b1 (diff) | |
download | org.eclipse.ecf-793f3e8252b5405d19a43be326208d2220b92cd0.tar.gz org.eclipse.ecf-793f3e8252b5405d19a43be326208d2220b92cd0.tar.xz org.eclipse.ecf-793f3e8252b5405d19a43be326208d2220b92cd0.zip |
RESOLVED - bug 218310: [Discovery][jSLP] ServiceType in jSLP always starts with "_service."
https://bugs.eclipse.org/bugs/show_bug.cgi?id=218310
FORWARD PORT from Revision_2_0
Diffstat (limited to 'providers')
4 files changed, 65 insertions, 46 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.jslp/META-INF/MANIFEST.MF b/providers/bundles/org.eclipse.ecf.provider.jslp/META-INF/MANIFEST.MF index d98e2de68..f847620e5 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jslp/META-INF/MANIFEST.MF +++ b/providers/bundles/org.eclipse.ecf.provider.jslp/META-INF/MANIFEST.MF @@ -19,6 +19,7 @@ Require-Bundle: org.eclipse.ecf.discovery, Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1, J2SE-1.4 Bundle-ClassPath: . -Export-Package: org.eclipse.ecf.provider.jslp.container, +Export-Package: org.eclipse.ecf.internal.provider.jslp;x-friends:="org.eclipse.ecf.tests.provider.jslp", + org.eclipse.ecf.provider.jslp.container, org.eclipse.ecf.provider.jslp.identity Bundle-ActivationPolicy: lazy 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 8f6ed6403..a8ee52f00 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 @@ -147,7 +147,7 @@ public class JSLPDiscoveryContainer extends AbstractDiscoveryContainerAdapter im ServiceLocationEnumeration slenum = Activator.getDefault().getLocator().findServiceTypes(null, null); for (; slenum.hasMoreElements();) { ServiceType st = new ServiceType((String) slenum.nextElement()); - IServiceID sid = (IServiceID) getConnectNamespace().createInstance(new Object[] {st.toString()}); + IServiceID sid = (IServiceID) getConnectNamespace().createInstance(new Object[] {st, ""}); //$NON-NLS-1$ result.add(sid.getServiceTypeID()); } } catch (ServiceLocationException e) { 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 65f94b319..49745b265 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 @@ -10,9 +10,9 @@ ******************************************************************************/ package org.eclipse.ecf.provider.jslp.identity; +import ch.ethz.iks.slp.ServiceType; import ch.ethz.iks.slp.ServiceURL; import org.eclipse.ecf.core.identity.*; -import org.eclipse.ecf.core.util.StringUtils; import org.eclipse.ecf.discovery.identity.*; import org.eclipse.ecf.internal.provider.jslp.Messages; @@ -23,60 +23,68 @@ public class JSLPNamespace extends Namespace { public static final String NAME = "ecf.namespace.slp"; //$NON-NLS-1$ - private String getInitFromExternalForm(Object[] args) { - if (args == null || args.length < 1 || args[0] == null) - return null; - if (args[0] instanceof String) { - String arg = (String) args[0]; - if (arg.startsWith(getScheme() + Namespace.SCHEME_SEPARATOR)) { - int index = arg.indexOf(Namespace.SCHEME_SEPARATOR); - if (index >= arg.length()) - return null; - return arg.substring(index + 1); - } - } - return null; - } - /* (non-Javadoc) * @see org.eclipse.ecf.core.identity.Namespace#createInstance(java.lang.Object[]) */ public ID createInstance(Object[] parameters) throws IDCreateException { + // error case if (parameters == null || parameters.length < 1 || parameters.length > 2) { throw new IDCreateException(Messages.JSLPNamespace_2); + + // error case } else if (parameters[0] == null || parameters[0].equals("")) { //$NON-NLS-1$ throw new IDCreateException(Messages.JSLPNamespace_3); - } else if (parameters[0] instanceof ServiceURL) { // handles internal creation + + // create by jSLP ServiceURL + } else if (parameters[0] instanceof ServiceURL) { ServiceURL anURL = (ServiceURL) parameters[0]; - JSLPServiceTypeID stid = new JSLPServiceTypeID(this, anURL, (String[]) parameters[1]); + IServiceTypeID 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 + + // conversion call where conversion isn't necessary + } else if (parameters[0] instanceof JSLPServiceID) { return (ID) parameters[0]; + } else if (parameters[0] instanceof IServiceID) { IServiceID anId = (IServiceID) parameters[0]; - return createInstance(new Object[] {anId.getServiceTypeID(), parameters[1]}); + parameters[0] = anId.getServiceTypeID(); + return createInstance(parameters); + + // create by ECF discovery generic IServiceTypeID (but not JSLPServiceID!!!) } else if (parameters[0] instanceof IServiceTypeID) { IServiceTypeID stid = (IServiceTypeID) parameters[0]; - return createInstance(new Object[] {stid.getName(), parameters[1]}); - } else if (parameters[0] instanceof String) { // creates from either external or internal string - String init = getInitFromExternalForm(parameters); - String type = (init != null) ? init : (String) parameters[0]; - IServiceTypeID stid = null; - if (StringUtils.contains(type, "._")) { //$NON-NLS-1$ // converts external to internal - ServiceTypeID aStid = new ServiceTypeID(this, type); - stid = new JSLPServiceTypeID(this, aStid); - } else { - stid = new JSLPServiceTypeID(this, type); - } - String name = null; - if (parameters.length > 1) { - try { - name = (String) parameters[1]; - } catch (final ClassCastException e) { - throw new IDCreateException(Messages.JSLPNamespace_4); - } - } + parameters[0] = stid.getName(); + return createInstance(parameters); + + // create by jSLP ServiceType + } else if (parameters[0] instanceof ServiceType) { + IServiceTypeID stid = new JSLPServiceTypeID(this, (ServiceType) parameters[0]); + return new JSLPServiceID(this, stid, (String) parameters[1]); + + // create by jSLP ServiceType String representation (from external) + } else if (parameters[0] instanceof String && ((String) parameters[0]).startsWith("service:")) { //$NON-NLS-1$ + parameters[0] = new ServiceType((String) parameters[0]); + return createInstance(parameters); + + // create by ECF discovery generic String representation + } else if (parameters[0] instanceof String && ((String) parameters[0]).startsWith("_")) { //$NON-NLS-1$ + String type = (String) parameters[0]; + String name = (String) parameters[1]; + IServiceTypeID stid = new JSLPServiceTypeID(this, new ServiceTypeID(this, type)); return new JSLPServiceID(this, stid, name); + + // create by "jslp:..." + } else if (parameters[0] instanceof String && ((String) parameters[0]).startsWith(getScheme() + Namespace.SCHEME_SEPARATOR)) { + String str = (String) parameters[0]; + int index = str.indexOf(Namespace.SCHEME_SEPARATOR); + parameters[0] = str.substring(index + 1); + return createInstance(parameters); + + // error case second parameter not a String + } else if (parameters.length == 2 && parameters[1] != null && !(parameters[1] instanceof String)) { + throw new IDCreateException(Messages.JSLPNamespace_4); + + // error case } else { throw new IDCreateException(Messages.JSLPNamespace_3); } @@ -95,6 +103,6 @@ public class JSLPNamespace extends Namespace { * @see org.eclipse.ecf.core.identity.Namespace#getSupportedParameterTypesForCreateInstance() */ public Class[][] getSupportedParameterTypes() { - return new Class[][] { {String.class}, {String.class, String.class}, {ServiceURL.class}, {IServiceTypeID.class}, {IServiceID.class}}; + return new Class[][] { {String.class}, {String.class, String.class}, {ServiceURL.class}, {IServiceTypeID.class}, {IServiceID.class}, {ServiceType.class, String.class}}; } } 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 b40389c6d..427fe24e3 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 @@ -28,7 +28,7 @@ public class JSLPServiceTypeID extends ServiceTypeID { private static final long serialVersionUID = -4558132760112793805L; - private ServiceType st; + private final ServiceType st; protected JSLPServiceTypeID(final Namespace namespace, final String type) throws IDCreateException { super(namespace); @@ -59,7 +59,7 @@ public class JSLPServiceTypeID extends ServiceTypeID { } JSLPServiceTypeID(final Namespace namespace, final ServiceURL anURL, final String[] scopes) throws IDCreateException { - this(namespace, anURL.getServiceType().toString()); + this(namespace, anURL.getServiceType()); if (scopes != null && scopes.length > 0) { this.scopes = scopes; @@ -73,10 +73,10 @@ public class JSLPServiceTypeID extends ServiceTypeID { } } - JSLPServiceTypeID(final JSLPNamespace namespace, final IServiceTypeID type) { + JSLPServiceTypeID(final Namespace namespace, final IServiceTypeID type) { super(namespace, type); - StringBuffer buf = new StringBuffer(); + StringBuffer buf = new StringBuffer("service:"); //$NON-NLS-1$ for (int i = 0; i < services.length; i++) { buf.append(services[i]); // #228876 @@ -91,6 +91,16 @@ public class JSLPServiceTypeID extends ServiceTypeID { st = new ServiceType(string.substring(0, string.length() - 1)); } + JSLPServiceTypeID(final Namespace namespace, final ServiceType aServiceType) throws IDCreateException { + this(namespace, aServiceType.toString()); + final String[] newServices = new String[services.length - 1]; + for (int i = 0; i < services.length - 1; i++) { + newServices[i] = services[i + 1]; + } + services = newServices; + createType(); + } + /** * @return the jSLP ServiceType */ |