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 2008/11/14 12:06:00 UTC

svn commit: r713976 [3/3] - in /felix/trunk/ipojo: annotations/src/main/java/org/apache/felix/ipojo/annotations/ composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ composite/src/main/resources/ core/src/main/java/org/apache/feli...

Modified: felix/trunk/ipojo/tests/core/factories/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/factories/src/main/resources/metadata.xml?rev=713976&r1=713975&r2=713976&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/factories/src/main/resources/metadata.xml (original)
+++ felix/trunk/ipojo/tests/core/factories/src/main/resources/metadata.xml Fri Nov 14 03:05:57 2008
@@ -1,8 +1,5 @@
-<ipojo
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="org.apache.felix.ipojo http://people.apache.org/~clement/ipojo/schemas/core.xsd"
-    xmlns="org.apache.felix.ipojo"
-    >
+<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="org.apache.felix.ipojo http://people.apache.org/~clement/ipojo/schemas/core.xsd" xmlns="org.apache.felix.ipojo">
 	<!-- Simple provider  -->
 	<component
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
@@ -22,12 +19,25 @@
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn"
 		name="Factories-FooProviderType-Dyn" architecture="true">
 		<provides>
-			<property name="int" field="intProp" value="2" />
-			<property name="boolean" field="boolProp" value="false" />
-			<property name="string" field="strProp" value="foo" />
+			<property name="int" field="intProp" value="2" mandatory="true"/>
+			<property name="boolean" field="boolProp" value="false" mandatory="true"/>
+			<property name="string" field="strProp" value="foo" mandatory="true"/>
 			<property name="strAProp" field="strAProp"
-				value="{foo, bar}" />
-			<property name="intAProp" field="intAProp" value="{ 1,2,3}" />
+				value="{foo, bar}" mandatory="true"/>
+			<property name="intAProp" field="intAProp" value="{ 1,2,3}" mandatory="true"/>
+		</provides>
+	</component>
+	
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn"
+		name="Factories-FooProviderType-Dynopt" architecture="true">
+		<provides>
+			<property name="int" field="intProp" value="2"/>
+			<property name="boolean" field="boolProp" value="false"/>
+			<property name="string" field="strProp" value="foo"/>
+			<property name="strAProp" field="strAProp"
+				value="{foo, bar}"/>
+			<property name="intAProp" field="intAProp" value="{ 1,2,3}"/>
 		</provides>
 	</component>
 	
@@ -35,12 +45,25 @@
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
 		name="Factories-FooProviderType-2" architecture="true">
 		<provides>
-			<property name="int" type="int" value="2" />
-			<property name="long" type="long" value="40" />
-			<property name="string" type="java.lang.String" value="foo" />
+			<property name="int" type="int" value="2" mandatory="true" />
+			<property name="long" type="long" value="40" mandatory="true"/>
+			<property name="string" type="java.lang.String" value="foo" mandatory="true"/>
+			<property name="strAProp" type="java.lang.String[]"
+				value="{foo, bar}" mandatory="true" />
+			<property name="intAProp" type="int[]" value="{1,2,3}" mandatory="true"/>
+		</provides>
+	</component>
+	
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+		name="Factories-FooProviderType-2opt" architecture="true">
+		<provides>
+			<property name="int" type="int" value="2"/>
+			<property name="long" type="long" value="40"/>
+			<property name="string" type="java.lang.String" value="foo"/>
 			<property name="strAProp" type="java.lang.String[]"
 				value="{foo, bar}" />
-			<property name="intAProp" type="int[]" value="{1,2,3}" />
+			<property name="intAProp" type="int[]" value="{1,2,3}"/>
 		</provides>
 	</component>
 	
@@ -48,12 +71,25 @@
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn2"
 		name="Factories-FooProviderType-Dyn2" architecture="true">
 		<provides>
