felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clem...@apache.org
Subject svn commit: r1001224 - in /felix/trunk/ipojo: core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ core/src/main/java/org/apache/felix/ipojo/util/ tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ test...
Date Sat, 25 Sep 2010 14:50:16 GMT
Author: clement
Date: Sat Sep 25 14:50:16 2010
New Revision: 1001224

URL: http://svn.apache.org/viewvc?rev=1001224&view=rev
Log:
Fix FELIX-2623 @Update annotated methods should not require a Dictionary parameter.
The updated method can be parameter-less.

Added:
    felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType2.java
    felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedService.java
    felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedServiceFactory.java
Modified:
    felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ConfigurationHandler.java
    felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Callback.java
    felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType1.java
    felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
    felix/trunk/ipojo/tests/core/configuration/src/main/resources/metadata.xml

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ConfigurationHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ConfigurationHandler.java?rev=1001224&r1=1001223&r2=1001224&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ConfigurationHandler.java
(original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ConfigurationHandler.java
Sat Sep 25 14:50:16 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
@@ -222,7 +222,19 @@ public class ConfigurationHandler extend
         // updated method
         String upd = confs[0].getAttribute("updated");
         if (upd != null) {
-            m_updated = new Callback(upd, new Class[] {Dictionary.class}, false, getInstanceManager());
+        	MethodMetadata method = getPojoMetadata().getMethod(upd);
+        	if (method == null) {
+        		throw new ConfigurationException("The updated method is not found in the class
"
+        				+ getInstanceManager().getClassName());
+        	} else if (method.getMethodArguments().length == 0) {
+        		m_updated = new Callback(upd, new Class[0], false, getInstanceManager());
+        	} else if (method.getMethodArguments().length == 1
+        			&& method.getMethodArguments()[0].equals(Dictionary.class.getName()))
{
+        		m_updated = new Callback(upd, new Class[] {Dictionary.class}, false, getInstanceManager());
+        	} else {
+        		throw new ConfigurationException("The updated method is found in the class "
+        				+ getInstanceManager().getClassName() + " must have either no argument or a Dictionary");
+        	}
         }
 
         for (int i = 0; configurables != null && i < configurables.length; i++)
{
@@ -295,14 +307,14 @@ public class ConfigurationHandler extend
             props.put(Constants.SERVICE_PID, m_managedServicePID);
             props.put("instance.name", getInstanceManager().getInstanceName());
             props.put("factory.name", getInstanceManager().getFactory().getFactoryName());
-            
+
             // Security Check
-            if (SecurityHelper.hasPermissionToRegisterService(ManagedService.class.getName(),

+            if (SecurityHelper.hasPermissionToRegisterService(ManagedService.class.getName(),
                     getInstanceManager().getContext())) {
                 m_sr = getInstanceManager().getContext().registerService(ManagedService.class.getName(),
this, props);
             } else {
-                error("Cannot register the ManagedService - The bundle " 
-                        + getInstanceManager().getContext().getBundle().getBundleId() 
+                error("Cannot register the ManagedService - The bundle "
+                        + getInstanceManager().getContext().getBundle().getBundleId()
                         + " does not have the permission to register the service");
             }
         }
@@ -375,7 +387,7 @@ public class ConfigurationHandler extend
                 }
             }
             if (!found) {
-                // The property is not a configurable property, aadd it to the toPropagate
list.
+                // The property is not a configurable property, add it to the toPropagate
list.
                 toPropagate.put(name, value);
             }
         }
@@ -463,6 +475,24 @@ public class ConfigurationHandler extend
         if (m_updated == null) {
             return;
         }
+
+        if (m_updated.getArguments().length == 0) {
+        	// We don't have to compute the properties,
+        	// we just call the callback.
+        	try {
+                if (instance == null) {
+                    m_updated.call(new Object[0]);
+                } else {
+                    m_updated.call(instance, new Object[0]);
+                }
+            } catch (Exception e) {
+                error("Cannot call the updated method " + m_updated.getMethod() + " : " +
e.getMessage());
+            }
+            return;
+        }
+
+        // Else we must compute the properties.
+
         Properties props = new Properties();
         for (int i = 0; i < m_configurableProperties.size(); i++) {
             String n = ((Property) m_configurableProperties.get(i)).getName();
@@ -546,6 +576,6 @@ public class ConfigurationHandler extend
     public HandlerDescription getDescription() {
         return m_description;
     }
-    
+
 
 }

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Callback.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Callback.java?rev=1001224&r1=1001223&r2=1001224&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Callback.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Callback.java Sat Sep
25 14:50:16 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
@@ -79,6 +79,8 @@ public class Callback {
         m_manager = manager;
         if (args != null) {
             computeArguments(args);
+        } else {
+        	m_args = new String[0];
         }
     }
 
@@ -143,7 +145,7 @@ public class Callback {
                             break;
                         }
                     }
