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/07/03 17:13:58 UTC
svn commit: r960227 - in /felix/trunk/ipojo:
annotations/src/main/java/org/apache/felix/ipojo/annotations/
core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/
manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/
te...
Author: clement
Date: Sat Jul 3 15:13:57 2010
New Revision: 960227
URL: http://svn.apache.org/viewvc?rev=960227&view=rev
Log:
Fix FELIX-2461
Add a specification attribute to the @ServiceController
Modify the PRovidedServiceHandler to support this attribute
Parse this attribute in the manipulator
Add the test cases
Added:
felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceControllerSpec.java
Modified:
felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/ServiceController.java
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java
felix/trunk/ipojo/tests/core/annotations/pom.xml
felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
Modified: felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/ServiceController.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/ServiceController.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/ServiceController.java (original)
+++ felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/ServiceController.java Sat Jul 3 15:13:57 2010
@@ -32,5 +32,12 @@ public @interface ServiceController {
* Sets the initial value of the controller.
*/
boolean value() default true;
+
+
+ /**
+ * Sets the targeted specification.
+ * If not set, target all specifications.
+ */
+ Class specification() default Object.class;
}
Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java Sat Jul 3 15:13:57 2010
@@ -21,6 +21,7 @@ package org.apache.felix.ipojo.handlers.
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Dictionary;
@@ -117,7 +118,7 @@ public class ProvidedService implements
/**
* Service Controller.
*/
- private ServiceController m_controller;
+ private Map /*<Specification, ServiceController>*/ m_controllers = new HashMap/*<Specification, ServiceController>*/();
/**
* Post-Registration callback.
@@ -327,16 +328,21 @@ public class ProvidedService implements
* This method also notifies the creation strategy of the publication.
*/
protected synchronized void registerService() {
+ // Unregister if registered
+ if (m_serviceRegistration != null) {
+ unregisterService();
+ }
+
if (m_handler.getInstanceManager().getState() == ComponentInstance.VALID
- && m_serviceRegistration == null && (m_controller == null || m_controller.getValue())) {
+ && m_serviceRegistration == null && isAtLeastAServiceControllerValid()) {
// Build the service properties list
BundleContext bc = m_handler.getInstanceManager().getContext();
// Security check
if (SecurityHelper.hasPermissionToRegisterServices(m_serviceSpecifications, bc)) {
Properties serviceProperties = getServiceProperties();
- m_strategy.onPublication(getInstanceManager(), m_serviceSpecifications, serviceProperties);
- m_serviceRegistration = bc.registerService(m_serviceSpecifications, this, serviceProperties);
+ m_strategy.onPublication(getInstanceManager(), getServiceSpecificationsToRegister(), serviceProperties);
+ m_serviceRegistration = bc.registerService(getServiceSpecificationsToRegister(), this, serviceProperties);
// An update may happen during the registration, re-check and apply.
if (m_wasUpdated) {
m_serviceRegistration.setProperties(getServiceProperties());
@@ -366,7 +372,7 @@ public class ProvidedService implements
protected synchronized void unregisterService() {
// Create a copy of the service reference in the case we need
// to inject it to the post-unregistration callback.
-
+
ServiceReference ref = null;
if (m_serviceRegistration != null) {
ref = m_serviceRegistration.getReference();
@@ -497,13 +503,87 @@ public class ProvidedService implements
* Sets the service controller on this provided service.
* @param field the field attached to this controller
* @param value the value the initial value
+ * @param specification the target specification, if <code>null</code>
+ * affect all specifications.
*/
- public void setController(String field, boolean value) {
- m_controller = new ServiceController(field, value);
+ public void setController(String field, boolean value, String specification) {
+ if (specification == null) {
+ m_controllers.put("ALL", new ServiceController(field, value));
+ } else {
+ m_controllers.put(specification, new ServiceController(field, value));
+
+ }
}
- public ServiceController getController() {
- return m_controller;
+ public ServiceController getController(String field) {
+ Collection controllers = m_controllers.values();
+ Iterator iterator = controllers.iterator();
+ while (iterator.hasNext()) {
+ ServiceController controller = (ServiceController) iterator.next();
+ if (field.equals(controller.m_field)) {
+ return controller;
+ }
+ }
+ return null;
+ }
+
+ public ServiceController getControllerBySpecification(String spec) {
+ return (ServiceController) m_controllers.get(spec);
+ }
+
+ /**
+ * Checks if at least one service controller is valid.
+ * @return <code>true</code> if one service controller at least
+ * is valid.
+ */
+ private boolean isAtLeastAServiceControllerValid() {
+ Collection controllers = m_controllers.values();
+
+ // No controller
+ if (controllers.isEmpty()) {
+ return true;
+ }
+
+ Iterator iterator = controllers.iterator();
+ while (iterator.hasNext()) {
+ ServiceController controller = (ServiceController) iterator.next();
+ if (controller.getValue()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String[] getServiceSpecificationsToRegister() {
+ if (m_controllers.isEmpty()) {
+ return m_serviceSpecifications;
+ }
+
+ ArrayList l = new ArrayList();
+ if (m_controllers.containsKey("ALL")) {
+ ServiceController ctrl = (ServiceController) m_controllers.get("ALL");
+ if (ctrl.m_value) {
+ l.addAll(Arrays.asList(m_serviceSpecifications));
+ }
+ }
+
+ Iterator iterator = m_controllers.keySet().iterator();
+ while (iterator.hasNext()) {
+ String spec = (String) iterator.next();
+ ServiceController ctrl = (ServiceController) m_controllers.get(spec);
+ if (ctrl.m_value) {
+ if (! "ALL".equals(spec)) { // Already added.
+ if (! l.contains(spec)) {
+ l.add(spec);
+ }
+ }
+ } else {
+ l.remove(spec);
+ }
+ }
+
+ return (String[]) l.toArray(new String[l.size()]);
+
}
public void setPostRegistrationCallback(Callback cb) {
@@ -562,7 +642,14 @@ public class ProvidedService implements
if (m_value) {
registerService();
} else {
- unregisterService();
+ // If we are still some specification valid, register those one
+ // The registerService will call unregister.
+ if (getServiceSpecificationsToRegister().length != 0) {
+ registerService();
+ } else {
+ // If not, then unregister all
+ unregisterService();
+ }
}
}
}
Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java Sat Jul 3 15:13:57 2010
@@ -109,10 +109,23 @@ public class ProvidedServiceDescription
* @return the value
*/
public String getController() {
- if (m_ps.getController() == null) {
+ if (m_ps.getControllerBySpecification("ALL") == null) {
return null;
} else {
- return String.valueOf(m_ps.getController().getValue());
+ return String.valueOf(m_ps.getControllerBySpecification("ALL").getValue());
+ }
+ }
+
+ /**
+ * Gets the controller value as a String.
+ * @param specification
+ * @return the value
+ */
+ public String getController(String specification) {
+ if (m_ps.getControllerBySpecification(specification) == null) {
+ return null;
+ } else {
+ return String.valueOf(m_ps.getControllerBySpecification(specification).getValue());
}
}
Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java Sat Jul 3 15:13:57 2010
@@ -35,6 +35,7 @@ import org.apache.felix.ipojo.architectu
import org.apache.felix.ipojo.architecture.PropertyDescription;
import org.apache.felix.ipojo.handlers.dependency.Dependency;
import org.apache.felix.ipojo.handlers.dependency.DependencyHandler;
+import org.apache.felix.ipojo.handlers.providedservice.ProvidedService.ServiceController;
import org.apache.felix.ipojo.metadata.Attribute;
import org.apache.felix.ipojo.metadata.Element;
import org.apache.felix.ipojo.parser.FieldMetadata;
@@ -189,20 +190,22 @@ public class ProvidedServiceHandler exte
Element[] controllers = providedServices[i].getElements("Controller");
if (controllers != null) {
- if (controllers.length > 1) {
- throw new ConfigurationException("Cannot have several controller per 'provides' element");
- }
-
- String field = controllers[0].getAttribute("field");
- if (field == null) {
- throw new ConfigurationException("The field attribute of a controller is mandatory");
- }
+ for (int k = 0; k < controllers.length; k++) {
+ String field = controllers[k].getAttribute("field");
+ if (field == null) {
+ throw new ConfigurationException("The field attribute of a controller is mandatory");
+ }
- String v = controllers[0].getAttribute("value");
- boolean value = ! (v != null && v.equalsIgnoreCase("false"));
- svc.setController(field, value);
+ String v = controllers[k].getAttribute("value");
+ boolean value = ! (v != null && v.equalsIgnoreCase("false"));
+ String s = controllers[k].getAttribute("specification");
+ if (s == null) {
+ s ="ALL";
+ }
+ svc.setController(field, value, s);
- getInstanceManager().register(new FieldMetadata(field, "boolean"), this);
+ getInstanceManager().register(new FieldMetadata(field, "boolean"), this);
+ }
}
if (checkProvidedService(svc)) {
@@ -428,9 +431,10 @@ public class ProvidedServiceHandler exte
if (update) {
svc.update();
}
- if (svc.getController() != null && svc.getController().getField().equals(fieldName)) {
+ ServiceController ctrl = svc.getController(fieldName);
+ if (ctrl != null) {
if (value instanceof Boolean) {
- svc.getController().setValue((Boolean) value);
+ ctrl.setValue((Boolean) value);
} else {
warn("Boolean value expected for the service controler " + fieldName);
}
@@ -459,8 +463,9 @@ public class ProvidedServiceHandler exte
return prop.onGet(pojo, fieldName, value);
}
}
- if (svc.getController() != null && svc.getController().getField().equals(fieldName)) {
- return new Boolean(svc.getController().getValue());
+ ServiceController ctrl = svc.getController(fieldName);
+ if (ctrl != null) {
+ return new Boolean(ctrl.getValue());
}
}
// Else it is not a property
Modified: felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java (original)
+++ felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java Sat Jul 3 15:13:57 2010
@@ -408,7 +408,12 @@ public class FieldCollector extends Empt
/**
* Property value.
*/
- private String m_value;
+ private String m_value;
+
+ /**
+ * Specification value.
+ */
+ private String m_spec;
/**
* Constructor.
@@ -431,6 +436,10 @@ public class FieldCollector extends Empt
m_value = arg1.toString();
return;
}
+ if (arg0.equals("specification")) {
+ m_spec = ((Type) arg1).getClassName();
+ return;
+ }
}
/**
@@ -446,6 +455,9 @@ public class FieldCollector extends Empt
if (m_value != null) {
controller.addAttribute(new Attribute("value", m_value));
}
+ if (m_spec != null) {
+ controller.addAttribute(new Attribute("specification", m_spec));
+ }
}
}
}
Modified: felix/trunk/ipojo/tests/core/annotations/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/pom.xml?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/pom.xml (original)
+++ felix/trunk/ipojo/tests/core/annotations/pom.xml Sat Jul 3 15:13:57 2010
@@ -113,6 +113,7 @@
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
<executions>
<execution>
<goals>
Modified: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java (original)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java Sat Jul 3 15:13:57 2010
@@ -91,6 +91,17 @@ public class ServiceProdiving extends OS
assertEquals(1, provs[0].getElements("controller").length);
assertEquals("false", provs[0].getElements("controller")[0].getAttribute("value"));
}
+
+ public void testServiceControllerWithSpecification() {
+ Element meta = helper.getMetadata("org.apache.felix.ipojo.test.scenarios.component.PSServiceControllerSpec");
+ Element[] provs = meta.getElements("provides");
+ assertNotNull("Provides exists ", provs);
+ System.out.println(provs[0].toString());
+ assertNotNull(provs[0].getElements("controller"));
+ assertEquals(2, provs[0].getElements("controller").length);
+ assertEquals("false", provs[0].getElements("controller")[0].getAttribute("value"));
+ assertEquals(FooService.class.getName(), provs[0].getElements("controller")[0].getAttribute("specification"));
+ }
private Element getPropertyByName(Element[] props, String name) {
for (int i = 0; i < props.length; i++) {
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceControllerSpec.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceControllerSpec.java?rev=960227&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceControllerSpec.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceControllerSpec.java Sat Jul 3 15:13:57 2010
@@ -0,0 +1,57 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.annotations.ServiceController;
+import org.apache.felix.ipojo.test.scenarios.annotations.service.BarService;
+import org.apache.felix.ipojo.test.scenarios.annotations.service.FooService;
+
+@Component
+@Provides(specifications= {FooService.class, BarService.class})
+public class PSServiceControllerSpec implements FooService, BarService {
+
+ @ServiceController(value=false, specification=FooService.class)
+ public boolean controller1;
+
+ @ServiceController(value=true)
+ public boolean controller2;
+
+ public boolean foo() {
+ return false;
+ }
+
+ public Properties fooProps() {
+ return null;
+ }
+
+ public boolean getBoolean() {
+ return false;
+ }
+
+ public double getDouble() {
+ return 0;
+ }
+
+ public int getInt() {
+ return 0;
+ }
+
+ public long getLong() {
+ return 0;
+ }
+
+ public Boolean getObject() {
+ return null;
+ }
+
+ public boolean bar() {
+ return false;
+ }
+
+ public Properties getProps() {
+ return null;
+ }
+
+}
Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java Sat Jul 3 15:13:57 2010
@@ -127,6 +127,100 @@ public class ServiceControllerTest exten
ci.dispose();
}
+ public void testComponentWithTwoControllersUsingBothSpecificationsTrueFalse() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-spec1");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+
+ assertFalse(isServiceAvailable(FooService.class.getName()));
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.getProps();
+
+ assertFalse(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.fooProps();
+
+ assertTrue(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithTwoControllersUsingBothSpecificationsTrueTrue() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-spec2");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+ waitForService(FooService.class.getName(), null, 5000);
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.check();
+ // CheckService not available
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNotNull(getServiceReference(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.foo();
+
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithTwoControllersUsingSpecificationAndAllTrueTrue() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-spec3");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+ waitForService(FooService.class.getName(), null, 5000);
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.check();
+ // CheckService not available
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNotNull(getServiceReference(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.foo();
+
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithTwoControllersUsingSpecificationAndAllTrueFalse() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-spec4");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+
+ assertFalse(isServiceAvailable(FooService.class.getName()));
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.getProps();
+
+ assertFalse(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.fooProps();
+
+ assertTrue(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
public void testArchitecture() {
ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-default");
// Controller set to true.
Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml?rev=960227&r1=960226&r2=960227&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml Sat Jul 3 15:13:57 2010
@@ -1,6 +1,5 @@
<ipojo
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
xmlns="org.apache.felix.ipojo"
>
<!-- Simple provider -->
@@ -209,6 +208,48 @@
<controller field="controllerCS" value="true"/>
</provides>
</component>
+
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-spec1">
+ <provides>
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="false" specification="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"/>
+ <controller field="controllerCS" value="true" specification="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ </component>
+
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-spec2">
+ <provides>
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="true" specification="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"/>
+ <controller field="controllerCS" value="true" specification="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ </component>
+
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-spec3">
+ <provides>
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="true" specification="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"/>
+ <controller field="controllerCS" value="true"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ </component>
+
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-spec4">
+ <provides>
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="false" specification="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"/>
+ <controller field="controllerCS" value="true"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ </component>
+
+
<!-- Anonymous classes -->
<component