+			<property name="int" field="intProp" value="4" mandatory="true"/>
+			<property name="boolean" field="boolProp" mandatory="true"/>
+			<property name="string" field="strProp" mandatory="true"/>
+			<property name="strAProp" field="strAProp" mandatory="true"/>
+			<property name="intAProp" field="intAProp"
+				value="{1, 2,3 }" mandatory="true"/>
+		</provides>
+	</component>
+	
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn2"
+		name="Factories-FooProviderType-Dyn2opt" architecture="true">
+		<provides>
 			<property name="int" field="intProp" value="4" />
-			<property name="boolean" field="boolProp" />
-			<property name="string" field="strProp" />
-			<property name="strAProp" field="strAProp" />
+			<property name="boolean" field="boolProp"/>
+			<property name="string" field="strProp"/>
+			<property name="strAProp" field="strAProp"/>
 			<property name="intAProp" field="intAProp"
-				value="{1, 2,3 }" />
+				value="{1, 2,3 }"/>
 		</provides>
 	</component>
 	
@@ -61,13 +97,27 @@
 		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
 		name="Factories-FooProviderType-3" architecture="true">
 		<provides>
-			<property name="foo" field="m_foo" />
-			<property name="bar" field="m_bar" />
-			<property name="baz" type="java.lang.String" />
+			<property name="foo" field="m_foo" mandatory="true"/>
+			<property name="bar" field="m_bar" mandatory="true"/>
+			<property name="baz" type="java.lang.String" mandatory="true"/>
+		</provides>
+		<properties propagation="true">
+			<property name="foo" field="m_foo" mandatory="true"/>
+			<property name="bar" field="m_bar" mandatory="true"/>
+		</properties>
+	</component>
+	
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+		name="Factories-FooProviderType-3opt" 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">
-			<property name="foo" field="m_foo" />
-			<property name="bar" field="m_bar" />
+			<property name="foo" field="m_foo"/>
+			<property name="bar" field="m_bar"/>
 		</properties>
 	</component>
 	

