| /******************************************************************************* |
| * Copyright (c) 2007 Versant Corp. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Markus Kuppe |
| ******************************************************************************/ |
| package org.eclipse.ecf.provider.jslp.identity; |
| |
| import ch.ethz.iks.slp.ServiceType; |
| import ch.ethz.iks.slp.ServiceURL; |
| import java.net.URI; |
| import org.eclipse.ecf.core.identity.*; |
| import org.eclipse.ecf.discovery.identity.*; |
| |
| public class JSLPNamespace extends Namespace { |
| private static final String JSLP_SCHEME = "jslp"; //$NON-NLS-1$ |
| |
| private static final long serialVersionUID = -3041453162456476102L; |
| |
| public static final String NAME = "ecf.namespace.slp"; //$NON-NLS-1$ |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ecf.core.identity.Namespace#createInstance(java.lang.Object[]) |
| */ |
| public ID createInstance(Object[] parameters) { |
| // error case |
| if (parameters == null || parameters.length < 1 || parameters.length > 2) { |
| throw new IDCreateException("Parameters cannot be null and must be of length 1 or 2"); //$NON-NLS-1$ |
| |
| // error case |
| } else if (parameters[0] == null || parameters[0].equals("")) { //$NON-NLS-1$ |
| throw new IDCreateException("First parameter cannot be null or empty String"); //$NON-NLS-1$ |
| |
| // create by jSLP ServiceURL |
| } else if (parameters.length == 2 && parameters[0] instanceof ServiceURL) { |
| final ServiceURL anURL = (ServiceURL) parameters[0]; |
| final String[] scopes = (String[]) parameters[1]; |
| return new JSLPServiceTypeID(this, anURL, scopes); |
| // final String serviceName = (String) (parameters[1] != null ? parameters[1] : anURL.getHost()); |
| // return null /*new JSLPServiceID(this, stid, serviceName)*/; |
| |
| // conversion call where conversion isn't necessary |
| } else if (parameters.length == 1 && parameters[0] instanceof JSLPServiceID) { |
| return (ID) parameters[0]; |
| |
| // convert from IServiceID to IServiceTypeID, String |
| } else if (parameters.length == 1 && parameters[0] instanceof IServiceID) { |
| final IServiceID anId = (IServiceID) parameters[0]; |
| final Object[] newParams = new Object[2]; |
| newParams[0] = anId.getServiceTypeID(); |
| newParams[1] = anId.getName(); |
| return createInstance(newParams); |
| |
| // create by ECF discovery generic IServiceTypeID (but not JSLPServiceID!!!) |
| } else if (parameters[0] instanceof IServiceTypeID) { |
| final IServiceTypeID stid = (IServiceTypeID) parameters[0]; |
| parameters[0] = stid.getName(); |
| return createInstance(parameters); |
| |
| // create by jSLP ServiceType |
| } else if (parameters.length == 1 && parameters[0] instanceof ServiceType) { |
| return 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 IServiceID by ECF discovery generic String representation |
| } else if (parameters.length == 2 && parameters[0] instanceof String && ((String) parameters[0]).startsWith("_") && parameters[1] instanceof URI) { //$NON-NLS-1$ |
| final String type = (String) parameters[0]; |
| final URI anURI = (URI) parameters[1]; |
| final JSLPServiceTypeID serviceType = new JSLPServiceTypeID(this, new ServiceTypeID(this, type)); |
| return new JSLPServiceID(this, serviceType, anURI); |
| |
| // create IServiceTypeID by ECF discovery generic ServiceType |
| } else if (parameters.length == 1 && parameters[0] instanceof String && ((String) parameters[0]).startsWith("_")) { //$NON-NLS-1$ |
| final String type = (String) parameters[0]; |
| return new JSLPServiceTypeID(this, new ServiceTypeID(this, type)); |
| |
| // error case second parameter not a String |
| } else if (parameters.length == 2 && parameters[1] != null && !(parameters[1] instanceof String)) { |
| throw new IDCreateException("Second parameter must be of type String"); //$NON-NLS-1$ |
| |
| // error case |
| } else { |
| throw new IDCreateException("Wrong JSLPServiceID creation parameters"); //$NON-NLS-1$ |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ecf.core.identity.Namespace#getScheme() |
| */ |
| public String getScheme() { |
| return JSLP_SCHEME; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ecf.core.identity.Namespace#getSupportedParameterTypesForCreateInstance() |
| */ |
| public Class[][] getSupportedParameterTypes() { |
| return new Class[][] { {String.class}, {String.class, String.class}, {ServiceURL.class, String[].class, String.class}, {IServiceTypeID.class}, {IServiceID.class}, {ServiceType.class, String.class}}; |
| } |
| } |