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/29 05:28:51 UTC

svn commit: r769635 - in /geronimo/sandbox/blueprint/blueprint-core/src: main/java/org/apache/geronimo/blueprint/context/ main/java/org/apache/geronimo/blueprint/convert/ test/java/org/apache/geronimo/blueprint/ test/java/org/apache/geronimo/blueprint/...

Author: gawor
Date: Wed Apr 29 03:28:45 2009
New Revision: 769635

URL: http://svn.apache.org/viewvc?rev=769635&view=rev
Log:
collections value-type attribute is the default type for collection elements but individual elements can specify a totaly different type

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/Instanciator.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java
    geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java
    geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/convert/ConversionServiceImplTest.java
    geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/Instanciator.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/Instanciator.java?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/Instanciator.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/Instanciator.java Wed Apr 29 03:28:45 2009
@@ -273,7 +273,8 @@
         } else if (v instanceof ValueMetadata) {
             ValueMetadata stringValue = (ValueMetadata) v;
             Class type = loadClass(stringValue.getTypeName());
-            return new ValueRecipe(getConversionService(), stringValue, type, groupingType);
+            type = (type == null) ? groupingType : type;
+            return new ValueRecipe(getConversionService(), stringValue, type);
         } else if (v instanceof RefMetadata) {
             String componentName = ((RefMetadata) v).getComponentId();
             return new ReferenceRecipe(componentName);

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java Wed Apr 29 03:28:45 2009
@@ -37,43 +37,32 @@
     private ConversionService conversionService;
     private ValueMetadata value;
     private Class type;
-    private Class groupingType;
 
-    public ValueRecipe(ConversionService conversionService, ValueMetadata value, Class type, Class groupingType) {
+    public ValueRecipe(ConversionService conversionService, ValueMetadata value, Class type) {
         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;
-        }
+    private static Class determineType(Class type, Type defaultType) {
+        // TODO: check if type is assignable from defaultType?
+        return (type != null) ? type : RecipeHelper.toClass(defaultType);
     }
 
     @Override
     protected Object internalCreate(Type expectedType, boolean lazyRefAllowed) throws ConstructionException {
-        Class myType = determineType(type, groupingType, RecipeHelper.toClass(expectedType));
+        Class myType = determineType(type, expectedType);
 
         try {
             return conversionService.convert(value.getStringValue(), myType);
-        } catch (Exception e) {
+        } catch (Exception e) {            
             throw new ConstructionException(e);
         }
     }
 
     public boolean canCreate(Type expectedType) {
         // XXX: this is expensive but that's what spec wants
-        Class myType = determineType(type, groupingType, RecipeHelper.toClass(expectedType));
+        Class myType = determineType(type, expectedType);
         
         try {
             conversionService.convert(value.getStringValue(), myType);

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java Wed Apr 29 03:28:45 2009
@@ -70,6 +70,8 @@
     public Object convert(Object fromValue, Class toType) throws Exception {
         if (toType.isInstance(fromValue)) {
             return fromValue;
+        } else if (Class.class == toType) {
+            return fromValue.getClass();
         }
         Object value = doConvert(fromValue, toType);        
         if (value == null) {

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java Wed Apr 29 03:28:45 2009
@@ -81,6 +81,7 @@
         assertNotNull(pojoa.getSet());
         assertTrue(pojoa.getSet().contains("set value"));
         assertTrue(pojoa.getSet().contains(pojob));
+        assertTrue(pojoa.getSet().contains(URI.create("http://geronimo.apache.org")));
         
         assertNotNull(pojoa.getMap());
         assertEquals("val", pojoa.getMap().get("key"));
@@ -102,10 +103,11 @@
         assertEquals(100, pojoa.getIntArray()[2]);
         
         assertNotNull(pojoa.getNumberArray());
-        assertEquals(3, pojoa.getNumberArray().length);
+        assertEquals(4, pojoa.getNumberArray().length);
         assertEquals(new Integer(1), pojoa.getNumberArray()[0]);
         assertEquals(new BigInteger("50"), pojoa.getNumberArray()[1]);
         assertEquals(new Long(100), pojoa.getNumberArray()[2]);
+        assertEquals(new Integer(200), pojoa.getNumberArray()[3]);
         
         // test init-method
         assertEquals(true, pojob.getInitCalled());

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/convert/ConversionServiceImplTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/convert/ConversionServiceImplTest.java?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/convert/ConversionServiceImplTest.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/convert/ConversionServiceImplTest.java Wed Apr 29 03:28:45 2009
@@ -123,6 +123,11 @@
         assertEquals(new Locale("de", "", "POSIX"), result);
     }
     
+    public void testConvertWeird() throws Exception {
+        assertEquals(this, service.convert(this, ConversionServiceImplTest.class));
+        assertEquals(ConversionServiceImplTest.class, service.convert(this, Class.class));
+    }
+    
     public void testCustom() throws Exception {
         ConversionServiceImpl s = new ConversionServiceImpl();
         s.registerConverter(new RegionConverter());

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml?rev=769635&r1=769634&r2=769635&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml Wed Apr 29 03:28:45 2009
@@ -38,9 +38,10 @@
             </map>
         </property>
         <property name="set">
-            <set>
-                <value>set value</value>
+            <set value-type="java.net.URI">
+                <value type="java.lang.String">set value</value>
                 <ref component="pojoB" />
+                <value>http://geronimo.apache.org</value>
             </set>
         </property>
         <property name="list">
@@ -75,10 +76,11 @@
             </array>
         </property>
         <property name="numberArray">
-            <array>
-                <value type="java.lang.Integer">1</value>
+            <array value-type="java.lang.Integer">
+                <value>1</value>
                 <value type="java.math.BigInteger">50</value>
                 <value type="java.lang.Long">100</value>
+                <value>200</value>
             </array>
         </property>
         <property name="number">