Propchange: felix/trunk/ipojo/tests/core/service-dependency-comparator/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Nov 14 03:05:57 2008
@@ -0,0 +1,4 @@
+target
+.classpath
+.project
+.settings

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/pom.xml?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/pom.xml (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/pom.xml Fri Nov 14 03:05:57 2008
@@ -0,0 +1,104 @@
+<!--
+	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.
+-->
+<project>
+	<modelVersion>4.0.0</modelVersion>
+	<packaging>bundle</packaging>
+	<name>iPOJO Service Dependency (Binding Policy) Test Suite</name>
+	<artifactId>tests.core.service.dependency.bindingpolicy</artifactId>
+	<groupId>ipojo.tests</groupId>
+	<version>1.1.0-SNAPSHOT</version>
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.ipojo</artifactId>
+			<version>1.1.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
+			<version>1.1.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.osgi.core</artifactId>
+			<version>1.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>3.8.1</version>
+		</dependency>
+		<dependency>
+			<groupId>ipojo.examples</groupId>
+			<artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
+			<version>1.1.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>ipojo.tests</groupId>
+			<artifactId>tests.core.service.dependency</artifactId>
+			<version>1.1.0-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>1.4.3</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>
+							${pom.artifactId}
+						</Bundle-SymbolicName>
+						<Private-Package>
+							org.apache.felix.ipojo.test.scenarios.service.dependency.comparator
+						</Private-Package>
+						<Test-Suite>
+							org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.ComparatorTestCase						
+						</Test-Suite>
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-ipojo-plugin</artifactId>
+				<version>1.1.0-SNAPSHOT</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>ipojo-bundle</goal>
+						</goals>
+						<configuration>
+							<ignoreAnnotations>true</ignoreAnnotations>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.4</source>
+					<target>1.4</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/ComparatorTestCase.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/ComparatorTestCase.java?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/ComparatorTestCase.java (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/ComparatorTestCase.java Fri Nov 14 03:05:57 2008
@@ -0,0 +1,141 @@
+package org.apache.felix.ipojo.test.scenarios.service.dependency.comparator;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.CheckService;
+import org.osgi.framework.ServiceReference;
+
+public class ComparatorTestCase extends OSGiTestCase {
+    
+    String gradeFactory="COMPARATOR-gradedFooProvider";
+    String dynamic = "COMPARATOR-DynamicCheckService";
+    String dynamicpriority = "COMPARATOR-DynamicPriorityCheckService";
+    
+    
+    IPOJOHelper helper;
+    ComponentInstance dynInstance;
+    ComponentInstance dpInstance;
+    
+    public void setUp() {
+        helper = new IPOJOHelper(this);
+        dynInstance = helper.createComponentInstance(dynamic, (Properties) null);
+        dpInstance = helper.createComponentInstance(dynamicpriority, (Properties) null);
+    }
+    
+    public void tearDown() {
+        dynInstance.dispose();
+       dpInstance.dispose();
+    }
+    
+    public void testDynamic() {
+        ComponentInstance grade1 = createGrade(1);
+        ComponentInstance grade2 = createGrade(2);
+        
+        ServiceReference ref = getServiceReferenceByName(CheckService.class.getName(), dynInstance.getInstanceName());
+        assertNotNull("CS availability", ref);
+        
+        CheckService cs = (CheckService) context.getService(ref);
+        Properties result = cs.getProps();
+        int fsGrade = ((Integer) result.get("fs")).intValue();
+        int fs2Grade = ((Integer) result.get("fs2")).intValue();
+        int[] fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -1", 2, fsGrade);
+        assertEquals("fs2 grade -1", 2, fs2Grade);
+        assertEquals("fss grade size -1", 2, fssGrades.length);
+        assertEquals("fss grade[0] -1", 2, fssGrades[0]);
+        assertEquals("fss grade[1] -1", 1, fssGrades[1]);
+        
+        ComponentInstance grade3 = createGrade(3);
+        result = cs.getProps();
+        fsGrade = ((Integer) result.get("fs")).intValue();
+        fs2Grade = ((Integer) result.get("fs2")).intValue();
+        fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -2", 2, fsGrade);
+        assertEquals("fs2 grade -2", 2, fs2Grade);
+        assertEquals("fss grade size -2", 3, fssGrades.length);
+        assertEquals("fss grade[0] -2", 2, fssGrades[0]);
+        assertEquals("fss grade[1] -2", 1, fssGrades[1]);
+        assertEquals("fss grade[2] -2", 3, fssGrades[2]);
+
+        grade2.stop();
+        
+        result = cs.getProps();
+        fsGrade = ((Integer) result.get("fs")).intValue();
+        fs2Grade = ((Integer) result.get("fs2")).intValue();
+        fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -3", 3, fsGrade);
+        assertEquals("fs2 grade -3", 3, fs2Grade);
+        assertEquals("fss grade size -3", 2, fssGrades.length);
+        assertEquals("fss grade[0] -3", 1, fssGrades[0]);
+        assertEquals("fss grade[1] -3", 3, fssGrades[1]);        
+        
+        context.ungetService(ref);
+        grade1.dispose();
+        grade2.dispose();
+        grade3.dispose();
+    }
+    
+    public void testDynamicPriority() {
+        ComponentInstance grade1 = createGrade(1);
+        ComponentInstance grade2 = createGrade(2);
+        
+        ServiceReference ref = getServiceReferenceByName(CheckService.class.getName(), dpInstance.getInstanceName());
+        assertNotNull("CS availability", ref);
+        
+        CheckService cs = (CheckService) context.getService(ref);
+        Properties result = cs.getProps();
+        int fsGrade = ((Integer) result.get("fs")).intValue();
+        int fs2Grade = ((Integer) result.get("fs2")).intValue();
+        int[] fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -1", 2, fsGrade);
+        assertEquals("fs2 grade -1", 2, fs2Grade);
+        assertEquals("fss grade size -1", 2, fssGrades.length);
+        assertEquals("fss grade[0] -1", 2, fssGrades[0]);
+        assertEquals("fss grade[1] -1", 1, fssGrades[1]);
+        
+        ComponentInstance grade3 = createGrade(3);
+        result = cs.getProps();
+        fsGrade = ((Integer) result.get("fs")).intValue();
+        fs2Grade = ((Integer) result.get("fs2")).intValue();
+        fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -2", 3, fsGrade);
+        assertEquals("fs2 grade -2", 3, fs2Grade);
+        assertEquals("fss grade size -2", 3, fssGrades.length);
+        assertEquals("fss grade[0] -2", 3, fssGrades[0]);
+        assertEquals("fss grade[1] -2", 2, fssGrades[1]);
+        assertEquals("fss grade[2] -2", 1, fssGrades[2]);
+
+        grade2.stop();
+        
+        result = cs.getProps();
+        fsGrade = ((Integer) result.get("fs")).intValue();
+        fs2Grade = ((Integer) result.get("fs2")).intValue();
+        fssGrades = (int[]) result.get("fss");
+        
+        assertEquals("fs grade -3", 3, fsGrade);
+        assertEquals("fs2 grade -3", 3, fs2Grade);
+        assertEquals("fss grade size -3", 2, fssGrades.length);
+        assertEquals("fss grade[0] -3", 3, fssGrades[0]);
+        assertEquals("fss grade[1] -3", 1, fssGrades[1]);        
+        
+        context.ungetService(ref);
+        grade1.dispose();
+        grade2.dispose();
+        grade3.dispose();
+    }
+    
+    private ComponentInstance createGrade(int grade) {
+        Properties props = new Properties();
+        props.put("grade", new Integer(grade));
+        return helper.createComponentInstance(gradeFactory, props);
+    }
+
+}

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/CheckServiceProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/CheckServiceProvider.java?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/CheckServiceProvider.java (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/CheckServiceProvider.java Fri Nov 14 03:05:57 2008
@@ -0,0 +1,60 @@
+/* 
+ * 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.service.dependency.comparator.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.FooService;
+
+public class CheckServiceProvider implements CheckService {
+    
+	FooService fs;
+	
+	FooService fs2;
+	
+	FooService[] fss;
+	
+
+	public boolean check() {    
+		return fs.foo();
+	}
+
+	public Properties getProps() {
+		Properties props = new Properties();
+		props.put("fs", new Integer(fs.getInt()));
+		props.put("fs2", new Integer(fs2.getInt()));
+		
+		int[] grades = new int[fss.length];
+		props.put("fss", grades);
+		
+		return props;
+	}
+	
+	void bind(FooService svc) {
+		fs2 = svc;
+	}
+	
+	void unbind(FooService svc) {
+        fs2 = null;
+    }
+	
+	
+
+}

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradeComparator.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradeComparator.java?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradeComparator.java (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradeComparator.java Fri Nov 14 03:05:57 2008
@@ -0,0 +1,31 @@
+package org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component;
+
+import java.util.Comparator;
+
+import org.osgi.framework.ServiceReference;
+
+public class GradeComparator implements Comparator {
+
+    public int compare(Object arg0, Object arg1) {
+        ServiceReference ref0 = null;
+        ServiceReference ref1 = null;
+        Integer grade0 = null;
+        Integer grade1 = null;
+        if (arg0 instanceof ServiceReference) {
+            ref0 = (ServiceReference)  arg0;
+            grade0 = (Integer) ref0.getProperty("grade");
+        }
+        if (arg1 instanceof ServiceReference) {
+            ref1 = (ServiceReference) arg1;
+            grade1 = (Integer) ref1.getProperty("grade");
+        }
+        
+        if (ref0 != null && ref1 != null
+                && grade0 != null && grade1 != null) {
+            return grade1.compareTo(grade0); // Best grade first.
+        } else {
+            return 0; // Equals
+        }
+    }
+
+}

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradedFooServiceProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradedFooServiceProvider.java?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradedFooServiceProvider.java (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/comparator/component/GradedFooServiceProvider.java Fri Nov 14 03:05:57 2008
@@ -0,0 +1,40 @@
+package org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.FooService;
+
+public class GradedFooServiceProvider implements FooService {
+    
+    
+    private int grade;
+
+    public boolean foo() {
+        return grade > 0;
+    }
+
+    public Properties fooProps() {
+        return null;
+    }
+
+    public boolean getBoolean() {
+        return false;
+    }
+
+    public double getDouble() {
+        return 0;
+    }
+
+    public int getInt() {
+        return grade;
+    }
+
+    public long getLong() {
+        return 0;
+    }
+
+    public Boolean getObject() {
+        return null;
+    }
+
+}

Added: felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/resources/metadata.xml?rev=713976&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/resources/metadata.xml (added)
+++ felix/trunk/ipojo/tests/core/service-dependency-comparator/src/main/resources/metadata.xml Fri Nov 14 03:05:57 2008
@@ -0,0 +1,36 @@
+<ipojo 
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="org.apache.felix.ipojo http://people.apache.org/~clement/ipojo/schemas/core.xsd"
+    xmlns="org.apache.felix.ipojo"
+>
+	<component classname="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradedFooServiceProvider"
+		name="COMPARATOR-gradedFooProvider">
+		<provides>
+			<property field="grade"/>
+		</provides>
+	</component>
+	
+	
+	<component classname="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.CheckServiceProvider"
+		name="COMPARATOR-DynamicCheckService">
+		<provides/>
+		<requires field="fs" comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator"/>
+		<requires field="fss" comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator"/>
+		<requires comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator">
+			<callback type="bind" method="bind"/>
+			<callback type="unbind" method="unbind"/>
+		</requires>
+	</component>
+	
+	<component classname="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.CheckServiceProvider"
+		name="COMPARATOR-DynamicPriorityCheckService">
+		<provides/>
+		<requires policy="dynamic-priority" field="fs" comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator"/>
+		<requires policy="dynamic-priority" field="fss" comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator"/>
+		<requires policy="dynamic-priority" comparator="org.apache.felix.ipojo.test.scenarios.service.dependency.comparator.component.GradeComparator">
+			<callback type="bind" method="bind"/>
+			<callback type="unbind" method="unbind"/>
+		</requires>
+	</component>
+	
+</ipojo>

Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicProps.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicProps.java?rev=713976&r1=713975&r2=713976&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicProps.java (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicProps.java Fri Nov 14 03:05:57 2008
@@ -31,6 +31,7 @@
 	ComponentInstance fooProvider1;
 	ComponentInstance fooProvider2;
 	ComponentInstance fooProvider3;
+	ComponentInstance fooProvider4;
 
 	public void setUp() {
 		String type = "PS-FooProviderType-Dyn";
@@ -58,6 +59,10 @@
 		p3.put("intAProp", new int[0]);
 		fooProvider3 = Utils.getComponentInstance(context, type2, p3);
 		
+        Properties p4 = new Properties();
+        p4.put("instance.name","FooProvider-4");
+        fooProvider4 = Utils.getComponentInstance(context, type2, p4);
+		
 	}
 	
 	public void tearDown() {
@@ -67,6 +72,8 @@
 		fooProvider2 = null;
 		fooProvider3.dispose();
 		fooProvider3 = null;
+		fooProvider4.dispose();
+		fooProvider4 = null;
 	}
 	
 	public void testProperties1() {
@@ -228,4 +235,52 @@
 
 	}
 
+    public void testProperties4() {
+    	ServiceReference sr = Utils.getServiceReferenceByName(context, FooService.class.getName(), "FooProvider-4");
+    	assertNotNull("Check the availability of the FS service", sr);
+    	
+    	// Check service properties
+    	Integer intProp = (Integer) sr.getProperty("int");
+    	Object boolProp = sr.getProperty("boolean");
+    	Object strProp = sr.getProperty("string");
+    	Object strAProp = sr.getProperty("strAProp");
+    	int[] intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(4)); // Set by the component type.
+    	assertEquals("Check boolProp equality", boolProp, null);
+    	assertEquals("Check strProp equality", strProp, null);
+    	assertNull("Check strAProp  nullity", strAProp);
+    	assertNotNull("Check intAProp not nullity", intAProp); // Set by the component type.
+    	assertNotNull("Check intAProp not nullity", intAProp);
+        int[] v2 = new int[] {1, 2, 3};
+        for (int i = 0; i < intAProp.length; i++) {
+            if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality"); }
+        }
+    	
+    	// Invoke
+    	FooService fs = (FooService) context.getService(sr);
+    	assertTrue("invoke fs", fs.foo());
+    	
+    	// Re-check the property (change)
+    	intProp = (Integer) sr.getProperty("int");
+    	boolProp = (Boolean) sr.getProperty("boolean");
+    	strProp = (String) sr.getProperty("string");
+    	strAProp = (String[]) sr.getProperty("strAProp");
+    	intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(2));
+    	assertEquals("Check longProp equality", boolProp, new Boolean(true));
+    	assertEquals("Check strProp equality", strProp, new String("foo"));
+    	assertNotNull("Check strAProp not nullity", strAProp);
+    	String[] v = new String[] {"foo", "bar"};
+    	for (int i = 0; i < ((String[]) strAProp).length; i++) {
+    		if(! ((String[]) strAProp)[i].equals(v[i])) { fail("Check the strAProp Equality"); }
+    	}
+    	assertNull("Check intAProp hidding (no value)", intAProp);
+    	
+    	fs = null;
+    	context.ungetService(sr);	
+    
+    }
+
 }

Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicPropsReconfiguration.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicPropsReconfiguration.java?rev=713976&r1=713975&r2=713976&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicPropsReconfiguration.java (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/DynamicPropsReconfiguration.java Fri Nov 14 03:05:57 2008
@@ -30,7 +30,7 @@
 import org.osgi.service.cm.ManagedServiceFactory;
 
 public class DynamicPropsReconfiguration extends OSGiTestCase {
-	ComponentInstance fooProvider3;
+	ComponentInstance fooProvider3, fooProvider4;
 	
 	public void setUp() {		
 		String type2 = "PS-FooProviderType-Dyn2";
@@ -42,11 +42,17 @@
 		p3.put("strAProp", new String[0]);
 		p3.put("intAProp", new int[0]);
 		fooProvider3 = Utils.getComponentInstance(context, type2, p3);
+		
+		Properties p4 = new Properties();
+        p4.put("instance.name","FooProvider-4");
+        fooProvider4 = Utils.getComponentInstance(context, type2, p4);
 	}
 	
 	public void tearDown() {
 		fooProvider3.dispose();
 		fooProvider3 = null;
+	    fooProvider4.dispose();
+	    fooProvider4 = null;
 	}
 	
 	public void testFactoryReconf() {
@@ -572,6 +578,134 @@
     	fs = null;
     	context.ungetService(sr);	
     }
-	
+
+    public void testFactoryReconfNoValue() {
+    	ServiceReference sr = Utils.getServiceReferenceByName(context, FooService.class.getName(), "FooProvider-4");
+    	assertNotNull("Check the availability of the FS service", sr);
+    	
+    	// Check service properties
+    	Integer intProp = (Integer) sr.getProperty("int");
+    	Object boolProp = sr.getProperty("boolean");
+    	Object strProp = sr.getProperty("string");
+    	Object strAProp = sr.getProperty("strAProp");
+    	int[] intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(4));
+    	assertEquals("Check longProp equality", boolProp, null);
+    	assertEquals("Check strProp equality", strProp, null);
+    	assertNull("Check strAProp nullity", strAProp);
+    	
+    	assertNotNull("Check intAProp not nullity", intAProp);
+        int[] v2 = new int[] {1, 2, 3};
+        for (int i = 0; i < intAProp.length; i++) {
+            if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality"); }
+        }
+    	
+    	// Reconfiguration
+    	ServiceReference fact_ref = Utils.getServiceReferenceByName(context, Factory.class.getName() , "PS-FooProviderType-Dyn2");
+    	Factory fact = (Factory) context.getService(fact_ref);
+    	Properties p3 = new Properties();
+    	p3.put("instance.name","FooProvider-4");
+    	p3.put("int", new Integer(1));
+    	p3.put("boolean", new Boolean(true));
+    	p3.put("string", new String("foo"));
+    	p3.put("strAProp", new String[] {"foo", "bar", "baz"});
+    	p3.put("intAProp", new int[] { 1, 2, 3});
+    	try {
+    		fact.reconfigure(p3);
+    	} catch(Exception e) {
+    		fail("Unable to reconfigure the instance with : " + p3);
+    	}
+    	
+    	sr = Utils.getServiceReferenceByName(context, FooService.class.getName(), "FooProvider-4");
+    	assertNotNull("Check the availability of the FS service", sr);
+    	
+    	// Check service properties
+    	intProp = (Integer) sr.getProperty("int");
+    	boolProp = (Boolean) sr.getProperty("boolean");
+    	strProp = (String) sr.getProperty("string");
+    	strAProp = (String[]) sr.getProperty("strAProp");
+    	intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(1));
+    	assertEquals("Check longProp equality", boolProp, new Boolean(true));
+    	assertEquals("Check strProp equality", strProp, new String("foo"));
+    	assertNotNull("Check strAProp not nullity", strAProp);
+    	String[] v = new String[] {"foo", "bar", "baz"};
+    	for (int i = 0; i < ((String[]) strAProp).length; i++) {
+    		if(! ((String[])strAProp)[i].equals(v[i])) { fail("Check the strAProp Equality"); }
+    	}
+    	assertNotNull("Check intAProp not nullity", intAProp);
+    	v2 = new int[] { 1, 2, 3};
+    	for (int i = 0; i < intAProp.length; i++) {
+    		if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality"); }
+    	}	
+    	
+    	// Invoke
+    	FooService fs = (FooService) context.getService(sr);
+    	assertTrue("invoke fs", fs.foo());
+    	
+    	// Re-check the property (change)
+    	intProp = (Integer) sr.getProperty("int");
+    	boolProp = (Boolean) sr.getProperty("boolean");
+    	strProp = (String) sr.getProperty("string");
+    	strAProp = (String[]) sr.getProperty("strAProp");
+    	intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(2));
+    	assertEquals("Check longProp equality", boolProp, new Boolean(true));
+    	assertEquals("Check strProp equality", strProp, new String("foo"));
+    	assertNotNull("Check strAProp not nullity", strAProp);
+    	v = new String[] {"foo", "bar"};
+    	for (int i = 0; i < ((String[]) strAProp).length; i++) {
+    		if(!((String[]) strAProp)[i].equals(v[i])) { fail("Check the strAProp Equality"); }
+    	}
+    	assertNull("Check intAProp hidding (no value)", intAProp);
+    	
+    	//	Reconfiguration
+    	fact_ref = Utils.getServiceReferenceByName(context, Factory.class.getName() , "PS-FooProviderType-Dyn2");
+    	fact = (Factory) context.getService(fact_ref);
+    	p3 = new Properties();
+    	p3.put("instance.name","FooProvider-3");
+    	p3.put("int", new Integer(1));
+    	p3.put("boolean", new Boolean(true));
+    	p3.put("string", new String("foo"));
+    	p3.put("strAProp", new String[] {"foo", "bar", "baz"});
+    	p3.put("intAProp", new int[] { 1, 2, 3});
+    	try {
+    		fact.reconfigure(p3);
+    	} catch(Exception e) {
+    		fail("Unable to reconfigure the instance with : " + p3);
+    	}
+    	
+    	sr = Utils.getServiceReferenceByName(context, FooService.class.getName(), "FooProvider-3");
+    	assertNotNull("Check the availability of the FS service", sr);
+    	
+    	// Check service properties
+    	intProp = (Integer) sr.getProperty("int");
+    	boolProp = (Boolean) sr.getProperty("boolean");
+    	strProp = (String) sr.getProperty("string");
+    	strAProp = (String[]) sr.getProperty("strAProp");
+    	intAProp = (int[]) sr.getProperty("intAProp");
+    	
+    	assertEquals("Check intProp equality", intProp, new Integer(1));
+    	assertEquals("Check longProp equality", boolProp, new Boolean(true));
+    	assertEquals("Check strProp equality", strProp, new String("foo"));
+    	assertNotNull("Check strAProp not nullity", strAProp);
+    	v = new String[] {"foo", "bar", "baz"};
+    	for (int i = 0; i < ((String[])strAProp).length; i++) {
+    		if(!((String[]) strAProp)[i].equals(v[i])) { fail("Check the strAProp Equality"); }
+    	}
+    	assertNotNull("Check intAProp not nullity", intAProp);
+    	v2 = new int[] { 1, 2, 3};
+    	for (int i = 0; i < intAProp.length; i++) {
+    		if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality"); }
+    	}	
+    	
+    	fact = null;
+    	context.ungetService(fact_ref);
+    	fs = null;
+    	context.ungetService(sr);	
+    }
 
 }

Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceArchitectureTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceArchitectureTest.java?rev=713976&r1=713975&r2=713976&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceArchitectureTest.java (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceArchitectureTest.java Fri Nov 14 03:05:57 2008
@@ -195,5 +195,58 @@
 		
 		ci.dispose();
 	}
+
+    public void testPropsNoValue() {
+    	String factName = "PS-FooProviderType-3";
+    	String compName = "FooProvider";
+    	
+    	// Get the factory to create a component instance
+    	Factory fact = Utils.getFactoryByName(context, factName);
+    	assertNotNull("Cannot find the factory FooProvider", fact);
+    	
+    	Properties props = new Properties();
+    	props.put("instance.name",compName);
+    	ComponentInstance ci = null;
+    	try {
+    		ci = fact.createComponentInstance(props);
+    	} catch (Exception e) { fail(e.getMessage()); }
+    
+    	ServiceReference arch_ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), compName);
+    	assertNotNull("Architecture not available", arch_ref);
+    
+    	Architecture arch = (Architecture) context.getService(arch_ref);
+    	InstanceDescription id = arch.getInstanceDescription();
+    	
+    	assertEquals("Check component instance name (" + id.getName() + ")", id.getName(), compName);
+    	assertEquals("Check component type implementation class", id.getComponentDescription().getClassName(), "org.apache.felix.ipojo.test.scenarios.component.FooProviderType1");
+    	
+    	HandlerDescription[] handlers = id.getHandlers();
+    	assertEquals("Number of handlers", handlers.length, 3);
+    	
+    	//Look for the ProvidedService Handler
+    	ProvidedServiceHandlerDescription pshd = null;
+    	for(int i = 0; i < handlers.length; i++) {
+    		if(handlers[i].getHandlerName().equals("org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler")) {
+    			pshd = (ProvidedServiceHandlerDescription) handlers[i];
+    		}
+    	}
+    	
+    	assertNotNull("Check ProvidedServiceHandlerDescription", pshd);
+    	ProvidedServiceDescription[] ps = pshd.getProvidedServices();
+    	
+    	assertEquals("Check ProvidedService number", ps.length, 1);
+    	assertEquals("Check Provided Service Specs - 1", ps[0].getServiceSpecification().length, 1);
+    	assertEquals("Check Provided Service Specs - 2", ps[0].getServiceSpecification()[0], FooService.class.getName());
+    	assertEquals("Check Provided Service availability", ps[0].getState(), ProvidedServiceDescription.REGISTERED);
+    
+    	Properties prop = ps[0].getProperties();
+    	assertNotNull("Check Props", prop);
+    	assertEquals("Check service properties number (#" + prop + "?=5)" , prop.size(), 2);
+    	assertEquals("Check instance.name property", prop.getProperty("instance.name"), compName);
+    	assertEquals("Check factory.name property", prop.getProperty("factory.name"), factName);
+
+    	
+    	ci.dispose();
+    }
 	
 }