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 2010/12/20 13:39:31 UTC
svn commit: r1051085 - in /felix/sandbox/clement/ipojo-constructor-injection:
core/src/main/java/org/apache/felix/ipojo/
core/src/main/java/org/apache/felix/ipojo/parser/
core/src/test/java/org/apache/felix/ipojo/parser/ core/src/test/resources/
core/s...
Author: clement
Date: Mon Dec 20 12:39:30 2010
New Revision: 1051085
URL: http://svn.apache.org/viewvc?rev=1051085&view=rev
Log:
Add PojoMetadata test
Add contructor support in PojoMetadata
Modify temporary the manipulator pom file to support java 5 (annotation tests)
Add the constructor injection support in the InstanceManager. This is still in progress (no handler are supporting this injection yet, and a lot of test must be done).
Added:
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ConstructorInjector.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/ConstructorMetadata.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/ManipulationMetadataTest.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/PojoMetadataTest.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/
felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/MANIFEST.MF
felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Child.java
felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Multiconstructor.java
felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Parent.java
Modified:
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManager.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/InstanceManager.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/PrimitiveHandler.java
felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/PojoMetadata.java
felix/sandbox/clement/ipojo-constructor-injection/manipulator/pom.xml
felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/test/java/test/Constructor.java
felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/resources/metadata.xml
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java Mon Dec 20 12:39:30 2010
@@ -30,6 +30,7 @@ import java.util.Map;
import org.apache.felix.ipojo.architecture.ComponentTypeDescription;
import org.apache.felix.ipojo.metadata.Attribute;
import org.apache.felix.ipojo.metadata.Element;
+import org.apache.felix.ipojo.parser.ConstructorMetadata;
import org.apache.felix.ipojo.parser.ParseUtils;
import org.apache.felix.ipojo.parser.PojoMetadata;
import org.apache.felix.ipojo.util.Logger;
@@ -91,6 +92,9 @@ public class ComponentFactory extends IP
*/
private PojoMetadata m_manipulation;
+
+ private ConstructorMetadata m_constructor;
+
/**
* Creates a instance manager factory.
* The class is given in parameter. The component type is not a composite.
@@ -135,6 +139,7 @@ public class ComponentFactory extends IP
m_classname = element.getAttribute("classname");
if (m_classname == null) { throw new ConfigurationException("A component needs a class name : " + element); }
m_manipulation = new PojoMetadata(m_componentMetadata);
+ m_constructor = new ConstructorMetadata(m_componentMetadata);
}
/**
@@ -291,7 +296,8 @@ public class ComponentFactory extends IP
Element[] elems = m_componentMetadata.getElements();
for (int i = 0; i < elems.length; i++) {
Element current = elems[i];
- if (!"manipulation".equals(current.getName())) {
+ if (!"manipulation".equals(current.getName()) // Remove the manipulation element
+ && !"constructor".equals(current.getName())) { // Remove the constructor element
RequiredHandler req = new RequiredHandler(current.getName(), current.getNameSpace());
if (!list.contains(req)) {
list.add(req);
@@ -434,6 +440,10 @@ public class ComponentFactory extends IP
return m_manipulation;
}
+ public ConstructorMetadata getConstructorMetadata() {
+ return m_constructor;
+ }
+
/**
* Gets the version of the component type.
* @return the version of <code>null</code> if not set.
Added: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ConstructorInjector.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ConstructorInjector.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ConstructorInjector.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/ConstructorInjector.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,7 @@
+package org.apache.felix.ipojo;
+
+public interface ConstructorInjector {
+
+ Object getConstructorParameter(String id, int index);
+
+}
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManager.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManager.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManager.java Mon Dec 20 12:39:30 2010
@@ -1,4 +1,4 @@
-/*
+/*
* 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
@@ -82,7 +82,7 @@ public class HandlerManager extends Inst
if (m_handler != null) { return; }
m_handler = (Handler) createPojoObject();
}
-
+
/**
* Creates an instance of the content.
* This method needs to be called once only for singleton provided service.
@@ -103,9 +103,9 @@ public class HandlerManager extends Inst
}
m_pojoObjects.add(instance);
}
-
+
//Do not call onCreation, this will be done in the start method.
-
+
return instance;
}
@@ -114,9 +114,9 @@ public class HandlerManager extends Inst
*/
public void start() {
synchronized (this) {
- if (m_state != STOPPED) {
+ if (m_state != STOPPED) {
return; // Instance already started
- } else {
+ } else {
m_state = -2; // Temporary starting state, avoiding concurrent starts.
}
}
@@ -126,16 +126,16 @@ public class HandlerManager extends Inst
m_handlers[i].addInstanceStateListener(this);
m_handlers[i].start();
}
-
+
// Call the onCreation method.
for (int i = 0; i < m_handlers.length; i++) {
((PrimitiveHandler) m_handlers[i].getHandler()).onCreation(m_handler);
}
-
+
m_handler.start(); // Call the handler start method, the instance might be invalid.
-
-
+
+
for (int i = 0; i < m_handlers.length; i++) {
if (!m_handlers[i].getHandler().isValid()) {
setState(INVALID);
@@ -147,7 +147,7 @@ public class HandlerManager extends Inst
} else {
setState(INVALID);
}
-
+
// Now, the state is necessary different from the temporary state.
}
@@ -156,10 +156,10 @@ public class HandlerManager extends Inst
*/
public void stop() {
synchronized (this) {
- if (m_state == STOPPED) {
+ if (m_state == STOPPED) {
return; // Instance already stopped
} else {
- m_state = -2; // Temporary state avoiding concurrent stopping.
+ m_state = -2; // Temporary state avoiding concurrent stopping.
}
}
@@ -182,7 +182,7 @@ public class HandlerManager extends Inst
listeners = new ArrayList(m_listeners); // Stack confinement.
}
}
-
+
if (listeners != null) {
for (int i = 0; i < listeners.size(); i++) {
((InstanceStateListener) listeners.get(i)).stateChanged(this, STOPPED);
@@ -190,7 +190,7 @@ public class HandlerManager extends Inst
}
}
- /**
+ /**
* Disposes the instance.
* @see org.apache.felix.ipojo.ComponentInstance#dispose()
*/
@@ -211,14 +211,14 @@ public class HandlerManager extends Inst
/**
* State Change listener callback.
* This method is notified at each time a plugged handler becomes invalid.
- * @param instance the changing instance
+ * @param instance the changing instance
* @param newState the new state
* @see org.apache.felix.ipojo.InstanceStateListener#stateChanged(org.apache.felix.ipojo.ComponentInstance, int)
*/
public void stateChanged(ComponentInstance instance, int newState) {
int state;
synchronized (this) {
- if (m_state <= STOPPED) {
+ if (m_state <= STOPPED) {
return;
} else {
state = m_state; // Stack confinement
@@ -241,4 +241,11 @@ public class HandlerManager extends Inst
}
}
+ public Object getConstructorParameter(String id, int index) {
+ if (m_handler instanceof ConstructorInjector) {
+ return ((ConstructorInjector) m_handler).getConstructorParameter(id, index);
+ }
+ return null;
+ }
+
}
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java Mon Dec 20 12:39:30 2010
@@ -152,7 +152,8 @@ public class HandlerManagerFactory exten
Element[] elems = m_componentMetadata.getElements();
for (int i = 0; i < elems.length; i++) {
Element current = elems[i];
- if (!"manipulation".equals(current.getName())) {
+ if (!"manipulation".equals(current.getName()) // Remove the manipulation element
+ && !"constructor".equals(current.getName())) { // Remove the constructor element
RequiredHandler req = new RequiredHandler(current.getName(),
current.getNameSpace());
if (!list.contains(req)) {
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/InstanceManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/InstanceManager.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/InstanceManager.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/InstanceManager.java Mon Dec 20 12:39:30 2010
@@ -595,29 +595,60 @@ public class InstanceManager implements
if (m_factoryMethod == null) {
// No factory-method, we use the constructor.
try {
- // Try to find if there is a constructor with a bundle context as parameter :
- try {
- Constructor cst = m_clazz.getDeclaredConstructor(new Class[] { InstanceManager.class, BundleContext.class });
- if (! cst.isAccessible()) {
+ // Try to find the correct constructor.
+ if (getFactory().getConstructorMetadata().hasConstructorMetadata()) {
+ // Build the map of injected values.
+ String[] ids = getFactory().getConstructorMetadata().getIds();
+ // Initialize the injected values and types
+ // We have the IM first.
+ Object[] values = new Object[ids.length + 1];
+ Class[] types = new Class[ids.length + 1];
+ values[0] = this;
+ types[0] = InstanceManager.class;
+ for (int i = 0; i < ids.length; i++) {
+ for (int j = 0; values[i] == null && j < m_handlers.length; j++) {
+ Object v = m_handlers[j].getConstructorParameter(ids[i], i);
+ if (v != null) {
+ values[i + 1] = v;
+ types[i + 1] = v.getClass();
+ }
+ }
+ }
+ // Find the constructor.
+ Constructor cst = m_clazz.getDeclaredConstructor(types);
+ if (! cst.isAccessible()) {
cst.setAccessible(true);
}
- Object[] args = new Object[] { this, m_context };
- onEntry(null, MethodMetadata.BC_CONSTRUCTOR_ID, new Object[] {m_context});
- instance = cst.newInstance(args);
- onExit(instance, MethodMetadata.BC_CONSTRUCTOR_ID, instance);
- } catch (NoSuchMethodException e) {
- // Create an instance if no instance are already created with <init>()BundleContext
- if (instance == null) {
- Constructor cst = m_clazz.getDeclaredConstructor(new Class[] { InstanceManager.class });
+ onEntry(null, null /*TODO Compute id*/, values);
+ instance = cst.newInstance(values);
+ onExit(instance, null /*TODO Compute id*/, instance);
+ } else {
+ // Old semantic
+ // Try to find if there is a constructor with a bundle context as parameter :
+ try {
+ Constructor cst = m_clazz.getDeclaredConstructor(new Class[] { InstanceManager.class, BundleContext.class });
if (! cst.isAccessible()) {
cst.setAccessible(true);
}
- Object[] args = new Object[] {this};
- onEntry(null, MethodMetadata.EMPTY_CONSTRUCTOR_ID, new Object[0]);
+ Object[] args = new Object[] { this, m_context };
+ onEntry(null, MethodMetadata.BC_CONSTRUCTOR_ID, new Object[] {m_context});
instance = cst.newInstance(args);
- onExit(instance, MethodMetadata.EMPTY_CONSTRUCTOR_ID, instance);
+ onExit(instance, MethodMetadata.BC_CONSTRUCTOR_ID, instance);
+ } catch (NoSuchMethodException e) {
+ // Create an instance if no instance are already created with <init>()BundleContext
+ if (instance == null) {
+ Constructor cst = m_clazz.getDeclaredConstructor(new Class[] { InstanceManager.class });
+ if (! cst.isAccessible()) {
+ cst.setAccessible(true);
+ }
+ Object[] args = new Object[] {this};
+ onEntry(null, MethodMetadata.EMPTY_CONSTRUCTOR_ID, new Object[0]);
+ instance = cst.newInstance(args);
+ onExit(instance, MethodMetadata.EMPTY_CONSTRUCTOR_ID, instance);
+ }
}
- }
+ }
+
} catch (IllegalAccessException e) {
m_logger.log(Logger.ERROR,
"[" + m_name + "] createInstance -> The POJO constructor is not accessible : " + e.getMessage(), e);
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/PrimitiveHandler.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/PrimitiveHandler.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/PrimitiveHandler.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/PrimitiveHandler.java Mon Dec 20 12:39:30 2010
@@ -33,7 +33,8 @@ import org.apache.felix.ipojo.util.Logge
* Classes overriding this class can change the behavior of those methods.
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
-public abstract class PrimitiveHandler extends Handler implements FieldInterceptor, MethodInterceptor {
+public abstract class PrimitiveHandler extends Handler implements FieldInterceptor, MethodInterceptor,
+ ConstructorInjector {
/**
* The "Primitive" Handler type (value).
@@ -159,6 +160,14 @@ public abstract class PrimitiveHandler e
}
/**
+ * TODO
+ * @see org.apache.felix.ipojo.ConstructorInjector#getConstructorParameter(java.lang.String, int)
+ */
+ public Object getConstructorParameter(String id, int index) {
+ return null;
+ }
+
+ /**
* Callback method called when a method will be invoked.
* This default implementation does nothing.
* @param pojo the pojo on which the method is called.
Added: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/ConstructorMetadata.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/ConstructorMetadata.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/ConstructorMetadata.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/ConstructorMetadata.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,76 @@
+package org.apache.felix.ipojo.parser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.metadata.Element;
+
+public class ConstructorMetadata {
+
+ private final boolean m_hasConstructor;
+ private final String m_parameters;
+ private final List/*<String>*/ m_params = new ArrayList();
+
+ public ConstructorMetadata(Element desc) throws ConfigurationException {
+ if (! desc.containsElement("constructor")) {
+ m_hasConstructor = false;
+ m_parameters = null;
+ return;
+ }
+ m_hasConstructor = true;
+ Element cst = desc.getElements("constructor")[0]; // Manage only the first one.
+ m_parameters = cst.getAttribute("parameters");
+
+ Element[] params = cst.getElements("parameter");
+ if (params != null) {
+ for (int i = 0; i < params.length; i++) {
+ addParameter(i, params[i]);
+ }
+ // Check that we have continuous index
+ for (int i = 0; i < params.length; i++) {
+ if (m_params.get(i) == null) {
+ throw new ConfigurationException("Constructor Parameter with index " + i
+ + " is missing");
+ }
+ }
+ }
+ }
+
+ private void addParameter(int i, Element element) throws ConfigurationException {
+ String refid = element.getAttribute("refid");
+ String idx = element.getAttribute("index");
+ int index = i;
+ if (idx != null) {
+ try {
+ index = Integer.parseInt(idx);
+ } catch (NumberFormatException e) {
+ throw new ConfigurationException("Cannot parse the index of a contructor parameter: "
+ + e.getMessage());
+ }
+ }
+
+ if (refid == null) {
+ throw new ConfigurationException("Constructor Parameter with index " + i
+ + " does not have a refid");
+ } else {
+ m_params.add(index, refid);
+ }
+ }
+
+ public boolean hasConstructorMetadata() {
+ return m_hasConstructor;
+ }
+
+ public String getConstructorSignature() {
+ return m_parameters;
+ }
+
+ public String[] getIds() {
+ if (m_params == null) {
+ return new String[0];
+ }
+ return (String[]) m_params.toArray(new String[m_params.size()]);
+ }
+
+}
Modified: felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/PojoMetadata.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/PojoMetadata.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/PojoMetadata.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/main/java/org/apache/felix/ipojo/parser/PojoMetadata.java Mon Dec 20 12:39:30 2010
@@ -1,4 +1,4 @@
-/*
+/*
* 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
@@ -24,25 +24,25 @@ import org.apache.felix.ipojo.metadata.E
/**
* Manipulation Metadata allows getting information about the implementation class
* without using reflection such as implemented interfaces, super class,
- * methods and fields.
+ * methods and fields.
* This method allows getting object to register {@link org.apache.felix.ipojo.FieldInterceptor} and
* {@link org.apache.felix.ipojo.MethodInterceptor}.
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class PojoMetadata {
-
+
/**
* The list of implemented interfaces.
*/
private String[] m_interfaces = new String[0];
-
+
/**
* The list of fields.
*/
private FieldMetadata[] m_fields = new FieldMetadata[0];
-
+
/**
- * The list of methods.
+ * The list of methods.
*/
private MethodMetadata[] m_methods = new MethodMetadata[0];
@@ -50,8 +50,8 @@ public class PojoMetadata {
* The Super class (if <code>null</code> for {@link Object}).
*/
private String m_super;
-
-
+
+
/**
* Creates Pojo metadata.
* Manipulation Metadata object are created from component type metadata by
@@ -62,7 +62,7 @@ public class PojoMetadata {
public PojoMetadata(Element metadata) throws ConfigurationException {
Element[] elems = metadata.getElements("manipulation", "");
if (elems == null) {
- throw new ConfigurationException("The component " + metadata.getAttribute("classname") + " has no manipulation metadata");
+ throw new ConfigurationException("The component " + metadata.getAttribute("classname") + " has no manipulation metadata");
}
Element manip = elems[0];
m_super = manip.getAttribute("super");
@@ -81,38 +81,38 @@ public class PojoMetadata {
addInterface(itfs[i].getAttribute("name"));
}
}
-
+
public MethodMetadata[] getMethods() { return m_methods; }
-
+
public FieldMetadata[] getFields() { return m_fields; }
-
+
public String[] getInterfaces() { return m_interfaces; }
-
+
/**
- * Gets the field metadata for the given name.
+ * Gets the field metadata for the given name.
* @param name : the name of the field
* @return the corresponding field metadata or <code>null</code> if not found
*/
- public FieldMetadata getField(String name) {
+ public FieldMetadata getField(String name) {
for (int i = 0; i < m_fields.length; i++) {
if (m_fields[i].getFieldName().equalsIgnoreCase(name)) { return m_fields[i]; }
}
return null;
}
-
+
/**
- * Gets the field metadata for the given name and type.
+ * Gets the field metadata for the given name and type.
* @param name : the name of the field
* @param type : the type of the field
* @return the corresponding field metadata or <code>null</code> if not found
*/
- public FieldMetadata getField(String name, String type) {
+ public FieldMetadata getField(String name, String type) {
for (int i = 0; i < m_fields.length; i++) {
if (m_fields[i].getFieldName().equalsIgnoreCase(name) && m_fields[i].getFieldType().equalsIgnoreCase(type)) { return m_fields[i]; }
}
return null;
}
-
+
/**
* Checks if the given interface name is implemented.
* This methods checks on interface directly implemented
@@ -127,7 +127,7 @@ public class PojoMetadata {
}
return false;
}
-
+
/**
* Gets the MethodMetadata corresponding to the method
* (contained in the implementation class) with
@@ -142,11 +142,11 @@ public class PojoMetadata {
}
return null;
}
-
+
/**
* Gets the MethodMetadata list corresponding to the method
* (contained in the implementation class) to given name.
- * All methods contained in the implementation class matching
+ * All methods contained in the implementation class matching
* with the name are in the returned list.
* @param name the name of the method to look for.
* @return the Method Metadata array or an empty array if not found
@@ -154,7 +154,7 @@ public class PojoMetadata {
public MethodMetadata[] getMethods(String name) {
MethodMetadata[] mms = new MethodMetadata[0];
for (int i = 0; i < m_methods.length; i++) {
- if (m_methods[i].getMethodName().equalsIgnoreCase(name)) {
+ if (m_methods[i].getMethodName().equalsIgnoreCase(name)) {
if (mms.length > 0) {
MethodMetadata[] newInstances = new MethodMetadata[mms.length + 1];
System.arraycopy(mms, 0, newInstances, 0, mms.length);
@@ -167,13 +167,22 @@ public class PojoMetadata {
}
return mms;
}
-
+
+ /**
+ * Gets the MethodMetadata list corresponding to the constructors
+ * (contained in the implementation class).
+ * @return the Method Metadata array or an empty array if not found
+ */
+ public MethodMetadata[] getConstructors() {
+ return getMethods("$init");
+ }
+
/**
* Gets the MethodMetadata corresponding to the method
- * (contained in the implementation class) to given name
+ * (contained in the implementation class) to given name
* and argument types.
* @param name the name of the method to look for.
- * @param types the array of the argument types of the method
+ * @param types the array of the argument types of the method
* @return the Method Metadata or <code>null</code> if not found
*/
public MethodMetadata getMethod(String name, String[] types) {
@@ -190,7 +199,16 @@ public class PojoMetadata {
}
return null;
}
-
+
+ /**
+ * Gets the constructor corresponding to the given argument types.
+ * @param types the argument types
+ * @return the matching constructor or <code>null</code> if not found.
+ */
+ public MethodMetadata getConstructor(String[] types) {
+ return getMethod("$init", types); // Constructors are named $init in the manipulation metadata
+ }
+
/**
* Adds a method to the list.
* This method is used during the creation of the {@link PojoMetadata}
@@ -207,7 +225,7 @@ public class PojoMetadata {
m_methods = new MethodMetadata[] { method };
}
}
-
+
/**
* Adds a field to the list.
* This method is used during the creation of the {@link PojoMetadata}
@@ -224,7 +242,7 @@ public class PojoMetadata {
m_fields = new FieldMetadata[] { field };
}
}
-
+
/**
* Adds the interface to the list.
* This method is used during the creation of the {@link PojoMetadata}
Added: felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/ManipulationMetadataTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/ManipulationMetadataTest.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/ManipulationMetadataTest.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/ManipulationMetadataTest.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,257 @@
+/*
+ * 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.parser;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.jar.Manifest;
+
+import junit.framework.TestCase;
+
+import org.apache.felix.ipojo.metadata.Element;
+
+/**
+ * Check manipulation metadata written in the manifest.
+ */
+public class ManipulationMetadataTest extends TestCase {
+
+ private String header;
+
+ public void setUp() {
+ File manFile = new File("src/test/resources/manipulation/MANIFEST.MF");
+ Manifest manifest;
+ try {
+ manifest = new Manifest(new FileInputStream(manFile));
+ header = manifest.getMainAttributes().getValue("iPOJO-Components");
+ } catch (FileNotFoundException e) {
+ fail(e.getMessage());
+ } catch (IOException e) {
+ fail(e.getMessage());
+ }
+ }
+
+ public void testGetMetadata() {
+ Element elem = null;
+ try {
+ elem = ManifestMetadataParser.parseHeaderMetadata(header);
+ } catch (ParseException e) {
+ fail("Parse Exception when parsing iPOJO-Component");
+ }
+
+ assertNotNull("Check elem not null", elem);
+
+ Element manip = getManipulationForComponent(elem, "ManipulationMetadata-FooProviderType-1");
+ assertNotNull("Check manipulation metadata not null for " + "FooProviderType-1", manip);
+ }
+
+ public void testInterface() {
+ String comp_name = "ManipulationMetadata-FooProviderType-1";
+ Element manip = getManipulationForComponent(comp_name);
+ Element[] itf = manip.getElements("Interface");
+ assertEquals("Check interfaces number", itf.length, 1);
+ assertEquals("Check itf name", itf[0].getAttribute("name"),
+ "org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService");
+ }
+
+ public void testInterfaces() {
+ String comp_name = "ManipulationMetadata-FooBarProviderType-1";
+ Element manip = getManipulationForComponent(comp_name);
+ Element[] itf = manip.getElements("Interface");
+ assertEquals("Check interfaces number", itf.length, 2);
+ assertEquals("Check itf name", itf[0].getAttribute("name"),
+ "org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService");
+ assertEquals("Check itf name", itf[1].getAttribute("name"),
+ "org.apache.felix.ipojo.test.scenarios.manipulation.service.BarService");
+ }
+
+ public void testFields() {
+ String comp_name = "ManipulationMetadata-FooProviderType-Dyn";
+ Element manip = getManipulationForComponent(comp_name);
+ Element[] fields = manip.getElements("field");
+ assertEquals("Check field count " + fields.length, fields.length, 5);
+ /*
+ private int intProp;
+ private String strProp;
+ private String[] strAProp;
+ private int[] intAProp;
+ private boolean boolProp;
+ */
+
+ Element field;
+
+ field = getFieldFromName(manip, "intProp");
+ assertEquals("Check field name : " + field.getAttribute("name"), field.getAttribute("name"), "intProp");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "int");
+
+ field = getFieldFromName(manip, "strProp");
+ assertEquals("Check field name : " + field.getAttribute("name"), field.getAttribute("name"), "strProp");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "java.lang.String");
+
+ field = getFieldFromName(manip, "strAProp");
+ assertEquals("Check field name : " + field.getAttribute("name"), field.getAttribute("name"), "strAProp");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "java.lang.String[]");
+
+ field = getFieldFromName(manip, "intAProp");
+ assertEquals("Check field name : " + field.getAttribute("name"), field.getAttribute("name"), "intAProp");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "int[]");
+
+ field = getFieldFromName(manip, "boolProp");
+ assertEquals("Check field name : " + field.getAttribute("name"), field.getAttribute("name"), "boolProp");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "boolean");
+ }
+
+ public void testPrimitivesFields() {
+ String comp_name = "ManipulationMetadata-PrimitiveManipulationTester";
+ Element manip = getManipulationForComponent(comp_name);
+ Element[] fields = manip.getElements("Field");
+ assertEquals("Check field count", fields.length, 16);
+ /*
+ byte b = 1;
+ short s = 1;
+ int i = 1;
+ long l = 1;
+ double d = 1.1;
+ float f = 1.1f;
+ char c = 'a';
+ boolean bool = false;
+ byte[] bs = new byte[] {0,1,2};
+ short[] ss = new short[] {0,1,2};
+ int[] is = new int[] {0,1,2};
+ long[] ls = new long[] {0,1,2};
+ double[] ds = new double[] {0.0, 1.1, 2.2};
+ float[] fs = new float[] {0.0f, 1.1f, 2.2f};
+ char[] cs = new char[] {'a', 'b', 'c'};
+ boolean[] bools = new boolean[] {false, true, false};
+ */
+ Element field;
+
+ field = getFieldFromName(manip, "b");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "byte");
+ field = getFieldFromName(manip, "s");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "short");
+ field = getFieldFromName(manip, "i");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "int");
+ field = getFieldFromName(manip, "l");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "long");
+ field = getFieldFromName(manip, "d");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "double");
+ field = getFieldFromName(manip, "f");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "float");
+ field = getFieldFromName(manip, "c");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "char");
+ field = getFieldFromName(manip, "bool");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "boolean");
+
+ field = getFieldFromName(manip, "bs");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "byte[]");
+ field = getFieldFromName(manip, "ss");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "short[]");
+ field = getFieldFromName(manip, "is");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "int[]");
+ field = getFieldFromName(manip, "ls");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "long[]");
+ field = getFieldFromName(manip, "ds");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "double[]");
+ field = getFieldFromName(manip, "fs");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "float[]");
+ field = getFieldFromName(manip, "cs");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "char[]");
+ field = getFieldFromName(manip, "bools");
+ assertEquals("Check field type : " + field.getAttribute("name"), field.getAttribute("type"), "boolean[]");
+ }
+
+ public void testNoArgMethod() {
+ String comp_name = "ManipulationMetadata-SimpleMultipleCheckServiceProvider";
+ Element manip = getManipulationForComponent(comp_name);
+ Element method = getMethodFromName(manip, "check");
+ assertFalse("Check no args", method.containsAttribute("arguments"));
+ assertEquals("Check return", method.getAttribute("return"), "boolean");
+ }
+
+ public void testOneArgsMethod() {
+ String comp_name = "ManipulationMetadata-SimpleMultipleCheckServiceProvider";
+ Element manip = getManipulationForComponent(comp_name);
+ Element method = getMethodFromName(manip, "refBind");
+ assertEquals("Check args", method.getAttribute("arguments"), "{org.osgi.framework.ServiceReference}");
+ assertEquals("Check args count", 1, ParseUtils.parseArrays("{org.osgi.framework.ServiceReference}").length);
+ assertFalse("Check return", method.containsAttribute("return"));
+ }
+
+ public void testTwoArgsMethod() {
+ String comp_name = "ManipulationMetadata-SimpleMultipleCheckServiceProvider";
+ Element manip = getManipulationForComponent(comp_name);
+ Element method = getMethodFromName(manip, "doNothing");
+ assertEquals("Check args", method.getAttribute("arguments"), "{java.lang.Object,java.lang.String}");
+ assertEquals("Check args count", 2, ParseUtils.parseArrays("{java.lang.Object,java.lang.String}").length);
+ assertEquals("Check return", method.getAttribute("return"), "java.lang.Object");
+ }
+
+ private Element getManipulationForComponent(Element metadata, String comp_name) {
+ Element[] comps = metadata.getElements("component");
+ for(int i = 0; i < comps.length; i++) {
+ if(comps[i].containsAttribute("factory") && comps[i].getAttribute("factory").equals(comp_name)) {
+ return comps[i].getElements("manipulation")[0];
+ }
+ if(comps[i].containsAttribute("name") && comps[i].getAttribute("name").equals(comp_name)) {
+ return comps[i].getElements("manipulation")[0];
+ }
+ }
+ return null;
+ }
+
+ private Element getManipulationForComponent(String comp_name) {
+ Element elem = null;
+ try {
+ elem = ManifestMetadataParser.parseHeaderMetadata(header);
+ } catch (ParseException e) {
+ fail("Parse Exception when parsing iPOJO-Component");
+ }
+
+ assertNotNull("Check elem not null", elem);
+ Element manip = getManipulationForComponent(elem, comp_name);
+ assertNotNull("Check manipulation metadata not null for " + comp_name, manip);
+ return manip;
+ }
+
+ private Element getMethodFromName(Element manip, String name) {
+ Element methods[] = manip.getElements("Method");
+ for(int i = 0; i < methods.length; i++) {
+ if(methods[i].containsAttribute("name") && methods[i].getAttribute("name").equals(name)) {
+ return methods[i];
+ }
+ }
+ fail("Method " + name + " not found");
+ return null;
+ }
+
+ private Element getFieldFromName(Element manip, String name) {
+ Element fields[] = manip.getElements("Field");
+ for(int i = 0; i < fields.length; i++) {
+ if(fields[i].containsAttribute("name") && fields[i].getAttribute("name").equals(name)) {
+ return fields[i];
+ }
+ }
+ fail("Field " + name + " not found");
+ return null;
+ }
+
+
+}
Added: felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/PojoMetadataTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/PojoMetadataTest.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/PojoMetadataTest.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/test/java/org/apache/felix/ipojo/parser/PojoMetadataTest.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,322 @@
+/*
+ * 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.parser;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.jar.Manifest;
+
+import junit.framework.TestCase;
+
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.metadata.Element;
+
+public class PojoMetadataTest extends TestCase {
+
+ PojoMetadata FooProviderType1, FooBarProviderType1, FooProviderTypeDyn, PrimitiveManipulationTester, SimpleMultipleCheckServiceProvider;
+
+ private String header;
+
+ public void setUp() {
+ File manFile = new File("src/test/resources/manipulation/MANIFEST.MF");
+ Manifest manifest;
+ try {
+ manifest = new Manifest(new FileInputStream(manFile));
+ header = manifest.getMainAttributes().getValue("iPOJO-Components");
+ } catch (FileNotFoundException e) {
+ fail(e.getMessage());
+ } catch (IOException e) {
+ fail(e.getMessage());
+ }
+
+ String comp_name = "ManipulationMetadata-FooProviderType-1";
+ FooProviderType1 = getManipulationMetadataForComponent(comp_name);
+
+ comp_name = "ManipulationMetadata-FooBarProviderType-1";
+ FooBarProviderType1 = getManipulationMetadataForComponent(comp_name);
+
+ comp_name = "ManipulationMetadata-FooProviderType-Dyn";
+ FooProviderTypeDyn = getManipulationMetadataForComponent(comp_name);
+
+ comp_name = "ManipulationMetadata-PrimitiveManipulationTester";
+ PrimitiveManipulationTester = getManipulationMetadataForComponent(comp_name);
+
+ comp_name = "ManipulationMetadata-SimpleMultipleCheckServiceProvider";
+ SimpleMultipleCheckServiceProvider = getManipulationMetadataForComponent(comp_name);
+ }
+
+ public void testGetMetadata() {
+ Element elem = null;
+ try {
+ elem = ManifestMetadataParser.parseHeaderMetadata(header);
+ } catch (ParseException e) {
+ fail("Parse Exception when parsing iPOJO-Component");
+ }
+
+ assertNotNull("Check elem not null", elem);
+
+ Element manip = getMetadataForComponent(elem, "ManipulationMetadata-FooProviderType-1");
+ assertNotNull("Check manipulation metadata not null for " + "Manipulation-FooProviderType-1", manip);
+ PojoMetadata mm;
+ try {
+ mm = new PojoMetadata(manip);
+ assertNotNull("Check mm not null", mm);
+ } catch (ConfigurationException e) {
+ fail("The creation of pojo metadata has failed");
+ }
+ }
+
+ public void testInterface() {
+ PojoMetadata manip = FooProviderType1;
+
+ String[] itf = manip.getInterfaces();
+ assertEquals("Check interfaces number", itf.length, 1);
+ assertEquals("Check itf name", itf[0], "org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService");
+
+ assertTrue("Check Foo Service implementation", manip.isInterfaceImplemented("org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService"));
+ assertFalse("Check Bar Service implementation", manip.isInterfaceImplemented("org.apache.felix.ipojo.test.scenarios.manipulation.service.BarService"));
+ }
+
+ public void testInterfaces() {
+ PojoMetadata manip = FooBarProviderType1;
+ String[] itf = manip.getInterfaces();
+ assertEquals("Check interfaces number", itf.length, 2);
+ assertEquals("Check itf name", itf[0], "org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService");
+ assertEquals("Check itf name", itf[1], "org.apache.felix.ipojo.test.scenarios.manipulation.service.BarService");
+
+ assertTrue("Check Foo Service implementation", manip.isInterfaceImplemented("org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService"));
+ assertTrue("Check Bar Service implementation", manip.isInterfaceImplemented("org.apache.felix.ipojo.test.scenarios.manipulation.service.BarService"));
+ }
+
+ public void testFields() {
+ PojoMetadata manip = FooProviderTypeDyn;
+
+ FieldMetadata[] fields = manip.getFields();
+ assertEquals("Check field count + " + fields.length, fields.length, 5);
+ /*
+ private int intProp;
+ private String strProp;
+ private String[] strAProp;
+ private int[] intAProp;
+ private boolean boolProp;
+ */
+
+ FieldMetadata field;
+
+ field = manip.getField("intProp");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "intProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int");
+ assertEquals("Check field reflective type : " + field.getFieldName(), FieldMetadata.getReflectionType(field.getFieldType()), "int");
+
+ field = manip.getField("intProp", "int");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "intProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int");
+
+ field = manip.getField("intProp", "long");
+ assertNull("Check bad field", field);
+
+ field = manip.getField("strProp");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "strProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "java.lang.String");
+ assertEquals("Check field reflective type : " + field.getFieldName(), FieldMetadata.getReflectionType(field.getFieldType()), "java.lang.String");
+
+ field = manip.getField("strProp", "String");
+ assertNull("Check bad field", field);
+
+ field = manip.getField("strProp", "java.lang.String");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "strProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "java.lang.String");
+
+ field = manip.getField("strAProp");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "strAProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "java.lang.String[]");
+ assertEquals("Check field reflective type : " + field.getFieldName() + " -> " + FieldMetadata.getReflectionType(field.getFieldType()), FieldMetadata.getReflectionType(field.getFieldType()), "[Ljava.lang.String;");
+
+ field = manip.getField("strAProp", "java.lang.String[]");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "strAProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "java.lang.String[]");
+
+ field = manip.getField("strAProp", "String[]");
+ assertNull("Check bad field", field);
+
+ field = manip.getField("intAProp");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "intAProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int[]");
+ assertEquals("Check field reflective type : " + field.getFieldName() + " -> " + FieldMetadata.getReflectionType(field.getFieldType()), FieldMetadata.getReflectionType(field.getFieldType()), "[I");
+
+ field = manip.getField("intAProp", "int[]");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "intAProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int[]");
+
+ field = manip.getField("intAProp", "String[]");
+ assertNull("Check bad field", field);
+
+ field = manip.getField("boolProp");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "boolProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "boolean");
+ assertEquals("Check field reflective type : " + field.getFieldName(), FieldMetadata.getReflectionType(field.getFieldType()), "boolean");
+
+ field = manip.getField("boolProp", "boolean");
+ assertEquals("Check field name : " + field.getFieldName(), field.getFieldName(), "boolProp");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "boolean");
+
+ field = manip.getField("boolProp", "bool");
+ assertNull("Check bad field", field);
+ }
+
+ public void testPrimitivesFields() {
+ PojoMetadata manip = PrimitiveManipulationTester;
+ FieldMetadata[] fields = manip.getFields();
+ assertEquals("Check field count", fields.length, 16);
+
+ FieldMetadata field;
+
+ field = manip.getField("b");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "byte");
+ field = manip.getField("s");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "short");
+ field = manip.getField("i");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int");
+ field = manip.getField("l");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "long");
+ field = manip.getField("d");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "double");
+ field = manip.getField("f");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "float");
+ field = manip.getField("c");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "char");
+ field = manip.getField("bool");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "boolean");
+
+ field = manip.getField("bs");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "byte[]");
+ field = manip.getField("ss");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "short[]");
+ field = manip.getField("is");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "int[]");
+ field = manip.getField("ls");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "long[]");
+ field = manip.getField("ds");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "double[]");
+ field = manip.getField("fs");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "float[]");
+ field = manip.getField("cs");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "char[]");
+ field = manip.getField("bools");
+ assertEquals("Check field type : " + field.getFieldName(), field.getFieldType(), "boolean[]");
+ }
+
+ public void testNoArgMethod() {
+ PojoMetadata manip = SimpleMultipleCheckServiceProvider;
+ MethodMetadata method = manip.getMethod("check");
+ assertEquals("Check no args", method.getMethodArguments().length, 0);
+ assertEquals("Check return", method.getMethodReturn(), "boolean");
+
+ method = manip.getMethod("check", new String[0]);
+ assertEquals("Check no args", method.getMethodArguments().length, 0);
+ assertEquals("Check return", method.getMethodReturn(), "boolean");
+ }
+
+ public void testOneArgsMethod() {
+ PojoMetadata manip = SimpleMultipleCheckServiceProvider;
+ MethodMetadata method = manip.getMethods("refBind")[0];
+ assertEquals("Check args count", method.getMethodArguments().length, 1);
+ assertEquals("Check args", method.getMethodArguments()[0], "org.osgi.framework.ServiceReference");
+ assertEquals("Check return", method.getMethodReturn(), "void");
+
+ method = manip.getMethod("refBind", new String[] {"org.osgi.framework.ServiceReference"});
+ assertEquals("Check args count", method.getMethodArguments().length, 1);
+ assertEquals("Check args", method.getMethodArguments()[0], "org.osgi.framework.ServiceReference");
+ assertEquals("Check return", method.getMethodReturn(), "void");
+ }
+
+ public void testTwoArgsMethod() {
+ PojoMetadata manip = SimpleMultipleCheckServiceProvider;
+ MethodMetadata method = manip.getMethods("doNothing")[0];
+ assertEquals("Check args count", 2, method.getMethodArguments().length);
+ assertEquals("Check args - 1", method.getMethodArguments()[0], "java.lang.Object");
+ assertEquals("Check args - 2", method.getMethodArguments()[1], "java.lang.String");
+ assertEquals("Check return", method.getMethodReturn(), "java.lang.Object");
+
+ method = manip.getMethod("doNothing", new String[] {"java.lang.Object", "java.lang.String"});
+ assertEquals("Check args count", 2, method.getMethodArguments().length);
+ assertEquals("Check args - 1", method.getMethodArguments()[0], "java.lang.Object");
+ assertEquals("Check args - 2", method.getMethodArguments()[1], "java.lang.String");
+ assertEquals("Check return", method.getMethodReturn(), "java.lang.Object");
+ }
+
+ public void testSuper() {
+ String comp_name = "org.apache.felix.ipojo.test.scenarios.component.Child";
+ PojoMetadata manip = getManipulationMetadataForComponent(comp_name);
+ assertEquals("org.apache.felix.ipojo.test.scenarios.component.Parent", manip.getSuperClass());
+ assertEquals(1, manip.getConstructors().length);
+ }
+
+ public void testConstructors() {
+ String comp_name = "org.apache.felix.ipojo.test.scenarios.component.Multiconstructor";
+ PojoMetadata manip = getManipulationMetadataForComponent(comp_name);
+ assertEquals(3, manip.getConstructors().length);
+ assertNotNull(manip.getConstructor(new String[] {String.class.getName(), String.class.getName()}));
+ assertNotNull(manip.getConstructor(new String[] {String.class.getName(), String.class.getName(), Integer.TYPE.getName()}));
+ assertNotNull(manip.getConstructor(new String[] {String.class.getName(), Integer.TYPE.getName()}));
+ assertNull(manip.getConstructor(new String[] {String.class.getName()}));
+ }
+
+
+ private Element getMetadataForComponent(Element metadata, String comp_name) {
+ Element[] comps = metadata.getElements("component");
+ for(int i = 0; i < comps.length; i++) {
+ if(comps[i].containsAttribute("factory") && comps[i].getAttribute("factory").equals(comp_name)) {
+ return comps[i];
+ }
+ if(comps[i].containsAttribute("name") && comps[i].getAttribute("name").equals(comp_name)) {
+ return comps[i];
+ }
+ if(comps[i].containsAttribute("classname") && comps[i].getAttribute("classname").equals(comp_name)) {
+ return comps[i];
+ }
+ }
+ return null;
+ }
+
+
+ private PojoMetadata getManipulationMetadataForComponent(String comp_name) {
+ Element elem = null;
+ try {
+ elem = ManifestMetadataParser.parseHeaderMetadata(header);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ fail("Parse Exception when parsing iPOJO-Component " + e);
+ }
+
+ assertNotNull("Check elem not null", elem);
+
+ Element manip = getMetadataForComponent(elem, comp_name);
+ assertNotNull("Check manipulation metadata not null for " + comp_name, manip);
+ try {
+ return new PojoMetadata(manip);
+ } catch (ConfigurationException e) {
+ fail("The creation of pojo metadata for " + comp_name + " has failed");
+ return null;
+ }
+ }
+
+}
Added: felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/MANIFEST.MF
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/MANIFEST.MF?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/MANIFEST.MF (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/core/src/test/resources/manipulation/MANIFEST.MF Mon Dec 20 12:39:30 2010
@@ -0,0 +1,142 @@
+Manifest-Version: 1.0
+Export-Package: org.apache.felix.ipojo.test.scenarios.manipulation.ser
+ vice
+iPOJO-Components: component { $name="ManipulationMetadata-FooProviderT
+ ype-1" $classname="org.apache.felix.ipojo.test.scenarios.component.Fo
+ oProviderType1" $architecture="true" provides { }manipulation { field
+ { $name="m_context" $type="org.osgi.framework.BundleContext" }field
+ { $name="m_foo" $type="java.lang.String" }field { $name="m_bar" $type
+ ="int" }method { $arguments="{org.osgi.framework.BundleContext}" $nam
+ e="singleton" $return="org.apache.felix.ipojo.test.scenarios.componen
+ t.FooProviderType1" }method { $arguments="{org.osgi.framework.BundleC
+ ontext}" $name="several" $return="org.apache.felix.ipojo.test.scenari
+ os.component.FooProviderType1" }method { $arguments="{org.osgi.framew
+ ork.BundleContext}" $name="$init" }method { $name="foo" $return="bool
+ ean" }method { $name="fooProps" $return="java.util.Properties" }metho
+ d { $name="testException" }method { $name="testTry" }method { $argume
+ nts="{java.lang.String}" $name="testTry2" }method { $arguments="{java
+ .lang.String}" $name="nexttry" }method { $name="getBoolean" $return="
+ boolean" }method { $name="getDouble" $return="double" }method { $name
+ ="getInt" $return="int" }method { $name="getLong" $return="long" }met
+ hod { $name="getObject" $return="java.lang.Boolean" }method { $argume
+ nts="{int,java.lang.String,org.osgi.framework.BundleContext}" $name="
+ $init" }interface { $name="org.apache.felix.ipojo.test.scenarios.mani
+ pulation.service.FooService" }}}component { $name="ManipulationMetada
+ ta-FooBarProviderType-1" $classname="org.apache.felix.ipojo.test.scen
+ arios.component.FooBarProviderType1" $architecture="true" provides {
+ }manipulation { method { $name="$init" }method { $name="foo" $return=
+ "boolean" }method { $name="fooProps" $return="java.util.Properties" }
+ method { $name="bar" $return="boolean" }method { $name="getProps" $re
+ turn="java.util.Properties" }method { $name="getBoolean" $return="boo
+ lean" }method { $name="getDouble" $return="double" }method { $name="g
+ etInt" $return="int" }method { $name="getLong" $return="long" }method
+ { $name="getObject" $return="java.lang.Boolean" }interface { $name="
+ org.apache.felix.ipojo.test.scenarios.manipulation.service.FooService
+ " }interface { $name="org.apache.felix.ipojo.test.scenarios.manipulat
+ ion.service.BarService" }}}component { $name="ManipulationMetadata-Fo
+ oProviderType-Dyn" $classname="org.apache.felix.ipojo.test.scenarios.
+ component.FooProviderTypeDyn" $architecture="true" provides { propert
+ y { $field="intProp" $mandatory="false" $name="int" $value="2" }prope
+ rty { $field="boolProp" $mandatory="false" $name="boolean" $value="fa
+ lse" }property { $field="strProp" $mandatory="false" $name="string" $
+ value="foo" }property { $field="strAProp" $mandatory="false" $name="s
+ trAProp" $value="[foo, bar]" }property { $field="intAProp" $mandatory
+ ="false" $name="intAProp" $value="[ 1,2,3]" }}manipulation { field {
+ $name="boolProp" $type="boolean" }field { $name="strProp" $type="java
+ .lang.String" }field { $name="strAProp" $type="java.lang.String[]" }f
+ ield { $name="intProp" $type="int" }field { $name="intAProp" $type="i
+ nt[]" }method { $name="$init" }method { $name="foo" $return="boolean"
+ }method { $name="fooProps" $return="java.util.Properties" }method {
+ $name="getBoolean" $return="boolean" }method { $name="getDouble" $ret
+ urn="double" }method { $name="getInt" $return="int" }method { $name="
+ getLong" $return="long" }method { $name="getObject" $return="java.lan
+ g.Boolean" }interface { $name="org.apache.felix.ipojo.test.scenarios.
+ manipulation.service.FooService" }}}component { $name="ManipulationMe
+ tadata-PrimitiveManipulationTester" $classname="org.apache.felix.ipoj
+ o.test.scenarios.component.Manipulation23Tester" $architecture="true"
+ provides { }manipulation { field { $name="f" $type="float" }field {
+ $name="d" $type="double" }field { $name="is" $type="int[]" }field { $
+ name="bools" $type="boolean[]" }field { $name="b" $type="byte" }field
+ { $name="ls" $type="long[]" }field { $name="c" $type="char" }field {
+ $name="l" $type="long" }field { $name="bs" $type="byte[]" }field { $
+ name="cs" $type="char[]" }field { $name="i" $type="int" }field { $nam
+ e="s" $type="short" }field { $name="fs" $type="float[]" }field { $nam
+ e="ss" $type="short[]" }field { $name="bool" $type="boolean" }field {
+ $name="ds" $type="double[]" }method { $name="$init" }method { $name=
+ "getBoolean" $return="boolean" }method { $name="getBooleans" $return=
+ "boolean[]" }method { $name="getByte" $return="byte" }method { $name=
+ "getBytes" $return="byte[]" }method { $name="getChar" $return="char"
+ }method { $name="getChars" $return="char[]" }method { $name="getDoubl
+ e" $return="double" }method { $name="getDoubles" $return="double[]" }
+ method { $name="getFloat" $return="float" }method { $name="getFloats"
+ $return="float[]" }method { $name="getInt" $return="int" }method { $
+ name="getInts" $return="int[]" }method { $name="getLong" $return="lon
+ g" }method { $name="getLongs" $return="long[]" }method { $name="getSh
+ ort" $return="short" }method { $name="getShorts" $return="short[]" }m
+ ethod { $arguments="{boolean}" $name="setBoolean" }method { $argument
+ s="{boolean[]}" $name="setBooleans" }method { $arguments="{byte}" $na
+ me="setByte" }method { $arguments="{byte[]}" $name="setBytes" }method
+ { $arguments="{char}" $name="setChar" }method { $arguments="{char[]}
+ " $name="setChars" }method { $arguments="{double}" $name="setDouble"
+ }method { $arguments="{double[]}" $name="setDoubles" }method { $argum
+ ents="{float}" $name="setFloat" }method { $arguments="{float[]}" $nam
+ e="setFloats" }method { $arguments="{int}" $name="setInt" }method { $
+ arguments="{int[]}" $name="setInts" }method { $arguments="{long}" $na
+ me="setLong" }method { $arguments="{long[]}" $name="setLongs" }method
+ { $arguments="{short}" $name="setShort" }method { $arguments="{short
+ []}" $name="setShorts" }method { $arguments="{long,java.lang.String}"
+ $name="setLong" }interface { $name="org.apache.felix.ipojo.test.scen
+ arios.manipulation.service.PrimitiveManipulationTestService" }}}compo
+ nent { $name="ManipulationMetadata-SimpleMultipleCheckServiceProvider
+ " $classname="org.apache.felix.ipojo.test.scenarios.component.Multipl
+ eCheckService" $architecture="true" provides { }manipulation { field
+ { $name="refU" $type="int" }field { $name="objectU" $type="int" }fiel
+ d { $name="bothB" $type="int" }field { $name="objectB" $type="int" }f
+ ield { $name="bothU" $type="int" }field { $name="fs" $type="org.apach
+ e.felix.ipojo.test.scenarios.manipulation.service.FooService[]" }fiel
+ d { $name="simpleU" $type="int" }field { $name="simpleB" $type="int"
+ }field { $name="refB" $type="int" }method { $name="$init" }method { $
+ name="check" $return="boolean" }method { $name="getBoolean" $return="
+ boolean" }method { $name="getInt" $return="int" }method { $name="getL
+ ong" $return="long" }method { $name="getDouble" $return="double" }met
+ hod { $arguments="{java.lang.Object,java.lang.String}" $name="doNothi
+ ng" $return="java.lang.Object" }method { $name="getProps" $return="ja
+ va.util.Properties" }method { $name="voidBind" }method { $name="voidU
+ nbind" }method { $arguments="{org.apache.felix.ipojo.test.scenarios.m
+ anipulation.service.FooService}" $name="objectBind" }method { $argume
+ nts="{org.apache.felix.ipojo.test.scenarios.manipulation.service.FooS
+ ervice}" $name="objectUnbind" }method { $arguments="{org.osgi.framewo
+ rk.ServiceReference}" $name="refBind" }method { $arguments="{org.osgi
+ .framework.ServiceReference}" $name="refUnbind" }method { $arguments=
+ "{org.apache.felix.ipojo.test.scenarios.manipulation.service.FooServi
+ ce,org.osgi.framework.ServiceReference}" $name="bothBind" }method { $
+ arguments="{org.apache.felix.ipojo.test.scenarios.manipulation.servic
+ e.FooService,org.osgi.framework.ServiceReference}" $name="bothUnbind"
+ }interface { $name="org.apache.felix.ipojo.test.scenarios.manipulati
+ on.service.CheckService" }}requires { $field="fs" }}component { $clas
+ sname="org.apache.felix.ipojo.test.scenarios.component.Child" manipul
+ ation { $super="org.apache.felix.ipojo.test.scenarios.component.Paren
+ t" method { $arguments="{java.lang.String}" $name="$init" }}}componen
+ t { $classname="org.apache.felix.ipojo.test.scenarios.component.Multi
+ constructor" manipulation { method { $arguments="{java.lang.String,ja
+ va.lang.String}" $name="$init" }method { $arguments="{java.lang.Strin
+ g,int}" $name="$init" }method { $arguments="{java.lang.String,java.la
+ ng.String,int}" $name="$init" }}}
+Test-Suite: org.apache.felix.ipojo.test.scenarios.manipulation.Manipul
+ ationTestSuite
+Built-By: clement
+Tool: Bnd-0.0.357
+Bundle-Name: iPOJO Manipulation Metadata Test Suite
+Created-By: Apache Maven Bundle Plugin & iPOJO 1.6.0
+Build-Jdk: 1.6.0_22
+Bundle-Version: 1.5.0.SNAPSHOT
+Bnd-LastModified: 1292762858403
+Bundle-ManifestVersion: 2
+Import-Package: org.osgi.service.log;version=1.3, org.apache.felix.ipo
+ jo.test.scenarios.manipulation.service, org.apache.felix.ipojo.junit4
+ osgi, junit.framework, org.apache.felix.ipojo.architecture;version=1.
+ 6, org.apache.felix.ipojo;version=1.6, org.osgi.framework;version=1.5
+ , org.osgi.service.cm;version=1.2, org.apache.felix.ipojo.metadata, o
+ rg.apache.felix.ipojo.parser;version=1.6
+Bundle-SymbolicName: tests.manipulation.metadata
+
Modified: felix/sandbox/clement/ipojo-constructor-injection/manipulator/pom.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/manipulator/pom.xml?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/manipulator/pom.xml (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/manipulator/pom.xml Mon Dec 20 12:39:30 2010
@@ -51,6 +51,11 @@
<artifactId>org.apache.felix.ipojo.metadata</artifactId>
<version>1.4.0</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.annotations</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -109,6 +114,16 @@
<configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
</configuration>
</plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+
</plugins>
<resources>
Modified: felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java Mon Dec 20 12:39:30 2010
@@ -71,7 +71,7 @@ public class MethodCollector extends Emp
visitor = new BindAnnotationParser(index);
}
- if (CustomAnnotationVisitor.isCustomAnnotation(annotation)) {
+ if (visitor == null && CustomAnnotationVisitor.isCustomAnnotation(annotation)) {
Element elem = CustomAnnotationVisitor.buildElement(annotation);
elem.addAttribute(new Attribute("index", "" + index));
visitor = new CustomAnnotationVisitor(elem, m_collector, true, false, index, m_descriptor);
@@ -608,7 +608,6 @@ public class MethodCollector extends Emp
}
}
- prop.addAttribute(new Attribute("method", m_method));
if (m_value != null) {
prop.addAttribute(new Attribute("value", m_value));
}
@@ -618,6 +617,8 @@ public class MethodCollector extends Emp
if (m_isParameterAnnotation) {
m_collector.addConstructorParameter(m_index, m_id);
+ } else {
+ prop.addAttribute(new Attribute("method", m_method));
}
}
Modified: felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/test/java/test/Constructor.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/test/java/test/Constructor.java?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/test/java/test/Constructor.java (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/manipulator/src/test/java/test/Constructor.java Mon Dec 20 12:39:30 2010
@@ -8,6 +8,7 @@ import org.apache.felix.ipojo.annotation
public class Constructor {
public Constructor(@Property(name="foo") String s, @Requires(id="t") Thread t) {
+ // plop
}
Added: felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Child.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Child.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Child.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Child.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,9 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class Child extends Parent {
+
+ public Child(String s) {
+ super(s);
+ }
+
+}
Added: felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Multiconstructor.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Multiconstructor.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Multiconstructor.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Multiconstructor.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,17 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class Multiconstructor {
+
+ public Multiconstructor(String s1, String s2) {
+ this(s1, s2, -1);
+ }
+
+ public Multiconstructor(String s1, int s2) {
+ this(s1, "" + s2, s2);
+ }
+
+ public Multiconstructor(String s1, String s2, int i) {
+ //...
+ }
+
+}
Added: felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Parent.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Parent.java?rev=1051085&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Parent.java (added)
+++ felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/java/org/apache/felix/ipojo/test/scenarios/component/Parent.java Mon Dec 20 12:39:30 2010
@@ -0,0 +1,15 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class Parent {
+
+ private String s;
+
+ public Parent(String s) {
+ this.s = s;
+ }
+
+ public String getS() {
+ return s;
+ }
+
+}
Modified: felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/resources/metadata.xml?rev=1051085&r1=1051084&r2=1051085&view=diff
==============================================================================
--- felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/resources/metadata.xml (original)
+++ felix/sandbox/clement/ipojo-constructor-injection/tests/manipulator/metadata/src/main/resources/metadata.xml Mon Dec 20 12:39:30 2010
@@ -9,14 +9,14 @@
name="ManipulationMetadata-FooProviderType-1" architecture="true">
<provides />
</component>
-
+
<!-- Provider providing 2 services -->
<component
classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
name="ManipulationMetadata-FooBarProviderType-1" architecture="true">
<provides />
</component>
-
+
<!-- Provider with dynamic property -->
<component
classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn"
@@ -30,7 +30,7 @@
<property name="intAProp" field="intAProp" value="[ 1,2,3]" />
</provides>
</component>
-
+
<!-- Manipulation -->
<component
classname="org.apache.felix.ipojo.test.scenarios.component.Manipulation23Tester"
@@ -38,11 +38,20 @@
<provides />
</component>
-
+
<component
classname="org.apache.felix.ipojo.test.scenarios.component.MultipleCheckService"
name="ManipulationMetadata-SimpleMultipleCheckServiceProvider" architecture="true">
<requires field="fs" />
<provides />
</component>
+
+
+ <component
+ classname="org.apache.felix.ipojo.test.scenarios.component.Child">
+ </component>
+
+ <component
+ classname="org.apache.felix.ipojo.test.scenarios.component.Multiconstructor">
+ </component>
</ipojo>