org.eclipse.ecf.provider.generic
Class GenericContainerInstantiator

java.lang.Object
  extended by org.eclipse.ecf.provider.generic.GenericContainerInstantiator
All Implemented Interfaces:
IContainerInstantiator, IRemoteServiceContainerInstantiator

public class GenericContainerInstantiator
extends java.lang.Object
implements IContainerInstantiator, IRemoteServiceContainerInstantiator


Nested Class Summary
protected  class GenericContainerInstantiator.GenericContainerArgs
           
 
Field Summary
protected static java.lang.String[] genericProviderIntents
           
static java.lang.String TCPCLIENT_NAME
           
static java.lang.String TCPSERVER_NAME
           
 
Constructor Summary
GenericContainerInstantiator()
           
 
Method Summary
 IContainer createInstance(ContainerTypeDescription description, java.lang.Object[] args)
          Create instance of IContainer.
protected  java.util.Set getAdaptersForClass(java.lang.Class clazz)
           
protected  GenericContainerInstantiator.GenericContainerArgs getClientArgs(java.lang.Object[] args)
           
protected  ID getIDFromArg(java.lang.Object arg)
           
 java.lang.String[] getImportedConfigs(ContainerTypeDescription description, java.lang.String[] exporterSupportedConfigs)
          Get the imported config types for a given ContainerTypeDescription for the given exporter supported config types.
protected  java.lang.Integer getIntegerFromArg(java.lang.Object arg)
           
protected  java.lang.String[] getInterfacesAndAdaptersForClass(java.lang.Class clazz)
           
protected  java.util.Set getInterfacesForClass(java.lang.Class clazz)
           
protected  java.util.Set getInterfacesForClass(java.util.Set s, java.lang.Class clazz)
           
 java.util.Dictionary getPropertiesForImportedConfigs(ContainerTypeDescription description, java.lang.String[] importedConfigs, java.util.Dictionary exportedProperties)
          Get the properties associated with the given description, with the given importedConfigTypes, via the given exportedProperties.
protected  GenericContainerInstantiator.GenericContainerArgs getServerArgs(java.lang.Object[] args)
           
 java.lang.String[] getSupportedAdapterTypes(ContainerTypeDescription description)
          Get array of supported adapters for the given container type description.
 java.lang.String[] getSupportedConfigs(ContainerTypeDescription description)
          Get supported configs for the given ContainerTypeDescription.
 java.lang.String[] getSupportedIntents(ContainerTypeDescription description)
          Get supported intents for the given ContainerTypeDescription.
 java.lang.Class[][] getSupportedParameterTypes(ContainerTypeDescription description)
          Get array of parameter types for given container type description.
protected  boolean isClient(ContainerTypeDescription description)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

genericProviderIntents

protected static final java.lang.String[] genericProviderIntents
Since:
2.0

TCPCLIENT_NAME

public static final java.lang.String TCPCLIENT_NAME
See Also:
Constant Field Values

TCPSERVER_NAME

public static final java.lang.String TCPSERVER_NAME
See Also:
Constant Field Values
Constructor Detail

GenericContainerInstantiator

public GenericContainerInstantiator()
Method Detail

getIDFromArg

protected ID getIDFromArg(java.lang.Object arg)
                   throws IDCreateException
Throws:
IDCreateException

getIntegerFromArg

protected java.lang.Integer getIntegerFromArg(java.lang.Object arg)

getClientArgs

protected GenericContainerInstantiator.GenericContainerArgs getClientArgs(java.lang.Object[] args)
                                                                   throws IDCreateException
Throws:
IDCreateException
Since:
3.0

isClient

protected boolean isClient(ContainerTypeDescription description)

getServerArgs

protected GenericContainerInstantiator.GenericContainerArgs getServerArgs(java.lang.Object[] args)
                                                                   throws IDCreateException
Throws:
IDCreateException
Since:
3.0

createInstance

public IContainer createInstance(ContainerTypeDescription description,
                                 java.lang.Object[] args)
                          throws ContainerCreateException
Description copied from interface: IContainerInstantiator
Create instance of IContainer. This is the interface that container provider implementations must implement for the containerFactory extension point. The caller may optionally specify both argument types and arguments that will be passed into this method (and therefore to the provider implementation implementing this method). For example:

ContainerFactory.getDefault().createContainer("foocontainer",new Object { "hello" });

Specified by:
createInstance in interface IContainerInstantiator
Parameters:
description - the ContainerTypeDescription associated with the registered container provider implementation
args - parameters specified by the caller. May be null if no parameters are passed in by caller to ContainerFactory.getDefault().createContainer(...)
Returns:
IContainer instance. The provider implementation must return a valid object implementing IContainer OR throw a ContainerCreateException. Null will not be returned.
Throws:
ContainerCreateException

getAdaptersForClass

protected java.util.Set getAdaptersForClass(java.lang.Class clazz)

getInterfacesForClass

protected java.util.Set getInterfacesForClass(java.util.Set s,
                                              java.lang.Class clazz)

getInterfacesForClass

protected java.util.Set getInterfacesForClass(java.lang.Class clazz)

getInterfacesAndAdaptersForClass

protected java.lang.String[] getInterfacesAndAdaptersForClass(java.lang.Class clazz)

getSupportedAdapterTypes

public java.lang.String[] getSupportedAdapterTypes(ContainerTypeDescription description)
Description copied from interface: IContainerInstantiator
Get array of supported adapters for the given container type description. Providers implement this method to allow clients to inspect the adapter types exposed by the container described by the given description. The returned array entries will be the fully qualified names of the adapter classes. Note that the returned types do not guarantee that a subsequent call to IContainer.getAdapter(Class) with the same type name as a returned value will return a non-null result. In other words, even if the class name is in the returned array, subsequent calls to IContainer.getAdapter(Class) may still return null.

