You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2007/03/06 15:04:27 UTC
svn commit: r515124 - in /incubator/felix/trunk/ipojo: ./
src/main/java/org/apache/felix/ipojo/
src/main/java/org/apache/felix/ipojo/architecture/
src/main/java/org/apache/felix/ipojo/handlers/architecture/
src/main/java/org/apache/felix/ipojo/handlers...
Author: rickhall
Date: Tue Mar 6 06:04:26 2007
New Revision: 515124
URL: http://svn.apache.org/viewvc?view=rev&rev=515124
Log:
Applied patch (FELIX-244) to allow external handlers to participate in
the architecture service and to migrate immediate component management
code from the instance manager to the lifecycle callback handler.
Added:
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java (with props)
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java (with props)
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java (with props)
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java (with props)
Removed:
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/architecture/DependencyDescription.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/architecture/DependencyHandlerDescription.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/architecture/ProvidedServiceDescription.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/architecture/ProvidedServiceHandlerDescription.java
Modified:
incubator/felix/trunk/ipojo/pom.xml
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/ComponentInstance.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/Handler.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/InstanceManager.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandler.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/lifecycle/callback/LifecycleCallbackHandler.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/Property.java
incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
Modified: incubator/felix/trunk/ipojo/pom.xml
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/pom.xml?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/pom.xml (original)
+++ incubator/felix/trunk/ipojo/pom.xml Tue Mar 6 06:04:26 2007
@@ -49,7 +49,9 @@
org.apache.felix.ipojo.metadata,
org.apache.felix.ipojo.architecture,
org.apache.felix.ipojo.parser,
- org.apache.felix.ipojo.util,
+ org.apache.felix.ipojo.util,
+ org.apache.felix.ipojo.handlers.dependency,
+ org.apache.felix.ipojo.handlers.providedservice,
org.osgi.service.cm; specification-version="1.2",
org.osgi.service.log; specification-version="1.3"
</exportPackage>
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/ComponentInstance.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/ComponentInstance.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/ComponentInstance.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/ComponentInstance.java Tue Mar 6 06:04:26 2007
@@ -82,7 +82,7 @@
String getInstanceName();
/**
- * @return true if getState return 1 or 2.
+ * @return true if getState returns INVALID or VALID.
*/
boolean isStarted();
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/Handler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/Handler.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/Handler.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/Handler.java Tue Mar 6 06:04:26 2007
@@ -20,6 +20,7 @@
import java.util.Dictionary;
+import org.apache.felix.ipojo.architecture.HandlerDescription;
import org.apache.felix.ipojo.metadata.Element;
/**
@@ -78,4 +79,9 @@
* @param instance : the created instance
*/
public void createInstance(Object instance) { }
+
+ /**
+ * @return the description of the handler..
+ */
+ public HandlerDescription getDescription() { return new HandlerDescription(this.getClass().getName(), isValid()); }
}
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/InstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/InstanceManager.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/InstanceManager.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/InstanceManager.java Tue Mar 6 06:04:26 2007
@@ -24,6 +24,7 @@
import java.util.HashMap;
import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.architecture.InstanceDescription;
import org.apache.felix.ipojo.metadata.Element;
import org.apache.felix.ipojo.util.Logger;
import org.osgi.framework.BundleContext;
@@ -51,11 +52,6 @@
private String m_className;
/**
- * Is the component an immediate component ?
- */
- private boolean m_isImmediate = false;
-
- /**
* The context of the component.
*/
private BundleContext m_context;
@@ -118,7 +114,6 @@
if (m_className == null) {
m_factory.getLogger().log(Logger.ERROR, "The class name of the component cannot be setted, it does not exist in the metadata");
}
- if (cm.containsAttribute("immediate") && cm.getAttribute("immediate").equalsIgnoreCase("true")) { m_isImmediate = true; }
// ComponentInfo initialization
m_componentDesc = new ComponentDescription();
@@ -134,9 +129,9 @@
Handler h = (Handler) IPojoConfiguration.INTERNAL_HANDLERS[i].newInstance();
h.configure(this, cm, configuration);
} catch (InstantiationException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Cannot instantiate the handler " + IPojoConfiguration.INTERNAL_HANDLERS[i] + " : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Cannot instantiate the handler " + IPojoConfiguration.INTERNAL_HANDLERS[i] + " : " + e.getMessage());
} catch (IllegalAccessException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Cannot instantiate the handler " + IPojoConfiguration.INTERNAL_HANDLERS[i] + " : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Cannot instantiate the handler " + IPojoConfiguration.INTERNAL_HANDLERS[i] + " : " + e.getMessage());
}
}
@@ -149,11 +144,11 @@
Handler h = (Handler) c.newInstance();
h.configure(this, cm, configuration);
} catch (ClassNotFoundException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
} catch (InstantiationException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
} catch (IllegalAccessException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Cannot instantiate the handler " + cm.getNamespaces()[i] + " : " + e.getMessage());
}
}
@@ -165,6 +160,23 @@
* @return the component type information.
*/
public ComponentDescription getComponentDescription() { return m_componentDesc; }
+
+ public InstanceDescription getInstanceDescription() {
+ int componentState = getState();
+ InstanceDescription instanceDescription = new InstanceDescription(m_name, m_className, componentState, getContext().getBundle().getBundleId());
+
+ String[] objects = new String[getPojoObjects().length];
+ for (int i = 0; i < getPojoObjects().length; i++) {
+ objects[i] = getPojoObjects()[i].toString();
+ }
+ instanceDescription.setCreatedObjects(objects);
+
+ Handler[] handlers = getRegistredHandlers();
+ for (int i = 0; i < handlers.length; i++) {
+ instanceDescription.addHandler(handlers[i].getDescription());
+ }
+ return instanceDescription;
+ }
/**
* @return the list of the registred handlers.
@@ -199,7 +211,7 @@
if(m_state != STOPPED) { return; } // Instance already started
// Start all the handlers
- m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] Start the instance manager with " + m_handlers.length + " handlers");
+ m_factory.getLogger().log(Logger.INFO, "[" + m_name + "] Start the instance manager with " + m_handlers.length + " handlers");
// The new state of the component is UNRESOLVED
m_state = INVALID;
@@ -236,8 +248,8 @@
if (m_state != state) {
// Log the state change
- if (state == INVALID) { m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] State -> INVALID"); }
- if (state == VALID) { m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] State -> VALID"); }
+ if (state == INVALID) { m_factory.getLogger().log(Logger.INFO, "[" + m_name + "] State -> INVALID"); }
+ if (state == VALID) { m_factory.getLogger().log(Logger.INFO, "[" + m_name + "] State -> VALID"); }
// The state changed call the handler stateChange method
m_state = state;
@@ -273,7 +285,7 @@
try {
m_clazz = m_factory.loadClass(m_className);
} catch (ClassNotFoundException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] Class not found during the loading phase : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] Class not found during the loading phase : " + e.getMessage());
return;
}
}
@@ -348,7 +360,6 @@
if (!isLoaded()) { load(); }
Object instance = null;
try {
- m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] createInstance -> Try to find the constructor");
// Try to find if there is a constructor with a bundle context as parameter :
try {
@@ -366,23 +377,23 @@
}
} catch (InstantiationException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] createInstance -> The Component Instance cannot be instancied : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] createInstance -> The Component Instance cannot be instancied : " + e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] createInstance -> The Component Instance is not accessible : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] createInstance -> The Component Instance is not accessible : " + e.getMessage());
e.printStackTrace();
} catch (SecurityException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] createInstance -> The Component Instance is not accessible (security reason) : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] createInstance -> The Component Instance is not accessible (security reason) : " + e.getMessage());
e.printStackTrace();
} catch (InvocationTargetException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] createInstance -> Cannot invoke the constructor method (illegal target) : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] createInstance -> Cannot invoke the constructor method (illegal target) : " + e.getMessage());
e.printStackTrace();
} catch (NoSuchMethodException e) {
- m_factory.getLogger().log(Logger.ERROR, "[" + m_className + "] createInstance -> Cannot invoke the constructor (method not found) : " + e.getMessage());
+ m_factory.getLogger().log(Logger.ERROR, "[" + m_name + "] createInstance -> Cannot invoke the constructor (method not found) : " + e.getMessage());
e.printStackTrace();
}
- m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] createInstance -> Return the instance " + instance);
+ m_factory.getLogger().log(Logger.INFO, "[" + m_name + "] createInstance -> Return the instance " + instance);
// Register the new instance
addInstance(instance);
@@ -567,7 +578,7 @@
* Check the state of all handlers.
*/
public void checkInstanceState() {
- m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] Check the component state");
+ m_factory.getLogger().log(Logger.INFO, "[" + m_name + "] Check the instance state");
boolean isValid = true;
for (int i = 0; i < m_handlers.length; i++) {
boolean b = m_handlers[i].isValid();
@@ -581,12 +592,7 @@
m_pojoObjects = new Object[0];
return;
}
- if (isValid && m_state == INVALID) {
- setState(VALID);
- if (m_isImmediate && m_pojoObjects.length == 0) { createPojoObject(); }
- }
-
- m_factory.getLogger().log(Logger.INFO, "[" + m_className + "] Component Manager : " + m_state);
+ if (isValid && m_state == INVALID) { setState(VALID); }
}
public String getInstanceName() { return m_name; }
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java Tue Mar 6 06:04:26 2007
@@ -24,17 +24,7 @@
import org.apache.felix.ipojo.Handler;
import org.apache.felix.ipojo.InstanceManager;
import org.apache.felix.ipojo.architecture.Architecture;
-import org.apache.felix.ipojo.architecture.DependencyDescription;
-import org.apache.felix.ipojo.architecture.DependencyHandlerDescription;
-import org.apache.felix.ipojo.architecture.HandlerDescription;
import org.apache.felix.ipojo.architecture.InstanceDescription;
-import org.apache.felix.ipojo.architecture.ProvidedServiceDescription;
-import org.apache.felix.ipojo.architecture.ProvidedServiceHandlerDescription;
-import org.apache.felix.ipojo.handlers.dependency.Dependency;
-import org.apache.felix.ipojo.handlers.dependency.DependencyHandler;
-import org.apache.felix.ipojo.handlers.providedservice.Property;
-import org.apache.felix.ipojo.handlers.providedservice.ProvidedService;
-import org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler;
import org.apache.felix.ipojo.metadata.Element;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -62,11 +52,6 @@
private String m_name;
/**
- * Component Type.
- */
- private String m_className;
-
- /**
* @see org.apache.felix.ipojo.Handler#configure(org.apache.felix.ipojo.InstanceManager, org.apache.felix.ipojo.metadata.Element)
*/
public void configure(InstanceManager im, Element metadata, Dictionary configuration) {
@@ -75,8 +60,6 @@
if (isArchitectureEnabled.equalsIgnoreCase("true")) { im.register(this); }
}
- m_className = metadata.getAttribute("className");
-
m_name = (String) configuration.get("name");
m_manager = im;
@@ -112,55 +95,7 @@
* @see org.apache.felix.ipojo.architecture.Architecture#getComponentDescription()
*/
public InstanceDescription getInstanceDescription() {
- int componentState = m_manager.getState();
- InstanceDescription instanceDescription = new InstanceDescription(m_name, m_className, componentState, m_manager.getContext().getBundle().getBundleId());
-
- String[] objects = new String[m_manager.getPojoObjects().length];
- for (int i = 0; i < m_manager.getPojoObjects().length; i++) {
- objects[i] = m_manager.getPojoObjects()[i].toString();
- }
- instanceDescription.setCreatedObjects(objects);
-
- Handler[] handlers = m_manager.getRegistredHandlers();
- for (int i = 0; i < handlers.length; i++) {
- if (handlers[i] instanceof DependencyHandler) {
- DependencyHandler dh = (DependencyHandler) handlers[i];
- DependencyHandlerDescription dhd = new DependencyHandlerDescription(dh.isValid());
- for (int j = 0; j < dh.getDependencies().length; j++) {
- Dependency dep = dh.getDependencies()[j];
- // Create & add the dependency description
- DependencyDescription dd = new DependencyDescription(dep.getSpecification(), dep.isMultiple(), dep.isOptional(), dep.getFilter(), dep.getState(), instanceDescription);
- dd.setServiceReferences(dep.getServiceReferences());
- dd.setUsedServices(dep.getUsedServices());
- dhd.addDependency(dd);
- }
- instanceDescription.addHandler(dhd);
- } else {
- if (handlers[i] instanceof ProvidedServiceHandler) {
- ProvidedServiceHandler psh = (ProvidedServiceHandler) handlers[i];
- ProvidedServiceHandlerDescription pshd = new ProvidedServiceHandlerDescription(psh.isValid());
-
- for (int j = 0; j < psh.getProvidedService().length; j++) {
- ProvidedService ps = psh.getProvidedService()[j];
- ProvidedServiceDescription psd = new ProvidedServiceDescription(ps.getServiceSpecification(), ps.getState(), ps.getServiceReference(), instanceDescription);
-
- Properties props = new Properties();
- for (int k = 0; k < ps.getProperties().length; k++) {
- Property prop = ps.getProperties()[k];
- if (prop.getValue() != null) { props.put(prop.getName(), prop.getValue().toString()); }
- }
- psd.setProperty(props);
- pshd.addProvidedService(psd);
- }
- instanceDescription.addHandler(pshd);
- }
- else {
- // Else add a generic handler to the description
- instanceDescription.addHandler(new HandlerDescription(handlers[i].getClass().getName(), handlers[i].isValid()));
- }
- }
- }
- return instanceDescription;
+ return m_manager.getInstanceDescription();
}
}
Added: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java?view=auto&rev=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java (added)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java Tue Mar 6 06:04:26 2007
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handlers.dependency;
+
+import java.util.HashMap;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Dependency Description.
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class DependencyDescription {
+
+ /**
+ * Needed Service Interface.
+ */
+ private String m_interface;
+
+ /**
+ * Multiple ?
+ */
+ private boolean m_multiple;
+
+ /**
+ * Optional ?
+ */
+ private boolean m_optional;
+
+ /**
+ * State (VALID | INVALID).
+ */
+ private int m_state;
+
+ /**
+ * Filter.
+ */
+ private String m_filter;
+
+ /**
+ * Hashmap [Instance reference, service reference] of the used service.
+ */
+ private HashMap m_usedServices = new HashMap();
+
+ /**
+ * The list of service reference.
+ */
+ private ServiceReference[] m_serviceReferences;
+
+ /**
+ * @return true if the dependency is a multiple dependency.
+ */
+ public boolean isMultiple() { return m_multiple; }
+
+ /**
+ * @return true if the dependency is an optional dependency.
+ */
+ public boolean isOptional() { return m_optional; }
+
+ /**
+ * @return the filter.
+ */
+ public String getFilter() { return m_filter; }
+
+ /**
+ * @return the needed interface.
+ */
+ public String getInterface() { return m_interface; }
+
+ /**
+ * @return the state of the dependency.
+ */
+ public int getState() { return m_state; }
+
+ /**
+ * Constructor.
+ * @param itf : the needed itf
+ * @param multiple : is the dependency a multiple dependency ?
+ * @param optional : is the depdendency optional ?
+ * @param filter : the filter
+ * @param state : the state
+ */
+ public DependencyDescription(String itf, boolean multiple, boolean optional, String filter, int state) {
+ super();
+ m_interface = itf;
+ m_multiple = multiple;
+ m_optional = optional;
+ m_filter = filter;
+ m_state = state;
+ m_serviceReferences = new ServiceReference[0];
+ }
+
+ /**
+ * @return the array of service reference (only if the cardinality could be n).
+ */
+ public ServiceReference[] getServiceReferences() { return m_serviceReferences; }
+
+ /**
+ * @return the ServiceReference (only if the cardinality could be 1).
+ */
+ public ServiceReference getServiceReference() { return m_serviceReferences[0]; }
+
+ /**
+ * Set the service reference array.
+ * @param sr : the array of service reference
+ */
+ public void setServiceReferences(ServiceReference[] sr) { m_serviceReferences = sr; }
+
+ /**
+ * @return the hashmap [object reference, service reference] containing the used services
+ */
+ public HashMap getUsedServices() { return m_usedServices; }
+
+ /**
+ * Set the usedServices.
+ * @param hm : the new usedService
+ */
+ public void setUsedServices(HashMap hm) {
+ m_usedServices = hm;
+ }
+
+
+
+}
Propchange: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandler.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandler.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandler.java Tue Mar 6 06:04:26 2007
@@ -23,6 +23,7 @@
import org.apache.felix.ipojo.Handler;
import org.apache.felix.ipojo.InstanceManager;
+import org.apache.felix.ipojo.architecture.HandlerDescription;
import org.apache.felix.ipojo.handlers.dependency.nullable.NullableObjectWriter;
import org.apache.felix.ipojo.metadata.Element;
import org.apache.felix.ipojo.util.Logger;
@@ -354,6 +355,19 @@
}
m_manager.getFactory().getLogger().log(Logger.INFO, "[DependencyHandler on " + m_manager.getClassName() + "] Component Dependencies are valid");
return valide;
+ }
+
+ public HandlerDescription getDescription() {
+ DependencyHandlerDescription dhd = new DependencyHandlerDescription(isValid());
+ for (int j = 0; j < getDependencies().length; j++) {
+ Dependency dep = getDependencies()[j];
+ // Create & add the dependency description
+ DependencyDescription dd = new DependencyDescription(dep.getSpecification(), dep.isMultiple(), dep.isOptional(), dep.getFilter(), dep.getState());
+ dd.setServiceReferences(dep.getServiceReferences());
+ dd.setUsedServices(dep.getUsedServices());
+ dhd.addDependency(dd);
+ }
+ return dhd;
}
}
Added: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java?view=auto&rev=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java (added)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java Tue Mar 6 06:04:26 2007
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handlers.dependency;
+
+import java.util.Iterator;
+
+import org.apache.felix.ipojo.architecture.HandlerDescription;
+
+/**
+ * Dependency Handler Description.
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class DependencyHandlerDescription extends HandlerDescription {
+
+
+ /**
+ * Dependencies managed by the dependency handler.
+ */
+ private DependencyDescription[] m_dependencies = new DependencyDescription[0];
+
+ /**
+ * Constructor.
+ * @param isValid : the validity of the dependency handler.
+ */
+ public DependencyHandlerDescription(boolean isValid) {
+ super(DependencyHandler.class.getName(), isValid);
+ }
+
+ /**
+ * @return the dependencies list.
+ */
+ public DependencyDescription[] getDependencies() { return m_dependencies; }
+
+ /**
+ * Add a dependency.
+ * @param dep : the dependency to add
+ */
+ public void addDependency(DependencyDescription dep) {
+ // Verify that the dependency description is not already in the array.
+ for (int i = 0; (i < m_dependencies.length); i++) {
+ if (m_dependencies[i] == dep) {
+ return; //NOTHING TO DO, the description is already in the array
+ }
+ }
+ // The component Description is not in the array, add it
+ DependencyDescription[] newDep = new DependencyDescription[m_dependencies.length + 1];
+ System.arraycopy(m_dependencies, 0, newDep, 0, m_dependencies.length);
+ newDep[m_dependencies.length] = dep;
+ m_dependencies = newDep;
+ }
+
+ /**
+ * @see org.apache.felix.ipojo.architecture.HandlerDescription#getHandlerInfo()
+ */
+ public String getHandlerInfo() {
+ String info = "";
+ for (int i = 0; i < m_dependencies.length; i++) {
+ String state = "resolved";
+ if (m_dependencies[i].getState() == 2) { state = "unresolved"; }
+ info += "\t Dependency on " + m_dependencies[i].getInterface() + "[" + m_dependencies[i].getFilter() + "] is " + state;
+ Iterator it = m_dependencies[i].getUsedServices().keySet().iterator();
+ while (it.hasNext()) {
+ info += "\n \t\t Uses : " + it.next();
+ }
+ info += "\n";
+ }
+ return info;
+ }
+
+}
Propchange: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyHandlerDescription.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/lifecycle/callback/LifecycleCallbackHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/lifecycle/callback/LifecycleCallbackHandler.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/lifecycle/callback/LifecycleCallbackHandler.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/lifecycle/callback/LifecycleCallbackHandler.java Tue Mar 6 06:04:26 2007
@@ -21,6 +21,7 @@
import java.lang.reflect.InvocationTargetException;
import java.util.Dictionary;
+import org.apache.felix.ipojo.ComponentInstance;
import org.apache.felix.ipojo.Handler;
import org.apache.felix.ipojo.InstanceManager;
import org.apache.felix.ipojo.metadata.Element;
@@ -47,6 +48,11 @@
*/
private InstanceManager m_manager;
+ /**
+ * Does a POJO object be created at starting
+ */
+ private boolean m_immediate = false;
+
/**
* Add the given callback to the callback list.
* @param hk : the element to add
@@ -74,6 +80,8 @@
public void configure(InstanceManager cm, Element metadata, Dictionary configuration) {
m_manager = cm;
m_callbacks = new LifecycleCallback[0];
+
+ if (metadata.containsAttribute("immediate") && metadata.getAttribute("immediate").equalsIgnoreCase("true")) { m_immediate = true; }
Element[] hooksMetadata = metadata.getElements("callback");
for (int i = 0; i < hooksMetadata.length; i++) {
@@ -87,7 +95,7 @@
LifecycleCallback hk = new LifecycleCallback(this, initialState, finalState, method, isStatic);
addCallback(hk);
}
- if (m_callbacks.length > 0) { m_manager.register(this); }
+ if (m_callbacks.length > 0 || m_immediate) { m_manager.register(this); }
}
/**
@@ -112,6 +120,11 @@
* @see org.apache.felix.ipojo.Handler#stateChanged(int)
*/
public void stateChanged(int state) {
+ // Manage immediate component
+ if(m_state == ComponentInstance.INVALID && state == ComponentInstance.VALID && m_manager.getPojoObjects().length == 0) {
+ m_manager.createPojoObject();
+ }
+
for (int i = 0; i < m_callbacks.length; i++) {
if (m_callbacks[i].getInitialState() == m_state && m_callbacks[i].getFinalState() == state) {
try {
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/Property.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/Property.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/Property.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/Property.java Tue Mar 6 06:04:26 2007
@@ -26,8 +26,6 @@
import org.apache.felix.ipojo.parser.ParseUtils;
import org.apache.felix.ipojo.util.Logger;
-import sun.net.www.ParseUtil;
-
/**
* Represent a property i.e. a set : [name, type, value].
* A property can be attached to a field.
Added: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java?view=auto&rev=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java (added)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java Tue Mar 6 06:04:26 2007
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handlers.providedservice;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.handlers.dependency.DependencyDescription;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Provided Service Description.
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class ProvidedServiceDescription {
+
+ /**
+ * State : the service is unregistered
+ */
+ public static final int UNREGISTERED = 0;
+
+ /**
+ * State : the service is registered
+ */
+ public static final int REGISTERED = 1;
+
+ /**
+ * Provided Service Specification.
+ */
+ private String[] m_serviceSpecification;
+
+ /**
+ * Dependency of the service.
+ */
+ private DependencyDescription[] m_dependencies = new DependencyDescription[0];
+
+ /**
+ * State.
+ */
+ private int m_state;
+
+ /**
+ * The service reference.
+ */
+ private ServiceReference m_serviceReference;
+
+// /**
+// * Handler on the component description who contains this description.
+// */
+// private InstanceDescription m_parent;
+
+ /**
+ * Properties of the provided service.
+ */
+ private Properties m_properties = new Properties();
+
+
+ /**
+ * Constructor.
+ * @param serviceSpecification : the provided contract
+ * @param state : state (UNREGITRED | REGISTRED)
+ * @param sr : Service Registration (to obtain the reference), or null if state is UNREGISTRED
+ * @param parent : the component description declaring this proided service
+ */
+ public ProvidedServiceDescription(String[] serviceSpecification, int state, ServiceReference sr/*, InstanceDescription parent*/) {
+ m_serviceSpecification = serviceSpecification;
+ m_state = state;
+ m_serviceReference = sr;
+ // m_parent = parent;
+ }
+
+ /**
+ * @return the provided contract name.
+ */
+ public String[] getServiceSpecification() {
+ return m_serviceSpecification;
+ }
+
+ /**
+ * Add a property to the current provided service description.
+ * @param key : the key of the property
+ * @param value : the value of the property
+ */
+ public void addProperty(String key, String value) {
+ m_properties.put(key, value);
+ }
+
+ /**
+ * Set the set of properties. This function create a clone of the argument.
+ * @param props : the properties
+ */
+ public void setProperty(Properties props) {
+ m_properties = props;
+ }
+
+ /**
+ * @return the dependeny description list.
+ */
+ public DependencyDescription[] getDependencies() {
+ return m_dependencies;
+ }
+
+ /**
+ * @return the properties.
+ */
+ public Properties getProperties() {
+ return m_properties;
+ }
+
+ /**
+ * @return the state of the provided service (UNREGISTRED | REGISTRED).
+ */
+ public int getState() {
+ return m_state;
+ }
+
+ /**
+ * @return the service reference (null if the service is unregistred).
+ */
+ public ServiceReference getServiceReference() {
+ return m_serviceReference;
+ }
+
+}
Propchange: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java?view=diff&rev=515124&r1=515123&r2=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java (original)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java Tue Mar 6 06:04:26 2007
@@ -19,10 +19,12 @@
package org.apache.felix.ipojo.handlers.providedservice;
import java.util.Dictionary;
+import java.util.Properties;
import org.apache.felix.ipojo.Handler;
import org.apache.felix.ipojo.InstanceManager;
import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.architecture.HandlerDescription;
import org.apache.felix.ipojo.architecture.PropertyDescription;
import org.apache.felix.ipojo.metadata.Element;
import org.apache.felix.ipojo.parser.ParseUtils;
@@ -320,5 +322,27 @@
m_providedServices[i].deleteProperties(dict);
}
}
+
+ /**
+ * @see org.apache.felix.ipojo.Handler#getDescription()
+ */
+ public HandlerDescription getDescription() {
+ ProvidedServiceHandlerDescription pshd = new ProvidedServiceHandlerDescription(this.isValid());
+
+ for (int j = 0; j < getProvidedService().length; j++) {
+ ProvidedService ps = getProvidedService()[j];
+ ProvidedServiceDescription psd = new ProvidedServiceDescription(ps.getServiceSpecification(), ps.getState(), ps.getServiceReference());
+
+ Properties props = new Properties();
+ for (int k = 0; k < ps.getProperties().length; k++) {
+ Property prop = ps.getProperties()[k];
+ if (prop.getValue() != null) { props.put(prop.getName(), prop.getValue().toString()); }
+ }
+ psd.setProperty(props);
+ pshd.addProvidedService(psd);
+ }
+
+ return pshd;
+ }
}
Added: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java?view=auto&rev=515124
==============================================================================
--- incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java (added)
+++ incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java Tue Mar 6 06:04:26 2007
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handlers.providedservice;
+
+import java.util.Iterator;
+
+import org.apache.felix.ipojo.architecture.HandlerDescription;
+
+/**
+ * Provided Service Handler Description.
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class ProvidedServiceHandlerDescription extends HandlerDescription {
+
+ /**
+ * Provided Service Description list.
+ */
+ private ProvidedServiceDescription[] m_providedServices = new ProvidedServiceDescription[0];
+
+
+ /**
+ * Constructor.
+ * @param isValid : the validity of the provided service handler.
+ */
+ public ProvidedServiceHandlerDescription(boolean isValid) {
+ super(ProvidedServiceHandler.class.getName(), isValid);
+ }
+
+ /**
+ * @return the provided service description list.
+ */
+ public ProvidedServiceDescription[] getProvidedServices() { return m_providedServices; }
+
+ /**
+ * Add a provided service.
+ * @param pds : the provided service to add
+ */
+ public void addProvidedService(ProvidedServiceDescription pds) {
+ //Verify that the provided service description is not already in the array.
+ for (int i = 0; (i < m_providedServices.length); i++) {
+ if (m_providedServices[i] == pds) {
+ return; //NOTHING DO DO, the description is already in the array
+ }
+ }
+ // The component Description is not in the array, add it
+ ProvidedServiceDescription[] newPSD = new ProvidedServiceDescription[m_providedServices.length + 1];
+ System.arraycopy(m_providedServices, 0, newPSD, 0, m_providedServices.length);
+ newPSD[m_providedServices.length] = pds;
+ m_providedServices = newPSD;
+ }
+
+ /**
+ * @see org.apache.felix.ipojo.architecture.HandlerDescription#getHandlerInfo()
+ */
+ public String getHandlerInfo() {
+ String info = "";
+ for (int i = 0; i < m_providedServices.length; i++) {
+ String state = "unregistered";
+ if (m_providedServices[i].getState() == ProvidedService.REGISTERED) { state = "registered"; }
+ String spec = "";
+ for (int j = 0; j < m_providedServices[i].getServiceSpecification().length; j++) {
+ spec += m_providedServices[i].getServiceSpecification()[j] + " ";
+ }
+ info += "\t Provided Service [" + spec + "] is " + state;
+ Iterator it = m_providedServices[i].getProperties().keySet().iterator();
+ while (it.hasNext()) {
+ String k = (String) it.next();
+ info += "\n\t\t Service Property : " + k + " = " + m_providedServices[i].getProperties().getProperty(k);
+ }
+ }
+ return info;
+ }
+
+
+
+}
Propchange: incubator/felix/trunk/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerDescription.java
------------------------------------------------------------------------------
svn:eol-style = native