Author: clement
Date: Sat Apr 14 14:55:25 2012
New Revision: 1326120
URL: http://svn.apache.org/viewvc?rev=1326120&view=rev
Log:
Fix FELIX-3374.
Create the propagated properties correctly.
Modified:
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/ProvidedServiceHandler.java
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Property.java
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerTest.java
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/test/MockBundle.java
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=1326120&r1=1326119&r2=1326120&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 Apr 14 14:55:25 2012
@@ -549,7 +549,7 @@ public class ProvidedService implements
if (! alreadyExisting) {
try {
- Property prop = new Property(key, null, null,
value.toString(), value.getClass().getName(), getInstanceManager(), m_handler);
+ Property prop = new Property(key, null, null, value,
getInstanceManager(), m_handler);
addProperty(prop);
updated = true;
} catch (ConfigurationException e) {
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=1326120&r1=1326119&r2=1326120&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 Apr 14 14:55:25 2012
@@ -518,6 +518,7 @@ public class ProvidedServiceHandler exte
*/
public void addProperties(Dictionary dict) {
for (int i = 0; i < m_providedServices.length; i++) {
+ System.out.println("adding properties " + dict);
m_providedServices[i].addProperties(dict);
m_providedServices[i].update();
}
Modified:
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Property.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Property.java?rev=1326120&r1=1326119&r2=1326120&view=diff
==============================================================================
---
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Property.java
(original)
+++
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Property.java
Sat Apr 14 14:55:25 2012
@@ -141,6 +141,48 @@ public class Property implements FieldIn
}
}
+ /**
+ * Creates a property.
+ * At least the method or the field need
+ * to be specified.
+ * @param name the name of the property (optional)
+ * @param field the name of the field
+ * @param method the method name
+ * @param value the initial value of the property (optional)
+ * @param manager the instance manager
+ * @param handler the handler object which manage this property.
+ * @throws ConfigurationException if the property value cannot be set.
+ */
+ public Property(String name, String field, String method, Object value,
InstanceManager manager, Handler handler) throws ConfigurationException {
+ m_handler = handler;
+ m_manager = manager;
+ m_field = field;
+
+ if (value == null) {
+ throw new ConfigurationException("Cannot create properties without
a value");
+ }
+
+ if (name == null) {
+ if (m_field == null) {
+ m_name = method;
+ } else {
+ m_name = field;
+ }
+ } else {
+ m_name = name;
+ }
+
+ m_type = value.getClass();
+ m_value = value;
+ m_defaultValue = m_value;
+
+ if (method != null) {
+ m_method = new Callback(method, new String[] { m_type.getName() },
false, manager);
+ } else {
+ m_method = null;
+ }
+ }
+
public Property(String name, String field, String method, int index,
String value, String type, InstanceManager manager, Handler
handler) throws ConfigurationException {
this(name, field, method, value, type, manager, handler);
Modified:
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerTest.java?rev=1326120&r1=1326119&r2=1326120&view=diff
==============================================================================
---
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerTest.java
(original)
+++
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandlerTest.java
Sat Apr 14 14:55:25 2012
@@ -3,9 +3,7 @@ package org.apache.felix.ipojo.handlers.
import junit.framework.Assert;
import junit.framework.TestCase;
-import org.apache.felix.ipojo.ComponentFactory;
-import org.apache.felix.ipojo.ConfigurationException;
-import org.apache.felix.ipojo.InstanceManager;
+import org.apache.felix.ipojo.*;
import org.apache.felix.ipojo.architecture.ComponentTypeDescription;
import org.apache.felix.ipojo.handlers.dependency.DependencyHandler;
import org.apache.felix.ipojo.metadata.Attribute;
@@ -16,6 +14,11 @@ import org.apache.felix.ipojo.util.Logge
import org.mockito.Mockito;
import org.osgi.framework.BundleContext;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Dictionary;
+import java.util.Properties;
+
public class ProvidedServiceHandlerTest extends TestCase {
BundleContext context;
@@ -23,8 +26,9 @@ public class ProvidedServiceHandlerTest
InstanceManager im;
ComponentTypeDescription desc;
ProvidedServiceHandler handler;
+ Logger logger;
- public void setUp() {
+ public void setUp() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
context = (BundleContext) Mockito.mock(BundleContext.class);
Mockito.when(context.getProperty(DependencyHandler.PROXY_TYPE_PROPERTY)).thenReturn(null);
Mockito.when(context.getProperty(Logger.IPOJO_LOG_LEVEL_PROP)).thenReturn(null);
@@ -32,11 +36,14 @@ public class ProvidedServiceHandlerTest
factory = (ComponentFactory) Mockito.mock(ComponentFactory.class);
Mockito.when(factory.getBundleClassLoader()).thenReturn(ProvidedServiceHandler.class.getClassLoader());
- Mockito.when(factory.getLogger()).thenReturn(new Logger(context,
"TEST", Logger.INFO));
+ logger = Mockito.spy(new Logger(context, "TEST", Logger.INFO));
+ Mockito.when(factory.getLogger()).thenReturn(logger);
im = (InstanceManager) Mockito.mock(InstanceManager.class);
Mockito.when(im.getContext()).thenReturn(context);
+ Mockito.when(im.getGlobalContext()).thenReturn(context);
Mockito.when(im.getFactory()).thenReturn(factory);
+ Mockito.when(im.getInstanceName()).thenReturn("an.instance");
desc = (ComponentTypeDescription)
Mockito.mock(ComponentTypeDescription.class);
Mockito.when(desc.getFactory()).thenReturn(factory);
@@ -44,6 +51,12 @@ public class ProvidedServiceHandlerTest
handler = new ProvidedServiceHandler();
handler.setFactory(factory);
+
+ // Attach the handler
+ Method method = PrimitiveHandler.class.getDeclaredMethod("attach", new
Class[]{ComponentInstance.class});
+ method.setAccessible(true);
+ method.invoke(handler, new Object[]{im});
+
}
public void testServiceDetectionNoInterface() throws
ConfigurationException {
@@ -130,4 +143,18 @@ public class ProvidedServiceHandlerTest
}
+ public void testWhenRequiresFilterIsPropagated() throws Exception {
+ Dictionary dictionary = new Properties();
+ Dictionary requiresfilter = new Properties();
+ requiresfilter.put("id1", "(filter1)");
+ dictionary.put("requires.filter", requiresfilter);
+
+
+ ProvidedService providedService = new ProvidedService(handler, new
String[] {Runnable.class.getName()}, ProvidedService.SINGLETON_STRATEGY, null,
new Properties());
+ Assert.assertEquals(2, providedService.getProperties().length); //
instance.name, service.pid
+ providedService.addProperties(dictionary);
+
+ Assert.assertEquals(2 + 1, providedService.getProperties().length);
+ }
+
}
Modified:
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/test/MockBundle.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/test/MockBundle.java?rev=1326120&r1=1326119&r2=1326120&view=diff
==============================================================================
---
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/test/MockBundle.java
(original)
+++
felix/trunk/ipojo/core/src/test/java/org/apache/felix/ipojo/test/MockBundle.java
Sat Apr 14 14:55:25 2012
@@ -17,7 +17,7 @@ public class MockBundle implements Bundl
private final ClassLoader m_classloader;
/**
- * @param classloader the Classloader to load classes and resources.
+ * @param cl the Classloader to load classes and resources.
*/
public MockBundle(ClassLoader cl) {
m_classloader = cl;