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;


Reply via email to