Specified by:
getSupportedAdapterTypes in interface IContainerInstantiator
Parameters:
description - the ContainerTypeDescription to report adapters for. Must not be null.
Returns:
String[] of supported adapters. The entries in the returned array will be the fully qualified class names of adapters supported by the given description. null may be returned by the provider if no adapters are supported for this description.

getSupportedParameterTypes

public java.lang.Class[][] getSupportedParameterTypes(ContainerTypeDescription description)
Description copied from interface: IContainerInstantiator
Get array of parameter types for given container type description. Providers implement this method to allow clients to inspect the available set of parameter types understood for calls to IContainerInstantiator.createInstance(ContainerTypeDescription, Object[]).

Each of the rows of the returned array specifies a Class[] of parameter types. These parameter types correspond to the types of Object[] that can be passed into the second parameter of IContainerInstantiator.createInstance(ContainerTypeDescription, Object[]).

Consider the following example:

 public Class[][] getSupportedParameterTypes() {
        return new Class[][] { { String.class }, { String.class, String.class } };
 }
 
The above means that there are two acceptable values for the Object [] passed into IContainerInstantiator.createInstance(ContainerTypeDescription, Object[]): 1) a single String, and 2) two Strings. These would therefore be acceptable as input to createInstance:
 IContainer container = ContainerFactory.getDefault().createContainer(
                description, new Object[] { "Hello" });
 
 IContainer container2 = ContainerFactory.getDefault().createContainer(
                description, new Object[] { "Hello" });
 

Specified by:
getSupportedParameterTypes in interface IContainerInstantiator
Parameters:
description - the ContainerTypeDescription to return parameter types for
Returns:
Class[][] array of Class[]s. Each row in the table corresponds to a Class[] that describes the types of Objects in Object[] for second parameter to IContainerInstantiator.createInstance(ContainerTypeDescription, Object[]). null returned if no parameter types supported for given description.
Since:
2.0
See Also:
IContainerInstantiator.getSupportedParameterTypes(org.eclipse.ecf.core.ContainerTypeDescription)

getSupportedIntents

public java.lang.String[] getSupportedIntents(ContainerTypeDescription description)
Description copied from interface: IRemoteServiceContainerInstantiator
Get supported intents for the given ContainerTypeDescription. This method will be called to determine what the OSGi remote service supported intents are for the given description during the search for the service exporter provider/containers upon remote service registration.

Specified by:
getSupportedIntents in interface IContainerInstantiator
Specified by:
getSupportedIntents in interface IRemoteServiceContainerInstantiator
Parameters:
description - the ContainerTypeDescription to return the supported intents for. Will not be null.
Returns:
String[] the supported intents. null may be returned if the given description does not support any intents.

getSupportedConfigs

public java.lang.String[] getSupportedConfigs(ContainerTypeDescription description)
Description copied from interface: IRemoteServiceContainerInstantiator
Get supported configs for the given ContainerTypeDescription. This method will be called to determine what the OSGi remote service supported config types are for the given description during the search for the service exporter provider/containers upon remote service registration.

Specified by:
getSupportedConfigs in interface IRemoteServiceContainerInstantiator
Parameters:
description - the ContainerTypeDescription to return the supported configs for. Will not be null.
Returns:
String[] the supported config types. null may be returned if the given description does not support any config types.
Since:
3.0

getImportedConfigs

public java.lang.String[] getImportedConfigs(ContainerTypeDescription description,
                                             java.lang.String[] exporterSupportedConfigs)
Description copied from interface: IRemoteServiceContainerInstantiator

Get the imported config types for a given ContainerTypeDescription for the given exporter supported config types. This method will be called to determine what the local container imported configs are for the given description and exporterSupportedConfigTypes. The local provider can decide which (if any) imported config types should be returned and return them.

As an example, consider the config types for the ECF generic provider. A generic server has a config type of 'ecf.generic.server', and the client has 'ecf.generic.server'. If the generic server exports a given service, the exportersSupportedConfigTypes will be '[ecf.generic.server]'. When this method is called with the ecf.generic.client description (i.e. the container type description named 'ecf.generic.client'), it should respond with a non-null, non-empty array...e.g.: [ecf.generic.client]. This indicates that the ecf.generic.client can serve as an importer for the given exporter config type. All, other descriptions should return null, to indicate that they cannot import a remote service exported by the given exporterSupportedConfigTypes.

Specified by:
getImportedConfigs in interface IRemoteServiceContainerInstantiator
Parameters:
description - the container type description under consideration.
exporterSupportedConfigs - the exporter supported config types under consideration.
Returns:
String[] indicating the importer's supported config types. Should be null, unless one or more of the exporterSupportedConfigTypes is recognized for the given description.
Since:
3.0

getPropertiesForImportedConfigs

public java.util.Dictionary getPropertiesForImportedConfigs(ContainerTypeDescription description,
                                                            java.lang.String[] importedConfigs,
                                                            java.util.Dictionary exportedProperties)
Description copied from interface: IRemoteServiceContainerInstantiator
Get the properties associated with the given description, with the given importedConfigTypes, via the given exportedProperties.

Specified by:
getPropertiesForImportedConfigs in interface IRemoteServiceContainerInstantiator
Parameters:
description - the container type description under consideration.
importedConfigs - the imported config types for the given properties. Will not be null, and should be the same values as returned from IRemoteServiceContainerInstantiator.getImportedConfigs(ContainerTypeDescription, String[]).
exportedProperties - the properties from the exported service. Will not be null.
Returns:
Dictionary that has all of the properties for the importedConfigTypes. May be null if no properties are associated with the given description, importedConfigTypes, exportedProperties.
Since:
3.0