You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/04/18 02:07:19 UTC
svn commit: r766183 - in /geronimo/sandbox/blueprint:
org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/
org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/
org.apache.felix.blueprint/src/test/resources/ sampl...
Author: gawor
Date: Sat Apr 18 00:07:19 2009
New Revision: 766183
URL: http://svn.apache.org/viewvc?rev=766183&view=rev
Log:
with conversion delay we now know the expected type to convert to without explicitly specifying it
Added:
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java (with props)
Modified:
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/Instanciator.java
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/WiringTest.java
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-wiring.xml
geronimo/sandbox/blueprint/sample/src/main/resources/OSGI-INF/blueprint/config.xml
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/Instanciator.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/Instanciator.java?rev=766183&r1=766182&r2=766183&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/Instanciator.java (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/Instanciator.java Sat Apr 18 00:07:19 2009
@@ -18,42 +18,40 @@
*/
package org.apache.felix.blueprint.context;
-import java.lang.reflect.Type;
-import java.util.Set;
-import java.util.Collection;
import java.util.ArrayList;
-import java.util.List;
-import java.util.HashSet;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.felix.blueprint.namespace.ComponentDefinitionRegistryImpl;
-import org.apache.xbean.recipe.AbstractRecipe;
import org.apache.xbean.recipe.ArrayRecipe;
-import org.apache.xbean.recipe.Option;
-import org.apache.xbean.recipe.Repository;
-import org.apache.xbean.recipe.DefaultRepository;
-import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.CollectionRecipe;
-import org.apache.xbean.recipe.MapRecipe;
import org.apache.xbean.recipe.ConstructionException;
-import org.apache.xbean.recipe.ReferenceRecipe;
+import org.apache.xbean.recipe.DefaultRepository;
+import org.apache.xbean.recipe.MapRecipe;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.apache.xbean.recipe.Option;
import org.apache.xbean.recipe.Recipe;
-import org.osgi.framework.Bundle;
+import org.apache.xbean.recipe.ReferenceRecipe;
+import org.apache.xbean.recipe.Repository;
+import org.osgi.service.blueprint.convert.ConversionService;
+import org.osgi.service.blueprint.reflect.ArrayValue;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.ComponentValue;
+import org.osgi.service.blueprint.reflect.ListValue;
import org.osgi.service.blueprint.reflect.LocalComponentMetadata;
-import org.osgi.service.blueprint.reflect.PropertyInjectionMetadata;
-import org.osgi.service.blueprint.reflect.Value;
+import org.osgi.service.blueprint.reflect.MapValue;
import org.osgi.service.blueprint.reflect.NullValue;
-import org.osgi.service.blueprint.reflect.TypedStringValue;
+import org.osgi.service.blueprint.reflect.PropertiesValue;
+import org.osgi.service.blueprint.reflect.PropertyInjectionMetadata;
+import org.osgi.service.blueprint.reflect.ReferenceNameValue;
import org.osgi.service.blueprint.reflect.ReferenceValue;
-import org.osgi.service.blueprint.reflect.ListValue;
import org.osgi.service.blueprint.reflect.SetValue;
-import org.osgi.service.blueprint.reflect.MapValue;
-import org.osgi.service.blueprint.reflect.ComponentValue;
-import org.osgi.service.blueprint.reflect.ArrayValue;
-import org.osgi.service.blueprint.reflect.ReferenceNameValue;
-import org.osgi.service.blueprint.reflect.PropertiesValue;
+import org.osgi.service.blueprint.reflect.TypedStringValue;
+import org.osgi.service.blueprint.reflect.Value;
/**
* TODO: javadoc
@@ -124,7 +122,6 @@
recipe.allow(Option.PRIVATE_PROPERTIES);
recipe.setName(component.getName());
for (PropertyInjectionMetadata property : (Collection<PropertyInjectionMetadata>) local.getPropertyInjectionMetadata()) {
- // TODO: must pass the expected property type
Object value = getValue(property.getValue(), null);
recipe.setProperty(property.getName(), value);
}
@@ -142,14 +139,14 @@
}
}
- private Object getValue(Value v, Class hint) throws Exception {
+ private Object getValue(Value v, Class groupingType) throws Exception {
if (v instanceof NullValue) {
return null;
} else if (v instanceof TypedStringValue) {
TypedStringValue stringValue = (TypedStringValue) v;
String value = stringValue.getStringValue();
Class type = loadType(stringValue.getTypeName());
- return new ValueRecipe(value, type, hint);
+ return new ValueRecipe(getConversionService(), value, type, groupingType);
} else if (v instanceof ReferenceValue) {
String componentName = ((ReferenceValue) v).getComponentName();
return new ReferenceRecipe(componentName);
@@ -183,8 +180,7 @@
} else if (v instanceof ArrayValue) {
ArrayValue arrayValue = (ArrayValue) v;
Class type = loadType(arrayValue.getValueType());
- type = determineType(type, hint);
- ArrayRecipe ar = new ArrayRecipe(type);
+ ArrayRecipe ar = (type == null) ? new ArrayRecipe() : new ArrayRecipe(type);
for (Value value : arrayValue.getArray()) {
ar.add(getValue(value, type));
}
@@ -200,22 +196,8 @@
}
}
- private static Class determineType(Class type, Class hint) throws RuntimeException {
- if (type != null) {
- if (hint == null || hint.isAssignableFrom(type)) {
- return type;
- } else {
- throw new RuntimeException(type.getName() + " cannot be assigned to " + hint.getName());
- }
- } else if (hint != null) {
- return hint;
- } else {
- return Object.class;
- }
- }
-
- protected Object convert(Object source, Class type) throws Exception {
- return moduleContext.getConversionService().convert(source, type);
+ protected ConversionService getConversionService() {
+ return moduleContext.getConversionService();
}
private Class loadType(String typeName) throws ClassNotFoundException {
@@ -255,34 +237,5 @@
}
}
}
-
- private class ValueRecipe extends AbstractRecipe {
-
- private String value;
- private Class type;
- private Class hint;
-
- private ValueRecipe(String value, Class type, Class hint) {
- this.value = value;
- this.type = type;
- this.hint = hint;
- }
-
- @Override
- protected Object internalCreate(Type expectedType, boolean lazyRefAllowed) throws ConstructionException {
- Class myType = determineType(type, hint);
- //System.out.println("create: " + expectedType + " " + type + " " + hint + " " + myType);
- try {
- return convert(value, myType);
- } catch (Exception e) {
- throw new ConstructionException(e);
- }
- }
-
- public boolean canCreate(Type expectedType) {
- return true;
- }
-
- }
-
+
}
Added: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java?rev=766183&view=auto
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java (added)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java Sat Apr 18 00:07:19 2009
@@ -0,0 +1,71 @@
+/*
+ * 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.blueprint.context;
+
+import java.lang.reflect.Type;
+
+import org.apache.xbean.recipe.AbstractRecipe;
+import org.apache.xbean.recipe.ConstructionException;
+import org.apache.xbean.recipe.RecipeHelper;
+import org.osgi.service.blueprint.convert.ConversionService;
+
+public class ValueRecipe extends AbstractRecipe {
+
+ private ConversionService conversionService;
+ private String value;
+ private Class type;
+ private Class groupingType;
+
+ public ValueRecipe(ConversionService conversionService, String value, Class type, Class groupingType) {
+ this.conversionService = conversionService;
+ this.value = value;
+ this.type = type;
+ this.groupingType = groupingType;
+ }
+
+ private static Class determineType(Class type, Class groupingType, Class defaultType) throws RuntimeException {
+ if (type != null) {
+ if (groupingType == null || groupingType.isAssignableFrom(type)) {
+ return type;
+ } else {
+ throw new RuntimeException(type.getName() + " cannot be assigned to " + groupingType.getName());
+ }
+ } else if (groupingType != null) {
+ return groupingType;
+ } else {
+ return defaultType;
+ }
+ }
+
+ @Override
+ protected Object internalCreate(Type expectedType, boolean lazyRefAllowed) throws ConstructionException {
+ Class myType = determineType(type, groupingType, RecipeHelper.toClass(expectedType));
+
+ try {
+ return conversionService.convert(value, myType);
+ } catch (Exception e) {
+ throw new ConstructionException(e);
+ }
+ }
+
+ public boolean canCreate(Type expectedType) {
+ return true;
+ }
+
+}
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/context/ValueRecipe.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/WiringTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/WiringTest.java?rev=766183&r1=766182&r2=766183&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/WiringTest.java (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/WiringTest.java Sat Apr 18 00:07:19 2009
@@ -31,6 +31,7 @@
import org.apache.felix.blueprint.pojos.PojoB;
import org.apache.xbean.recipe.ObjectGraph;
import org.apache.xbean.recipe.Repository;
+import org.osgi.service.blueprint.convert.ConversionService;
public class WiringTest extends TestCase {
@@ -104,8 +105,8 @@
}
@Override
- public Object convert(Object source, Class type) throws Exception {
- return conversionService.convert(source, type);
+ public ConversionService getConversionService() {
+ return conversionService;
}
}
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-wiring.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-wiring.xml?rev=766183&r1=766182&r2=766183&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-wiring.xml (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-wiring.xml Sat Apr 18 00:07:19 2009
@@ -45,14 +45,14 @@
</array>
</property>
<property name="intArray">
- <array value-type="int">
+ <array>
<value>1</value>
<value>50</value>
<value>100</value>
</array>
</property>
<property name="numberArray">
- <array value-type="java.lang.Number">
+ <array>
<value type="java.lang.Integer">1</value>
<value type="java.math.BigInteger">50</value>
<value type="java.lang.Long">100</value>
Modified: geronimo/sandbox/blueprint/sample/src/main/resources/OSGI-INF/blueprint/config.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/sample/src/main/resources/OSGI-INF/blueprint/config.xml?rev=766183&r1=766182&r2=766183&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/sample/src/main/resources/OSGI-INF/blueprint/config.xml (original)
+++ geronimo/sandbox/blueprint/sample/src/main/resources/OSGI-INF/blueprint/config.xml Sat Apr 18 00:07:19 2009
@@ -14,10 +14,10 @@
<property name="b" value="10" />
<property name="bar" ref="bar" />
<property name="currency">
- <value type="java.util.Currency">PLN</value>
+ <value>PLN</value>
</property>
<property name="date">
- <value type="java.util.Date">2009.04.17</value>
+ <value>2009.04.17</value>
</property>
</component>
@@ -26,7 +26,7 @@
<property name="context" ref="bundleContext"/>
<property name="list">
<list>
- <value>a list element followed by a reference</value>
+ <value>a list element</value>
<value type = "java.lang.Integer">5</value>
</list>
</property>