| <?xml version='1.0' encoding='UTF-8'?> |
| <!-- Schema file written by PDE --> |
| <schema targetNamespace="org.eclipse.ecf"> |
| <annotation> |
| <appInfo> |
| <meta.schema plugin="org.eclipse.ecf" id="sharedObjectFactory" name="ECF Shared Object Factory"/> |
| </appInfo> |
| <documentation> |
| ECF Shared Object Factory extension point (<b>org.eclipse.ecf.sharedObjectFactory</b>. This extension point allows implmenters to define an <b>org.eclipse.ecf.core.sharedobject.provider.ISharedObjectInstantiator</b> that will be responsible for creating |
| <b>org.eclipse.ecf.core.sharedobject.ISharedObject</b> instances when requested by clients. Here is the <b>ISharedObjectInstantiator</b> that |
| extensions must implement: |
| |
| <pre> |
| public interface ISharedObjectInstantiator { |
| /** |
| * Create instance of ISharedObject. This is the interface that plugin |
| * implementations must implement for the sharedObjectFactory 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: |
| * <p> |
| * </p> |
| * <p> |
| * <b> |
| * SharedObjectFactory.getDefault().createSharedObject("foosharedobject",new |
| * String [] { java.lang.String }, new Object { "hello" });</b> |
| * </p> |
| * <p> |
| * </p> |
| * |
| * @param typeDescription |
| * the SharedObjectTypeDescription associated with the registered |
| * shared object provider implementation plugin |
| * @param args |
| * arguments specified by the caller. May be null if no arguments |
| * are passed in by caller to |
| * SharedObjectFactory.getDefault().createSharedObject(...) |
| * @return ISharedObject instance. The provider implementation must return a |
| * valid object implementing ISharedObject OR throw a |
| * SharedObjectCreateException |
| * @throws SharedObjectCreateException |
| * if shared object instance cannot be created |
| */ |
| public ISharedObject createInstance( |
| SharedObjectTypeDescription typeDescription, Object[] args) |
| throws SharedObjectCreateException; |
| } |
| </pre> |
| |
| </documentation> |
| </annotation> |
| |
| <element name="extension"> |
| <complexType> |
| <sequence> |
| <element ref="sharedObjectFactory" minOccurs="1" maxOccurs="unbounded"/> |
| </sequence> |
| <attribute name="point" type="string" use="required"> |
| <annotation> |
| <documentation> |
| |
| </documentation> |
| </annotation> |
| </attribute> |
| <attribute name="id" type="string"> |
| <annotation> |
| <documentation> |
| |
| </documentation> |
| </annotation> |
| </attribute> |
| <attribute name="name" type="string"> |
| <annotation> |
| <documentation> |
| |
| </documentation> |
| </annotation> |
| </attribute> |
| </complexType> |
| </element> |
| |
| <element name="sharedObjectFactory"> |
| <complexType> |
| <sequence> |
| <element ref="property" minOccurs="0" maxOccurs="unbounded"/> |
| </sequence> |
| <attribute name="class" type="string" use="required"> |
| <annotation> |
| <documentation> |
| The fully qualified name of the class that implements the <b>org.eclipse.ecf.core.provider.ISharedObjectInstantiator</b> interface. |
| </documentation> |
| <appInfo> |
| <meta.attribute kind="java" basedOn="org.eclipse.ecf.core.sharedobject.provider.ISharedObjectInstantiator"/> |
| </appInfo> |
| </annotation> |
| </attribute> |
| <attribute name="name" type="string"> |
| <annotation> |
| <documentation> |
| An optional name for the extension. If no name is explicitly provided by the extension, the sharedObjectFactory class name is used as the name. Note that this name must <b>not</b> conflict with any other name in the ECF SharedObjectFactory in order to be successfully registered. Care should therefore be taken in selection of a name such that it does not conflict with other pre-existing names for this factory implementations |
| </documentation> |
| </annotation> |
| </attribute> |
| <attribute name="description" type="string"> |
| <annotation> |
| <documentation> |
| |
| </documentation> |
| </annotation> |
| </attribute> |
| </complexType> |
| </element> |
| |
| <element name="property"> |
| <annotation> |
| <documentation> |
| Property (name,value) associated with SharedObjectTypeDescription |
| </documentation> |
| </annotation> |
| <complexType> |
| <attribute name="name" type="string" use="required"> |
| <annotation> |
| <documentation> |
| The name of the property |
| </documentation> |
| </annotation> |
| </attribute> |
| <attribute name="value" type="string" use="required"> |
| <annotation> |
| <documentation> |
| The value of the property |
| </documentation> |
| </annotation> |
| </attribute> |
| </complexType> |
| </element> |
| |
| <annotation> |
| <appInfo> |
| <meta.section type="since"/> |
| </appInfo> |
| <documentation> |
| 0.6.0 |
| </documentation> |
| </annotation> |
| |
| <annotation> |
| <appInfo> |
| <meta.section type="examples"/> |
| </appInfo> |
| <documentation> |
| Here's an example of an extension point declaration: |
| |
| <pre> |
| <extension |
| point="org.eclipse.ecf.sharedobject.sharedObjectFactory"> |
| <sharedObjectFactory |
| class="org.eclipse.ecf.tests.provider.TestSharedObjectInstantiator" |
| name="ecf.test.sharedobjectfactory"/> |
| </extension> |
| </pre> |
| |
| and the TestSharedObjectInstantiator is defined: |
| |
| <pre> |
| public class TestSharedObjectInstantiator implements ISharedObjectInstantiator { |
| |
| public ISharedObject createInstance(SharedObjectTypeDescription description, Object[] args) throws SharedObjectCreateException { |
| System.out.println("createInstance("+description+","+((args==null)?"null":Arrays.asList(args).toString())); |
| return new TestSharedObject(); |
| } |
| } |
| </pre> |
| |
| <h3>Example Usage of Container by Clients</h3> |
| |
| Clients may use the extension via calls such as: |
| |
| <pre> |
| ISharedObject obj = SharedObjectFactory.getDefault().createSharedObject("ecf.test.sharedobjectfactory"); |
| </pre> |
| |
| |
| |
| </documentation> |
| </annotation> |
| |
| <annotation> |
| <appInfo> |
| <meta.section type="apiInfo"/> |
| </appInfo> |
| <documentation> |
| The API for accessing the functionality provided via extensions is via <b>org.eclipse.ecf.core.sharedobject.SharedObjectFactory.getDefault()</b> methods. Specifically, the <b>org.eclipse.ecf.core.sharedobject.ISharedObjectFactory.createSharedObject()</b> methods are to be used to create shared |
| object instances, where extensions implement the actual shared object creation |
| |
| Here is the <b>org.eclipse.ecf.core.sharedobject.ISharedObjectFactory</b> contract implemented by the <b>org.eclipse.ecf.core.sharedobject.SharedObjectFactory</b>: |
| |
| <pre> |
| public interface ISharedObjectFactory { |
| /* |
| * Add a SharedObjectTypeDescription to the set of known |
| * SharedObjectTypeDescriptions. |
| * |
| * @param scd the SharedObjectTypeDescription to add to this factory @return |
| * SharedObjectTypeDescription the old description of the same name, null if |
| * none found |
| */ |
| public SharedObjectTypeDescription addDescription( |
| SharedObjectTypeDescription description); |
| |
| /** |
| * Get a collection of the SharedObjectTypeDescriptions currently known to |
| * this factory. This allows clients to query the factory to determine what |
| * if any other SharedObjectTypeDescriptions are currently registered with |
| * the factory, and if so, what they are. |
| * |
| * @return List of SharedObjectTypeDescription instances. Will not be null. |
| */ |
| public List getDescriptions(); |
| |
| /** |
| * Check to see if a given named description is already contained by this |
| * factory |
| * |
| * @param description |
| * the SharedObjectTypeDescription to look for |
| * @return true if description is already known to factory, false otherwise |
| */ |
| public boolean containsDescription(SharedObjectTypeDescription description); |
| |
| /** |
| * Get the known SharedObjectTypeDescription given it's name. |
| * |
| * @param name |
| * @return SharedObjectTypeDescription found. Null if description not found. |
| * @throws SharedObjectCreateException |
| */ |
| public SharedObjectTypeDescription getDescriptionByName(String name) |
| throws SharedObjectCreateException; |
| |
| /** |
| * Create ISharedObject instance. Given a SharedObjectTypeDescription |
| * object, a String [] of argument types, and an Object [] of parameters, |
| * this method will |
| * <p> |
| * <ul> |
| * <li>lookup the known SharedObjectTypeDescriptions to find one of |
| * matching name</li> |
| * <li>if found, will retrieve or create an ISharedObjectInstantiator for |
| * that description</li> |
| * <li>Call the ISharedObjectInstantiator.createInstance method to return |
| * an instance of ISharedObject</li> |
| * </ul> |
| * |
| * @param typeDescription |
| * the SharedObjectTypeDescription to use to create the instance |
| * @param args |
| * an Object [] of arguments passed to the createInstance method |
| * of the ISharedObjectInstantiator |
| * @return a valid instance of ISharedObject. Will not be null. |
| * @throws SharedObjectCreateException |
| * if shared object cannot be created |
| */ |
| public ISharedObject createSharedObject( |
| SharedObjectTypeDescription typeDescription, Object[] args) |
| throws SharedObjectCreateException; |
| |
| /** |
| * Create ISharedObject instance. Given a SharedObjectTypeDescription name, |
| * this method will |
| * <p> |
| * <ul> |
| * <li>lookup the known SharedObjectTypeDescriptions to find one of |
| * matching name</li> |
| * <li>if found, will retrieve or create an ISharedObjectInstantiator for |
| * that description</li> |
| * <li>Call the ISharedObjectInstantiator.createInstance method to return |
| * an instance of ISharedObject</li> |
| * </ul> |
| * |
| * @param descriptionName |
| * the SharedObjectTypeDescription name to lookup |
| * @return a valid instance of ISharedObject. Will not be null. |
| * @throws SharedObjectCreateException |
| */ |
| public ISharedObject createSharedObject(String descriptionName) |
| throws SharedObjectCreateException; |
| |
| /** |
| * Create ISharedObject instance. Given a SharedObjectTypeDescription name, |
| * this method will |
| * <p> |
| * <ul> |
| * <li>lookup the known SharedObjectTypeDescriptions to find one of |
| * matching name</li> |
| * <li>if found, will retrieve or create an ISharedObjectInstantiator for |
| * that description</li> |
| * <li>Call the ISharedObjectInstantiator.createInstance method to return |
| * an instance of ISharedObject</li> |
| * </ul> |
| * |
| * @param descriptionName |
| * the SharedObjectTypeDescription name to lookup |
| * @param args |
| * the Object [] of arguments passed to the |
| * ISharedObjectInstantiator.createInstance method |
| * @return a valid instance of IContainer. Will not be null. |
| * @throws SharedObjectCreateException |
| */ |
| public ISharedObject createSharedObject(String descriptionName, |
| Object[] args) throws SharedObjectCreateException; |
| |
| /** |
| * Remove given description from set known to this factory. |
| * |
| * @param scd |
| * the SharedObjectTypeDescription to remove |
| * @return the removed SharedObjectTypeDescription, null if nothing removed |
| */ |
| public SharedObjectTypeDescription removeDescription( |
| SharedObjectTypeDescription scd); |
| } |
| </pre> |
| |
| See the "Examples" page for an example usage of the extension point. |
| |
| |
| </documentation> |
| </annotation> |
| |
| <annotation> |
| <appInfo> |
| <meta.section type="implementation"/> |
| </appInfo> |
| <documentation> |
| |
| </documentation> |
| </annotation> |
| |
| <annotation> |
| <appInfo> |
| <meta.section type="copyright"/> |
| </appInfo> |
| <documentation> |
| Copyright (c) 2004 Composent, Inc. and others. |
| 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: Composent, Inc. - initial API and implementation |
| </documentation> |
| </annotation> |
| |
| </schema> |