-                    if (argIndex == m_args.length) { // No mismatch detected. 
+                    if (argIndex == m_args.length) { // No mismatch detected.
                         return methods[i]; // It is the looked method.
                     }
                 }
@@ -170,7 +172,7 @@ public class Callback {
         if (m_methodObj == null) {
             throw new NoSuchMethodException(m_method);
         } else {
-            if (! m_methodObj.isAccessible()) { 
+            if (! m_methodObj.isAccessible()) {
                 // If not accessible, try to set the accessibility.
                 m_methodObj.setAccessible(true);
             }
@@ -209,7 +211,7 @@ public class Callback {
      * Invokes the method on every created objects with the specified
      * arguments.
      * @param arg the method arguments
-     * @return the result of the invocation, <code>null</code> for 
+     * @return the result of the invocation, <code>null</code> for
      * <code>void</code> method, the last result for instance containing
      * several objects.
      * @throws NoSuchMethodException if the callback method is not found
@@ -244,7 +246,7 @@ public class Callback {
      * arguments.
      * @param instance the instance on which call the method
      * @param arg the argument array
-     * @return the result of the invocation, <code>null</code> for 
+     * @return the result of the invocation, <code>null</code> for
      * <code>void</code> method
      * @throws NoSuchMethodException if the callback method is not found
      * @throws IllegalAccessException if the callback method cannot be called
@@ -265,4 +267,12 @@ public class Callback {
     public String getMethod() {
         return m_method;
     }
+
+    /**
+     * Gets the method arguments.
+     * @return the arguments.
+     */
+    public String[] getArguments() {
+    	return m_args;
+    }
 }

Modified: felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType1.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType1.java?rev=1001224&r1=1001223&r2=1001224&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType1.java
(original)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType1.java
Sat Sep 25 14:50:16 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
@@ -25,18 +25,18 @@ import org.apache.felix.ipojo.test.scena
 import org.osgi.framework.BundleContext;
 
 public class FooProviderType1 implements FooService {
-	
+
 	private int m_bar;
 	private String m_foo;
-    
+
     private BundleContext m_context;
-    
+
     private static FooProviderType1 singleton;
     private static int count = 0;
-    
+
     private int updated;
     private Dictionary lastupdated;
-    
+
     private static FooProviderType1 singleton(BundleContext bc) {
         if (singleton == null) {
             count++;
@@ -44,12 +44,12 @@ public class FooProviderType1 implements
         }
         return singleton;
     }
-    
+
     public static FooProviderType1 several(BundleContext bc) {
         count++;
         return new FooProviderType1(bc);
     }
-        
+
     public FooProviderType1(BundleContext bc) {
         if (bc ==null) {
             throw new RuntimeException("Injected bundle context null");
@@ -68,41 +68,41 @@ public class FooProviderType1 implements
             p.put("foo", m_foo);
         }
         p.put("context", m_context);
-        
+
         p.put("count", new Integer(count));
-        
+
         p.put("updated", new Integer(updated));
         if (lastupdated != null) {
             p.put("lastupdated", lastupdated);
         }
-        
-        
+
+
 		return p;
 	}
-    
+
 	public void testException() throws Exception {
         String a = "foobarbaz";
 	    throw new Exception("foo"+a);
     }
-    
+
     public void testTry() {
             String a = "foo";
             a.charAt(0);
     }
-    
+
     public void testTry2(String s) {
             String a = "foo";
             a.charAt(0);
     }
-    
+
     private void nexttry(String  s) {
         try {
             s += "foo";
         } catch(RuntimeException e) {
-            
+
         }
     }
-    
+
 	public boolean getBoolean() { return true; }
 
 	public double getDouble() { return 1.0; }
@@ -112,7 +112,7 @@ public class FooProviderType1 implements
 	public long getLong() { return 1; }
 
 	public Boolean getObject() { return new Boolean(true); }
-	
+
 	/**
 	 * Custom constructor.
 	 * @param bar
@@ -124,7 +124,7 @@ public class FooProviderType1 implements
 	    m_foo = foo;
 	    m_context = bc;
 	}
-	
+
 	public void updated(Dictionary props) {
         updated++;
         lastupdated = props;

Added: felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType2.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType2.java?rev=1001224&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType2.java
(added)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderType2.java
Sat Sep 25 14:50:16 2010
@@ -0,0 +1,114 @@
+/*
+ * 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.test.scenarios.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.configuration.service.FooService;
+import org.osgi.framework.BundleContext;
+
+public class FooProviderType2 implements FooService {
+
+	private int m_bar;
+	private String m_foo;
+
+    private BundleContext m_context;
+
+    private static int count = 0;
+
+    private int updated;
+
+
+    public FooProviderType2(BundleContext bc) {
+        if (bc ==null) {
+            throw new RuntimeException("Injected bundle context null");
+        }
+            m_context = bc;
+    }
+
+	public boolean foo() {
+		return true;
+	}
+
+	public Properties fooProps() {
+		Properties p = new Properties();
+		p.put("bar", new Integer(m_bar));
+        if(m_foo != null) {
+            p.put("foo", m_foo);
+        }
+        p.put("context", m_context);
+
+        p.put("count", new Integer(count));
+
+        p.put("updated", new Integer(updated));
+
+
+		return p;
+	}
+
+	public void testException() throws Exception {
+        String a = "foobarbaz";
+	    throw new Exception("foo"+a);
+    }
+
+    public void testTry() {
+            String a = "foo";
+            a.charAt(0);
+    }
+
+    public void testTry2(String s) {
+            String a = "foo";
+            a.charAt(0);
+    }
+
+    private void nexttry(String  s) {
+        try {
+            s += "foo";
+        } catch(RuntimeException e) {
+
+        }
+    }
+
+	public boolean getBoolean() { return true; }
+
+	public double getDouble() { return 1.0; }
+
+	public int getInt() { return 1; }
+
+	public long getLong() { return 1; }
+
+	public Boolean getObject() { return new Boolean(true); }
+
+	/**
+	 * Custom constructor.
+	 * @param bar
+	 * @param foo
+	 * @param bc
+	 */
+	public FooProviderType2(int bar, String foo, BundleContext bc) {
+	    m_bar = bar;
+	    m_foo = foo;
+	    m_context = bc;
+	}
+
+	public void updated() {
+        updated++;
+    }
+
+}

Modified: felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java?rev=1001224&r1=1001223&r2=1001224&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
(original)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
Sat Sep 25 14:50:16 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
@@ -39,6 +39,8 @@ public class ConfigurationTestSuite {
         ots.addTestSuite(UpdatedMethod.class);
         ots.addTestSuite(UpdatedMethodAndManagedServiceFactory.class);
         ots.addTestSuite(UpdatedMethodAndManagedService.class);
+        ots.addTestSuite(UpdatedNoArgMethodAndManagedService.class);
+        ots.addTestSuite(UpdatedNoArgMethodAndManagedServiceFactory.class);
         ots.addTestSuite(ArchitectureTest.class);
         return ots;
     }

Added: felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedService.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedService.java?rev=1001224&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedService.java
(added)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedService.java
Sat Sep 25 14:50:16 2010
@@ -0,0 +1,307 @@
+/*
+ * 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.test.scenarios.configuration;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.scenarios.configuration.service.FooService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+
+public class UpdatedNoArgMethodAndManagedService extends OSGiTestCase {
+
+	/**
+	 * Instance where the ManagedServicePID is provided by the component type.
+	 */
+	ComponentInstance instance1;
+	/**
+     * Instance where the ManagedServicePID is provided by the instance.
+     */
+	ComponentInstance instance2;
+
+	/**
+     * Instance without configuration.
+     */
+    ComponentInstance instance3;
+
+	public void setUp() {
+	    String type = "CONFIG-FooProviderType-4Updated2";
+        Properties p = new Properties();
+        p.put("instance.name","instance");
+        p.put("foo", "foo");
+        p.put("bar", "2");
+        p.put("baz", "baz");
+        instance1 = Utils.getComponentInstance(getContext(), type, p);
+        assertEquals("instance1 created", ComponentInstance.VALID,instance1.getState());
+
+		type = "CONFIG-FooProviderType-3Updated2";
+		Properties p1 = new Properties();
+		p1.put("instance.name","instance-2");
+		p1.put("foo", "foo");
+		p1.put("bar", "2");
+		p1.put("baz", "baz");
+		p1.put("managed.service.pid", "instance");
+		instance2 = Utils.getComponentInstance(getContext(), type, p1);
+
+		type = "CONFIG-FooProviderType-3Updated2";
+        Properties p2 = new Properties();
+        p2.put("instance.name","instance-3");
+        p2.put("managed.service.pid", "instance-3");
+        instance3 = Utils.getComponentInstance(getContext(), type, p2);
+	}
+
+	public void tearDown() {
+		instance1.dispose();
+		instance2.dispose();
+		instance3.dispose();
+		instance1 = null;
+		instance2 = null;
+		instance3 = null;
+	}
+
+	public void testStaticInstance1() {
+		ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance1.getInstanceName());
+		assertNotNull("Check FS availability", fooRef);
+		String fooP = (String) fooRef.getProperty("foo");
+		Integer barP = (Integer) fooRef.getProperty("bar");
+		String bazP = (String) fooRef.getProperty("baz");
+		assertEquals("Check foo equality -1", fooP, "foo");
+		assertEquals("Check bar equality -1", barP, new Integer(2));
+		assertEquals("Check baz equality -1", bazP, "baz");
+
+		ServiceReference msRef = Utils.getServiceReferenceByPID(getContext(), ManagedService.class.getName(),
"FooProvider-3");
+		assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+		// Configuration of baz
+		Properties conf = new Properties();
+		conf.put("baz", "zab");
+		conf.put("bar", new Integer(2));
+		conf.put("foo", "foo");
+		ManagedService ms = (ManagedService) getContext().getService(msRef);
+		try {
+			ms.updated(conf);
+		} catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+		// Re-check props
+		fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(), instance1.getInstanceName());
+		fooP = (String) fooRef.getProperty("foo");
+		barP = (Integer) fooRef.getProperty("bar");
+		bazP = (String) fooRef.getProperty("baz");
+		assertEquals("Check foo equality -2", fooP, "foo");
+		assertEquals("Check bar equality -2", barP, new Integer(2));
+		assertEquals("Check baz equality -2", bazP, "zab");
+
+		// Get Service
+		FooService fs = (FooService) context.getService(fooRef);
+		Integer updated = (Integer) fs.fooProps().get("updated");
+        assertEquals("Check updated", 1, updated.intValue());
+
+        context.ungetService(fooRef);
+		getContext().ungetService(msRef);
+	}
+
+	public void testStaticInstance2() {
+        ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        assertNotNull("Check FS availability", fooRef);
+        String fooP = (String) fooRef.getProperty("foo");
+        Integer barP = (Integer) fooRef.getProperty("bar");
+        String bazP = (String) fooRef.getProperty("baz");
+        assertEquals("Check foo equality -1", fooP, "foo");
+        assertEquals("Check bar equality -1", barP, new Integer(2));
+        assertEquals("Check baz equality -1", bazP, "baz");
+
+        ServiceReference msRef = Utils.getServiceReferenceByPID(getContext(), ManagedService.class.getName(),
"instance");
+        assertNotNull("Check ManagedService availability", msRef);
+
+
+        // Configuration of baz
+        Properties conf = new Properties();
+        conf.put("baz", "zab");
+        conf.put("bar", new Integer(2));
+        conf.put("foo", "foo");
+        ManagedService ms = (ManagedService) getContext().getService(msRef);
+        try {
+            ms.updated(conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        // Recheck props
+        fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        fooP = (String) fooRef.getProperty("foo");
+        barP = (Integer) fooRef.getProperty("bar");
+        bazP = (String) fooRef.getProperty("baz");
+        assertEquals("Check foo equality -2", fooP, "foo");
+        assertEquals("Check bar equality -2", barP, new Integer(2));
+        assertEquals("Check baz equality -2", bazP, "zab");
+
+        // Get Service
+        FooService fs = (FooService) context.getService(fooRef);
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+        conf.put("baz", "zab2");
+        conf.put("foo", "oof2");
+        conf.put("bar", new Integer(0));
+        ms = (ManagedService) getContext().getService(msRef);
+        try {
+            ms.updated(conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated -2", 2, updated.intValue());
+
+        getContext().ungetService(fooRef);
+        getContext().ungetService(msRef);
+    }
+
+	public void testDynamicInstance1() {
+    	ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance1.getInstanceName());
+    	assertNotNull("Check FS availability", fooRef);
+
+    	String fooP = (String) fooRef.getProperty("foo");
+    	Integer barP = (Integer) fooRef.getProperty("bar");
+    	String bazP = (String) fooRef.getProperty("baz");
+
+    	assertEquals("Check foo equality", fooP, "foo");
+    	assertEquals("Check bar equality", barP, new Integer(2));
+    	assertEquals("Check baz equality", bazP, "baz");
+
+    	ServiceReference msRef = Utils.getServiceReferenceByPID(getContext(), ManagedService.class.getName(),
"FooProvider-3");
+    	assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+    	// Configuration of baz
+    	Properties conf = new Properties();
+    	conf.put("baz", "zab");
+    	conf.put("foo", "oof");
+    	conf.put("bar", new Integer(0));
+    	ManagedService ms = (ManagedService) getContext().getService(msRef);
+    	try {
+    		ms.updated(conf);
+    	} catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+    	// Re-check props
+    	fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(), instance1.getInstanceName());
+    	fooP = (String) fooRef.getProperty("foo");
+    	barP = (Integer) fooRef.getProperty("bar");
+    	bazP = (String) fooRef.getProperty("baz");
+
+    	assertEquals("Check foo equality", fooP, "oof");
+    	assertEquals("Check bar equality", barP, new Integer(0));
+    	assertEquals("Check baz equality", bazP, "zab");
+
+    	// Check field value
+    	FooService fs = (FooService) getContext().getService(fooRef);
+    	Properties p = fs.fooProps();
+    	fooP = (String) p.get("foo");
+    	barP = (Integer) p.get("bar");
+
+    	assertEquals("Check foo field equality", fooP, "oof");
+    	assertEquals("Check bar field equality", barP, new Integer(0));
+
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated -1", 1, updated.intValue());
+
+        conf.put("baz", "zab2");
+        conf.put("foo", "oof2");
+        conf.put("bar", new Integer(0));
+        ms = (ManagedService) getContext().getService(msRef);
+        try {
+            ms.updated(conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated -2", 2, updated.intValue());
+
+
+    	getContext().ungetService(fooRef);
+    	getContext().ungetService(msRef);
+
+    }
+
+	public void testDynamicInstance2() {
+        ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        assertNotNull("Check FS availability", fooRef);
+
+        String fooP = (String) fooRef.getProperty("foo");
+        Integer barP = (Integer) fooRef.getProperty("bar");
+        String bazP = (String) fooRef.getProperty("baz");
+
+        assertEquals("Check foo equality", fooP, "foo");
+        assertEquals("Check bar equality", barP, new Integer(2));
+        assertEquals("Check baz equality", bazP, "baz");
+
+        ServiceReference msRef = Utils.getServiceReferenceByPID(getContext(), ManagedService.class.getName(),
"instance");
+        assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+        // Configuration of baz
+        Properties conf = new Properties();
+        conf.put("baz", "zab");
+        conf.put("foo", "oof");
+        conf.put("bar", new Integer(0));
+        ManagedService ms = (ManagedService) getContext().getService(msRef);
+        try {
+            ms.updated(conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        // Recheck props
+        fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        fooP = (String) fooRef.getProperty("foo");
+        barP = (Integer) fooRef.getProperty("bar");
+        bazP = (String) fooRef.getProperty("baz");
+
+        assertEquals("Check foo equality", fooP, "oof");
+        assertEquals("Check bar equality", barP, new Integer(0));
+        assertEquals("Check baz equality", bazP, "zab");
+
+        // Check field value
+        FooService fs = (FooService) getContext().getService(fooRef);
+        Properties p = fs.fooProps();
+        fooP = (String) p.get("foo");
+        barP = (Integer) p.get("bar");
+
+        assertEquals("Check foo field equality", fooP, "oof");
+        assertEquals("Check bar field equality", barP, new Integer(0));
+
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+        conf.put("baz", "zab2");
+        conf.put("foo", "oof2");
+        conf.put("bar", new Integer(0));
+        ms = (ManagedService) getContext().getService(msRef);
+        try {
+            ms.updated(conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated -2", 2, updated.intValue());
+
+        getContext().ungetService(fooRef);
+        getContext().ungetService(msRef);
+    }
+}

Added: felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedServiceFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedServiceFactory.java?rev=1001224&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedServiceFactory.java
(added)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/UpdatedNoArgMethodAndManagedServiceFactory.java
Sat Sep 25 14:50:16 2010
@@ -0,0 +1,300 @@
+/*
+ * 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.test.scenarios.configuration;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.scenarios.configuration.service.FooService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+
+public class UpdatedNoArgMethodAndManagedServiceFactory extends OSGiTestCase {
+
+	ComponentInstance instance, instance2;
+
+	public void setUp() {
+		String type = "CONFIG-FooProviderType-3Updated2";
+
+		Properties p1 = new Properties();
+		p1.put("instance.name","instance");
+		p1.put("foo", "foo");
+		p1.put("bar", "2");
+		p1.put("baz", "baz");
+		instance = Utils.getComponentInstance(getContext(), type, p1);
+
+		Properties p2 = new Properties();
+        p2.put("instance.name","instance2");
+
+        instance2 = Utils.getComponentInstance(getContext(), type, p2);
+	}
+
+	public void tearDown() {
+		instance.dispose();
+		instance2.dispose();
+		instance2 = null;
+		instance = null;
+	}
+
+	public void testStatic() {
+
+		ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance.getInstanceName());
+		assertNotNull("Check FS availability", fooRef);
+		String fooP = (String) fooRef.getProperty("foo");
+		Integer barP = (Integer) fooRef.getProperty("bar");
+		String bazP = (String) fooRef.getProperty("baz");
+		assertEquals("Check foo equality -1", fooP, "foo");
+		assertEquals("Check bar equality -1", barP, new Integer(2));
+		assertEquals("Check baz equality -1", bazP, "baz");
+
+		ServiceReference msRef = Utils.getServiceReferenceByName(getContext(), ManagedServiceFactory.class.getName(),
instance.getFactory().getName());
+		assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+
+		// Configuration of baz
+		Properties conf = new Properties();
+		conf.put("baz", "zab");
+		conf.put("bar", new Integer(2));
+		conf.put("foo", "foo");
+		ManagedServiceFactory ms = (ManagedServiceFactory) getContext().getService(msRef);
+		try {
+			ms.updated(instance.getInstanceName(), conf);
+		} catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+		// Recheck props
+		fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(), instance.getInstanceName());
+		fooP = (String) fooRef.getProperty("foo");
+		barP = (Integer) fooRef.getProperty("bar");
+		bazP = (String) fooRef.getProperty("baz");
+		assertEquals("Check foo equality -2", fooP, "foo");
+		assertEquals("Check bar equality -2", barP, new Integer(2));
+		assertEquals("Check baz equality -2", bazP, "zab");
+
+		 // Get Service
+        FooService fs = (FooService) context.getService(fooRef);
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+		getContext().ungetService(msRef);
+
+	}
+
+	public void testStaticNoValue() {
+        ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        assertNotNull("Check FS availability", fooRef);
+        Object fooP = fooRef.getProperty("foo");
+        Object barP = fooRef.getProperty("bar");
+        Object bazP = fooRef.getProperty("baz");
+        assertEquals("Check foo equality -1", fooP, null);
+        assertEquals("Check bar equality -1", barP, null);
+        assertEquals("Check baz equality -1", bazP, null);
+
+        ServiceReference msRef = Utils.getServiceReferenceByName(getContext(), ManagedServiceFactory.class.getName(),
instance2.getFactory().getName());
+        assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+
+        // Configuration of baz
+        Properties conf = new Properties();
+        conf.put("baz", "zab");
+        conf.put("bar", new Integer(2));
+        conf.put("foo", "foo");
+        ManagedServiceFactory ms = (ManagedServiceFactory) getContext().getService(msRef);
+        try {
+            ms.updated(instance2.getInstanceName(), conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        // Recheck props
+        fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        fooP = (String) fooRef.getProperty("foo");
+        barP = (Integer) fooRef.getProperty("bar");
+        bazP = (String) fooRef.getProperty("baz");
+        assertEquals("Check foo equality -2", fooP, "foo");
+        assertEquals("Check bar equality -2", barP, new Integer(2));
+        assertEquals("Check baz equality -2", bazP, "zab");
+
+        // Get Service
+        FooService fs = (FooService) context.getService(fooRef);
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+        getContext().ungetService(msRef);
+    }
+
+	public void testDynamic() {
+    	ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance.getInstanceName());
+    	assertNotNull("Check FS availability", fooRef);
+
+    	String fooP = (String) fooRef.getProperty("foo");
+    	Integer barP = (Integer) fooRef.getProperty("bar");
+    	String bazP = (String) fooRef.getProperty("baz");
+
+    	assertEquals("Check foo equality", fooP, "foo");
+    	assertEquals("Check bar equality", barP, new Integer(2));
+    	assertEquals("Check baz equality", bazP, "baz");
+
+    	ServiceReference msRef = Utils.getServiceReferenceByName(getContext(), ManagedServiceFactory.class.getName(),
instance.getFactory().getName());
+    	assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+    	// Configuration of baz
+    	Properties conf = new Properties();
+    	conf.put("baz", "zab");
+    	conf.put("foo", "oof");
+    	conf.put("bar", new Integer(0));
+    	ManagedServiceFactory ms = (ManagedServiceFactory) getContext().getService(msRef);
+    	try {
+    		ms.updated(instance.getInstanceName(), conf);
+    	} catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+    	// Recheck props
+    	fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(), instance.getInstanceName());
+    	fooP = (String) fooRef.getProperty("foo");
+    	barP = (Integer) fooRef.getProperty("bar");
+    	bazP = (String) fooRef.getProperty("baz");
+
+    	assertEquals("Check foo equality", fooP, "oof");
+    	assertEquals("Check bar equality", barP, new Integer(0));
+    	assertEquals("Check baz equality", bazP, "zab");
+
+    	// Check field value
+    	FooService fs = (FooService) getContext().getService(fooRef);
+    	Properties p = fs.fooProps();
+    	fooP = (String) p.get("foo");
+    	barP = (Integer) p.get("bar");
+
+    	assertEquals("Check foo field equality", fooP, "oof");
+    	assertEquals("Check bar field equality", barP, new Integer(0));
+
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+    	getContext().ungetService(fooRef);
+    	getContext().ungetService(msRef);
+    }
+
+	public void testDynamicNoValue() {
+        ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        assertNotNull("Check FS availability", fooRef);
+
+        Object fooP = fooRef.getProperty("foo");
+        Object barP = fooRef.getProperty("bar");
+        Object bazP = fooRef.getProperty("baz");
+        assertEquals("Check foo equality -1", fooP, null);
+        assertEquals("Check bar equality -1", barP, null);
+        assertEquals("Check baz equality -1", bazP, null);
+
+        ServiceReference msRef = Utils.getServiceReferenceByName(getContext(), ManagedServiceFactory.class.getName(),
instance2.getFactory().getName());
+        assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+        // Configuration of baz
+        Properties conf = new Properties();
+        conf.put("baz", "zab");
+        conf.put("foo", "oof");
+        conf.put("bar", new Integer(0));
+        ManagedServiceFactory ms = (ManagedServiceFactory) getContext().getService(msRef);
+        try {
+            ms.updated(instance2.getInstanceName(), conf);
+        } catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+        // Recheck props
+        fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance2.getInstanceName());
+        fooP = (String) fooRef.getProperty("foo");
+        barP = (Integer) fooRef.getProperty("bar");
+        bazP = (String) fooRef.getProperty("baz");
+
+        assertEquals("Check foo equality", fooP, "oof");
+        assertEquals("Check bar equality", barP, new Integer(0));
+        assertEquals("Check baz equality", bazP, "zab");
+
+        // Check field value
+        FooService fs = (FooService) getContext().getService(fooRef);
+        Properties p = fs.fooProps();
+        fooP = (String) p.get("foo");
+        barP = (Integer) p.get("bar");
+
+        assertEquals("Check foo field equality", fooP, "oof");
+        assertEquals("Check bar field equality", barP, new Integer(0));
+
+        Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+        getContext().ungetService(fooRef);
+        getContext().ungetService(msRef);
+    }
+
+
+    public void testDynamicString() {
+		ServiceReference fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(),
instance.getInstanceName());
+		assertNotNull("Check FS availability", fooRef);
+
+		String fooP = (String) fooRef.getProperty("foo");
+		Integer barP = (Integer) fooRef.getProperty("bar");
+		String bazP = (String) fooRef.getProperty("baz");
+
+		assertEquals("Check foo equality", fooP, "foo");
+		assertEquals("Check bar equality", barP, new Integer(2));
+		assertEquals("Check baz equality", bazP, "baz");
+
+		ServiceReference msRef = Utils.getServiceReferenceByName(getContext(), ManagedServiceFactory.class.getName(),
instance.getFactory().getName());
+		assertNotNull("Check ManagedServiceFactory availability", msRef);
+
+		// Configuration of baz
+		Properties conf = new Properties();
+		conf.put("baz", "zab");
+		conf.put("foo", "oof");
+		conf.put("bar", "0");
+		ManagedServiceFactory ms = (ManagedServiceFactory) getContext().getService(msRef);
+		try {
+			ms.updated(instance.getInstanceName(), conf);
+		} catch (ConfigurationException e) { fail("Configuration Exception : " + e); }
+
+		// Recheck props
+		fooRef = Utils.getServiceReferenceByName(getContext(), FooService.class.getName(), instance.getInstanceName());
+		fooP = (String) fooRef.getProperty("foo");
+		barP = (Integer) fooRef.getProperty("bar");
+		bazP = (String) fooRef.getProperty("baz");
+
+		assertEquals("Check foo equality", fooP, "oof");
+		assertEquals("Check bar equality", barP, new Integer(0));
+		assertEquals("Check baz equality", bazP, "zab");
+
+		// Check field value
+		FooService fs = (FooService) getContext().getService(fooRef);
+		Properties p = fs.fooProps();
+		fooP = (String) p.get("foo");
+		barP = (Integer) p.get("bar");
+
+		assertEquals("Check foo field equality", fooP, "oof");
+		assertEquals("Check bar field equality", barP, new Integer(0));
+
+		Integer updated = (Integer) fs.fooProps().get("updated");
+
+        assertEquals("Check updated", 1, updated.intValue());
+
+		getContext().ungetService(fooRef);
+		getContext().ungetService(msRef);
+	}
+
+}

Modified: felix/trunk/ipojo/tests/core/configuration/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/configuration/src/main/resources/metadata.xml?rev=1001224&r1=1001223&r2=1001224&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/configuration/src/main/resources/metadata.xml (original)
+++ felix/trunk/ipojo/tests/core/configuration/src/main/resources/metadata.xml Sat Sep 25
14:50:16 2010
@@ -289,6 +289,19 @@
 			<property name="bar" field="m_bar" />
 		</properties>
 	</component>
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType2"
+		name="CONFIG-FooProviderType-4Updated2" architecture="true">
+		<provides>
+			<property name="foo" field="m_foo" />
+			<property name="bar" field="m_bar" />
+			<property name="baz" type="java.lang.String" />
+		</provides>
+		<properties propagation="true" pid="FooProvider-3" updated="updated">
+			<property name="foo" field="m_foo" />
+			<property name="bar" field="m_bar" />
+		</properties>
+	</component>
 
 	<component
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
@@ -303,5 +316,18 @@
 			<property name="bar" field="m_bar" />
 		</properties>
 	</component>
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType2"
+		name="CONFIG-FooProviderType-3Updated2" architecture="true">
+		<provides>
+			<property name="foo" field="m_foo" />
+			<property name="bar" field="m_bar" />
+			<property name="baz" type="java.lang.String" />
+		</provides>
+		<properties propagation="true" updated="updated">
+			<property name="foo" field="m_foo" />
+			<property name="bar" field="m_bar" />
+		</properties>
+	</component>
 
 </ipojo>



Mime
View raw message