You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2012/02/09 11:45:51 UTC
svn commit: r1242270 -
/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
Author: clement
Date: Thu Feb 9 10:45:51 2012
New Revision: 1242270
URL: http://svn.apache.org/viewvc?rev=1242270&view=rev
Log:
Cosmetic changes.
Modified:
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java?rev=1242270&r1=1242269&r2=1242270&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java Thu Feb 9 10:45:51 2012
@@ -47,19 +47,20 @@ import org.osgi.framework.ServiceReferen
* consists to create and manage component instances build with the current
* component factory. This class could export Factory and ManagedServiceFactory
* services.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
* @see IPojoFactory
* @see TrackerCustomizer
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class ComponentFactory extends IPojoFactory implements TrackerCustomizer {
- /**
- * System property set to automatically attach primitive handlers to primitive
- * component types.
- * The value is a String parsed as a list (comma separated). Each element is
- * the fully qualified name of the handler <code>namespace:name</code>.
- */
- public static final String HANDLER_AUTO_PRIMITIVE = "org.apache.felix.ipojo.handler.auto.primitive";
+ /**
+ * System property set to automatically attach primitive handlers to primitive
+ * component types.
+ * The value is a String parsed as a list (comma separated). Each element is
+ * the fully qualified name of the handler <code>namespace:name</code>.
+ */
+ public static final String HANDLER_AUTO_PRIMITIVE = "org.apache.felix.ipojo.handler.auto.primitive";
/**
@@ -97,8 +98,9 @@ public class ComponentFactory extends IP
/**
* Creates a instance manager factory.
* The class is given in parameter. The component type is not a composite.
+ *
* @param context the bundle context
- * @param clazz the component class
+ * @param clazz the component class
* @param element the metadata of the component
* @throws ConfigurationException if the element describing the factory is malformed.
*/
@@ -109,6 +111,7 @@ public class ComponentFactory extends IP
/**
* Creates a instance manager factory.
+ *
* @param context the bundle context
* @param element the metadata of the component to create
* @throws ConfigurationException if element describing the factory is malformed.
@@ -120,6 +123,7 @@ public class ComponentFactory extends IP
/**
* Gets the component type description of the current factory.
+ *
* @return the description of the component type attached to this factory.
* @see org.apache.felix.ipojo.IPojoFactory#getComponentTypeDescription()
*/
@@ -131,18 +135,22 @@ public class ComponentFactory extends IP
* Allows a factory to check if the given element is well-formed.
* A component factory metadata is correct if they contain the 'classname' attribute.
* As this method is called from the (single-threaded) constructor, no synchronization is needed.
+ *
* @param element the metadata describing the component
* @throws ConfigurationException if the element describing the factory is malformed.
*/
public void check(Element element) throws ConfigurationException {
m_classname = element.getAttribute("classname");
- if (m_classname == null) { throw new ConfigurationException("A component needs a class name : " + element); }
+ if (m_classname == null) {
+ throw new ConfigurationException("A component needs a class name : " + element);
+ }
m_manipulation = new PojoMetadata(m_componentMetadata);
}
/**
* Gets the class name.
* No synchronization needed, the classname is immutable.
+ *
* @return the class name.
* @see org.apache.felix.ipojo.IPojoFactory#getClassName()
*/
@@ -153,11 +161,13 @@ public class ComponentFactory extends IP
/**
* Creates a primitive instance.
* This method is called when holding the lock.
- * @param config the instance configuration
- * @param context the service context (null if the instance has to be created in the global space).
+ *
+ * @param config the instance configuration
+ * @param context the service context (null if the instance has to be created in the global space).
* @param handlers the handlers to attach to the instance
* @return the created instance
- * @throws org.apache.felix.ipojo.ConfigurationException if the configuration process failed.
+ * @throws org.apache.felix.ipojo.ConfigurationException
+ * if the configuration process failed.
* @see org.apache.felix.ipojo.IPojoFactory#createInstance(java.util.Dictionary, org.apache.felix.ipojo.IPojoContext, org.apache.felix.ipojo.HandlerManager[])
*/
public ComponentInstance createInstance(Dictionary config, IPojoContext context, HandlerManager[] handlers) throws org.apache.felix.ipojo.ConfigurationException {
@@ -192,8 +202,9 @@ public class ComponentFactory extends IP
* is created twice.
* This method delegate the <code>define</code> method invocation to the
* factory classloader.
- * @param name the qualified name of the class
- * @param clazz the byte array of the class
+ *
+ * @param name the qualified name of the class
+ * @param clazz the byte array of the class
* @param domain the protection domain of the class
* @return the defined class object
*/
@@ -208,6 +219,7 @@ public class ComponentFactory extends IP
* Returns the URL of a resource.
* This methods delegates the invocation to the
* {@link Bundle#getResource(String)} method.
+ *
* @param resName the resource name
* @return the URL of the resource
*/
@@ -222,6 +234,7 @@ public class ComponentFactory extends IP
* to load is the implementation class or not.
* If it is, the factory classloader is used, else
* the {@link Bundle#loadClass(String)} is called.
+ *
* @param className the name of the class to load
* @return the resulting Class object
* @throws ClassNotFoundException if the class is not found
@@ -270,6 +283,7 @@ public class ComponentFactory extends IP
* the 'name' and 'classname' attributes.
* This method does not manipulate any non-immutable fields,
* so does not need to be synchronized.
+ *
* @return the factory name.
*/
public String getFactoryName() {
@@ -287,6 +301,7 @@ public class ComponentFactory extends IP
* so does not need to be synchronized.
* This method checks the {@link ComponentFactory#HANDLER_AUTO_PRIMITIVE}
* system property to add the listed handlers to the required handler set.
+ *
* @return the required handler list.
*/
public List getRequiredHandlerList() {
@@ -333,25 +348,25 @@ public class ComponentFactory extends IP
// Manage auto attached handler.
String v = System.getProperty(HANDLER_AUTO_PRIMITIVE);
- if (v != null && v.length() != 0) {
- String[] hs = ParseUtils.split(v, ",");
- for (int i = 0; i < hs.length; i++) {
- String h = hs[i].trim();
- String[] segments = ParseUtils.split(h, ":");
- RequiredHandler rq = null;
- if (segments.length == 2) { // External handler
- rq = new RequiredHandler(segments[1], segments[0]);
- } else if (segments.length == 1) { // Core handler
- rq = new RequiredHandler(segments[1], null);
- } // Others case are ignored.
-
- if (rq != null) {
- // Check it's not already contained
- if (! list.contains(rq)) {
- list.add(rq);
- }
- }
- }
+ if (v != null && v.length() != 0) {
+ String[] hs = ParseUtils.split(v, ",");
+ for (int i = 0; i < hs.length; i++) {
+ String h = hs[i].trim();
+ String[] segments = ParseUtils.split(h, ":");
+ RequiredHandler rq = null;
+ if (segments.length == 2) { // External handler
+ rq = new RequiredHandler(segments[1], segments[0]);
+ } else if (segments.length == 1) { // Core handler
+ rq = new RequiredHandler(segments[1], null);
+ } // Others case are ignored.
+
+ if (rq != null) {
+ // Check it's not already contained
+ if (!list.contains(rq)) {
+ list.add(rq);
+ }
+ }
+ }
}
@@ -363,6 +378,7 @@ public class ComponentFactory extends IP
* Test if the factory can be used or not.
* This method need to be synchronized as it accesses to the content
* of required handlers.
+ *
* @param reference the new service reference.
* @return <code>true</code> if the given factory reference matches with a required handler.
* @see org.apache.felix.ipojo.util.TrackerCustomizer#addingService(org.osgi.framework.ServiceReference)
@@ -388,6 +404,7 @@ public class ComponentFactory extends IP
* This method is called when a matching service has been added to the tracker,
* we can no compute the factory state. This method is synchronized to avoid
* concurrent calls to method modifying the factory state.
+ *
* @param reference the added service reference.
* @see org.apache.felix.ipojo.util.TrackerCustomizer#addedService(org.osgi.framework.ServiceReference)
*/
@@ -401,8 +418,9 @@ public class ComponentFactory extends IP
* This method is called when a used handler factory disappears.
* This method is synchronized to avoid concurrent calls to method modifying
* the factory state.
+ *
* @param reference the leaving service reference.
- * @param service the handler factory object.
+ * @param service the handler factory object.
* @see org.apache.felix.ipojo.util.TrackerCustomizer#removedService(org.osgi.framework.ServiceReference, java.lang.Object)
*/
public synchronized void removedService(ServiceReference reference, Object service) {
@@ -421,8 +439,9 @@ public class ComponentFactory extends IP
* This method is called when a used handler factory is modified.
* However, handler factory modification is not possible, so this method
* is never called.
+ *
* @param reference the service reference
- * @param service the Factory object (if already get)
+ * @param service the Factory object (if already get)
* @see org.apache.felix.ipojo.util.TrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference, java.lang.Object)
*/
public void modifiedService(ServiceReference reference, Object service) {
@@ -431,6 +450,7 @@ public class ComponentFactory extends IP
/**
* Returns manipulation metadata of this component type.
+ *
* @return manipulation metadata of this component type.
*/
public PojoMetadata getPojoMetadata() {
@@ -439,6 +459,7 @@ public class ComponentFactory extends IP
/**
* Gets the version of the component type.
+ *
* @return the version of <code>null</code> if not set.
* @see org.apache.felix.ipojo.Factory#getVersion()
*/
@@ -454,8 +475,9 @@ public class ComponentFactory extends IP
* this class defines the classloader attached to a factory.
* This class loader is used to load the implementation (e.g. manipulated)
* class.
- * @see ClassLoader
+ *
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ * @see ClassLoader
*/
private class FactoryClassloader extends ClassLoader {
@@ -466,13 +488,16 @@ public class ComponentFactory extends IP
/**
* The defineClass method.
- * @param name name of the class
- * @param clazz the byte array of the class
+ *
+ * @param name name of the class
+ * @param clazz the byte array of the class
* @param domain the protection domain
* @return the defined class.
*/
public Class defineClass(String name, byte[] clazz, ProtectionDomain domain) {
- if (m_definedClasses.containsKey(name)) { return (Class) m_definedClasses.get(name); }
+ if (m_definedClasses.containsKey(name)) {
+ return (Class) m_definedClasses.get(name);
+ }
Class clas = super.defineClass(name, clazz, 0, clazz.length, domain);
m_definedClasses.put(name, clas);
return clas;
@@ -480,6 +505,7 @@ public class ComponentFactory extends IP
/**
* Returns the URL of the required resource.
+ *
* @param arg the name of the resource to find.
* @return the URL of the resource.
* @see java.lang.ClassLoader#getResource(java.lang.String)
@@ -490,11 +516,12 @@ public class ComponentFactory extends IP
/**
* Loads the given class.
- * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
- * @param name the name of the class
+ *
+ * @param name the name of the class
* @param resolve should be the class resolve now ?
* @return the loaded class object
* @throws ClassNotFoundException if the class to load is not found
+ * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
* @see java.lang.ClassLoader#loadClass(String, boolean)
*/
protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
@@ -506,44 +533,44 @@ public class ComponentFactory extends IP
* This class defines the description of primitive (non-composite) component
* types. An instance of this class will be returned when invoking the
* {@link ComponentFactory#getComponentDescription()} method.
+ *
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
private final class PrimitiveTypeDescription extends ComponentTypeDescription {
- /*
- * Set to keep component's all super-class class-names.
- */
- private Set m_superClasses = new HashSet();
-
- /*
- * Set to keep component's all interface class-names.
- */
- private Set m_interfaces = new HashSet();
-
+ /*
+ * Set to keep component's all super-class class-names.
+ */
+ private Set m_superClasses = new HashSet();
+
+ /*
+ * Set to keep component's all interface class-names.
+ */
+ private Set m_interfaces = new HashSet();
+
/**
* Creates a PrimitiveTypeDescription object.
+ *
* @param factory the factory attached to this component type description.
*/
public PrimitiveTypeDescription(IPojoFactory factory) {
super(factory);
-
- try
- {
- // Read inherited classes and interfaces into given Sets.
- new InheritanceInspector(getPojoMetadata(), getBundleContext().getBundle()).
- computeInterfacesAndSuperClasses(m_interfaces, m_superClasses);
- }
- catch (ClassNotFoundException e)
- {
- m_interfaces.clear();
- m_superClasses.clear();
- }
-
+
+ try {
+ // Read inherited classes and interfaces into given Sets.
+ new InheritanceInspector(getPojoMetadata(), getBundleContext().getBundle()).
+ computeInterfacesAndSuperClasses(m_interfaces, m_superClasses);
+ } catch (ClassNotFoundException e) {
+ m_interfaces.clear();
+ m_superClasses.clear();
+ }
+
}
/**
* Computes the properties to publish.
* The <code>component.class</code> property contains the implementation class name.
+ *
* @return the dictionary of properties to publish
* @see org.apache.felix.ipojo.architecture.ComponentTypeDescription#getPropertiesToPublish()
*/
@@ -557,62 +584,65 @@ public class ComponentFactory extends IP
/**
* Adds the "implementation-class" attribute to the type description.
+ *
* @return the component type description.
* @see org.apache.felix.ipojo.architecture.ComponentTypeDescription#getDescription()
*/
public Element getDescription() {
Element elem = super.getDescription();
elem.addAttribute(new Attribute("Implementation-Class", m_classname));
-
+
/* Adding interfaces and super-classes of component into description */
Element inheritance = new Element("Inherited", "");
-
- inheritance.addAttribute(new Attribute("Interfaces",m_interfaces.toString()));
- inheritance.addAttribute(new Attribute("SuperClasses",m_superClasses.toString()));
+
+ inheritance.addAttribute(new Attribute("Interfaces", m_interfaces.toString()));
+ inheritance.addAttribute(new Attribute("SuperClasses", m_superClasses.toString()));
elem.addElement(inheritance);
return elem;
}
-
+
/**
* This class is used to collect interfaces and super-classes of given component in specified Sets.
+ *
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
- private final class InheritanceInspector{
- /*
- * PojoMetadata of target Component.
- */
- private PojoMetadata m_pojoMetadata;
-
- /*
- * Bundle exposing target component.
- */
- private Bundle m_bundle;
-
-
- /**
- * Creates a TypeCollector object
- * @param pojoMetadata PojoMetadata describing Component.
- * @param bundle Bundle which has been exposed the intended Component.
- */
- public InheritanceInspector(PojoMetadata pojoMetadata,Bundle bundle)
- {
- m_pojoMetadata = pojoMetadata;
- m_bundle = bundle;
- }
-
- /**
+ private final class InheritanceInspector {
+ /*
+ * PojoMetadata of target Component.
+ */
+ private PojoMetadata m_pojoMetadata;
+
+ /*
+ * Bundle exposing target component.
+ */
+ private Bundle m_bundle;
+
+
+ /**
+ * Creates a TypeCollector object
+ *
+ * @param pojoMetadata PojoMetadata describing Component.
+ * @param bundle Bundle which has been exposed the intended Component.
+ */
+ public InheritanceInspector(PojoMetadata pojoMetadata, Bundle bundle) {
+ m_pojoMetadata = pojoMetadata;
+ m_bundle = bundle;
+ }
+
+ /**
* Collect interfaces implemented by the POJO into given Sets.
+ *
* @param interfaces : the set of implemented interfaces
- * @param classes : the set of extended classes
+ * @param classes : the set of extended classes
* @throws ClassNotFoundException : occurs when an interface cannot be loaded.
*/
public void computeInterfacesAndSuperClasses(Set interfaces, Set classes) throws ClassNotFoundException {
-
- String[] immediateInterfaces = m_pojoMetadata.getInterfaces();
- String parentClass = m_pojoMetadata.getSuperClass();
-
+
+ String[] immediateInterfaces = m_pojoMetadata.getInterfaces();
+ String parentClass = m_pojoMetadata.getSuperClass();
+
// First iterate on found specification in manipulation metadata
for (int i = 0; i < immediateInterfaces.length; i++) {
interfaces.add(immediateInterfaces[i]);
@@ -628,15 +658,16 @@ public class ComponentFactory extends IP
classes.add(parentClass);
collectParentClassesFromClass(clazz, classes, m_bundle);
}
-
+
// Removing Object Class from the inherited classes list.
classes.remove(Object.class.getName());
}
/**
* Look for inherited interfaces.
- * @param clazz : interface name to explore (class object)
- * @param acc : set (accumulator)
+ *
+ * @param clazz : interface name to explore (class object)
+ * @param acc : set (accumulator)
* @param bundle : bundle
* @throws ClassNotFoundException : occurs when an interface cannot be loaded.
*/
@@ -651,8 +682,9 @@ public class ComponentFactory extends IP
/**
* Collect interfaces for the given class.
* This method explores super class to.
- * @param clazz : class object.
- * @param acc : set of implemented interface (accumulator)
+ *
+ * @param clazz : class object.
+ * @param acc : set of implemented interface (accumulator)
* @param bundle : bundle.
* @throws ClassNotFoundException : occurs if an interface cannot be load.
*/
@@ -671,8 +703,9 @@ public class ComponentFactory extends IP
/**
* Collect parent classes for the given class.
- * @param clazz : class object.
- * @param acc : set of extended classes (accumulator)
+ *
+ * @param clazz : class object.
+ * @param acc : set of extended classes (accumulator)
* @param bundle : bundle.
* @throws ClassNotFoundException : occurs if an interface cannot be load.
*/