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/27 18:56:11 UTC
svn commit: r769059 - in /geronimo/sandbox/blueprint/blueprint-core/src:
main/java/org/apache/geronimo/blueprint/context/
main/java/org/apache/geronimo/blueprint/utils/
test/java/org/apache/geronimo/blueprint/
test/java/org/apache/geronimo/blueprint/po...
Author: gawor
Date: Mon Apr 27 16:56:10 2009
New Revision: 769059
URL: http://svn.apache.org/viewvc?rev=769059&view=rev
Log:
handle attributes with null value and a type
Added:
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java (with props)
Modified:
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/BlueprintObjectRecipe.java
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/utils/ArgumentsMatcher.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/pojos/Multiple.java
geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-constructor.xml
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/BlueprintObjectRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/BlueprintObjectRecipe.java?rev=769059&r1=769058&r2=769059&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/BlueprintObjectRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/BlueprintObjectRecipe.java Mon Apr 27 16:56:10 2009
@@ -139,7 +139,9 @@
BeanArgument argument = beanArguments.get(i);
Class type = loadClass(argument.getValueType());
Object obj = arguments.get(i);
- if (obj instanceof Recipe) {
+ if (obj == null) {
+ obj = new NullRecipe(type);
+ } else if (obj instanceof Recipe) {
if (type != null || shouldPreinstantiate(argument.getValue())) {
obj = RecipeHelper.convert(Object.class, obj, refAllowed);
obj = convert(obj, type);
Added: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java?rev=769059&view=auto
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java (added)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java Mon Apr 27 16:56:10 2009
@@ -0,0 +1,56 @@
+/*
+ * 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.geronimo.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;
+
+/**
+ * Recipe that always returns null but only for a specified type.
+ *
+ * @author <a href="mailto:dev@geronimo.apache.org">Apache Geronimo Project</a>
+ * @version $Rev$, $Date$
+ */
+public class NullRecipe extends AbstractRecipe {
+
+ private Class type;
+
+ public NullRecipe(Class type) {
+ this.type = (type == null) ? Object.class : type;
+ }
+
+ @Override
+ protected Object internalCreate(Type expectedType, boolean lazyRefAllowed) throws ConstructionException {
+ Class expectedClass = RecipeHelper.toClass(expectedType);
+ if (expectedClass.isAssignableFrom(type)) {
+ return null;
+ } else {
+ throw new ConstructionException("");
+ }
+ }
+
+ public boolean canCreate(Type expectedType) {
+ Class expectedClass = RecipeHelper.toClass(expectedType);
+ return expectedClass.isAssignableFrom(type);
+ }
+
+}
Propchange: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/NullRecipe.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/utils/ArgumentsMatcher.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/utils/ArgumentsMatcher.java?rev=769059&r1=769058&r2=769059&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/utils/ArgumentsMatcher.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/utils/ArgumentsMatcher.java Mon Apr 27 16:56:10 2009
@@ -57,7 +57,7 @@
}
boolean allowReorder = options.contains(Option.ARGUMENT_REORDER);
- if (matches.size() == 0 && allowReorder) {
+ if (matches.size() == 0 && arguments.size() > 1 && allowReorder) {
// we did not find any matching method, let's try re-ordering the arguments
for (Method method : methods) {
if (method.getName().equals(name) && isAcceptable(method, options)) {
@@ -96,7 +96,7 @@
}
boolean allowReorder = options.contains(Option.ARGUMENT_REORDER);
- if (matches.size() == 0 && allowReorder) {
+ if (matches.size() == 0 && arguments.size() > 1 && allowReorder) {
// we did not find any matching constructor, let's try re-ordering the arguments
for (Constructor constructor : constructors) {
Class[] parameterTypes = constructor.getParameterTypes();
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=769059&r1=769058&r2=769059&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 Mon Apr 27 16:56:10 2009
@@ -150,64 +150,68 @@
PojoA pojoa = (PojoA) obj1;
Object obj2 = graph.create("pojoB");
- assertNotNull(obj2);
- assertTrue(obj2 instanceof PojoB);
- PojoB pojob = (PojoB) obj2;
+ testPojoB(obj2, URI.create("urn:myuri"), 10);
- assertEquals(URI.create("urn:myuri"), pojob.getUri());
- assertEquals(10, pojob.getNumber());
-
- assertEquals(pojob, pojoa.getPojob());
+ assertEquals(obj2, pojoa.getPojob());
assertEquals(new BigInteger("10"), pojoa.getNumber());
Object obj3 = graph.create("pojoC");
- assertNotNull(obj3);
- assertTrue(obj3 instanceof PojoB);
- pojob = (PojoB) obj3;
-
- assertEquals(URI.create("urn:myuri-static"), pojob.getUri());
- assertEquals(15, pojob.getNumber());
+ testPojoB(obj3, URI.create("urn:myuri-static"), 15);
Object obj4 = graph.create("pojoD");
- assertNotNull(obj4);
- assertTrue(obj4 instanceof PojoB);
- pojob = (PojoB) obj4;
-
- assertEquals(URI.create("urn:myuri-static"), pojob.getUri());
- assertEquals(15, pojob.getNumber());
+ testPojoB(obj4, URI.create("urn:myuri-static"), 15);
Object obj5 = graph.create("pojoE");
- assertNotNull(obj5);
- assertTrue(obj5 instanceof PojoB);
- pojob = (PojoB) obj5;
-
- assertEquals(URI.create("urn:myuri-dynamic"), pojob.getUri());
- assertEquals(20, pojob.getNumber());
+ testPojoB(obj5, URI.create("urn:myuri-dynamic"), 20);
try {
graph.create("multipleFail");
fail("Did not throw exception");
} catch (RuntimeException e) {
// we expect exception
+ // TODO: check the exception string?
}
Object obj6 = graph.create("multipleInt");
- assertNotNull(obj6);
- assertTrue(obj6 instanceof Multiple);
- assertEquals(123, ((Multiple)obj6).getInt());
- assertNull(((Multiple)obj6).getString());
+ testMultiple(obj6, null, 123);
Object obj7 = graph.create("multipleString");
- assertNotNull(obj7);
- assertTrue(obj7 instanceof Multiple);
- assertEquals(-1, ((Multiple)obj7).getInt());
- assertEquals("123", ((Multiple)obj7).getString());
+ testMultiple(obj7, "123", -1);
Object obj8 = graph.create("multipleStringConvertable");
- assertNotNull(obj8);
- assertTrue(obj8 instanceof Multiple);
- assertEquals(-1, ((Multiple)obj8).getInt());
- assertEquals("hello", ((Multiple)obj8).getString());
+ testMultiple(obj8, "hello", -1);
+
+ Object obj9 = graph.create("multipleFactory1");
+ testMultiple(obj9, null, 1234);
+
+ Object obj10 = graph.create("multipleFactory2");
+ testMultiple(obj10, "helloCreate-boolean", -1);
+
+ try {
+ graph.create("multipleFactoryNull");
+ fail("Did not throw exception");
+ } catch (RuntimeException e) {
+ // we expect exception
+ // TODO: check the exception string?
+ }
+
+ Object obj11 = graph.create("multipleFactoryTypedNull");
+ testMultiple(obj11, "hello-boolean", -1);
+ }
+
+ private void testPojoB(Object obj, URI uri, int intValue) {
+ assertNotNull(obj);
+ assertTrue(obj instanceof PojoB);
+ PojoB pojob = (PojoB) obj;
+ assertEquals(uri, pojob.getUri());
+ assertEquals(intValue, pojob.getNumber());
+ }
+
+ private void testMultiple(Object obj, String stringValue, int intValue) {
+ assertNotNull(obj);
+ assertTrue(obj instanceof Multiple);
+ assertEquals(intValue, ((Multiple)obj).getInt());
+ assertEquals(stringValue, ((Multiple)obj).getString());
}
}
Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/pojos/Multiple.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/pojos/Multiple.java?rev=769059&r1=769058&r2=769059&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/pojos/Multiple.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/pojos/Multiple.java Mon Apr 27 16:56:10 2009
@@ -38,4 +38,13 @@
public String getString() {
return stringValue;
}
+
+ public static Multiple create(String arg1, Integer arg2) {
+ return new Multiple(arg2.intValue());
+ }
+
+ public static Multiple create(String arg1, Boolean arg2) {
+ return new Multiple(arg1 + "-boolean");
+ }
+
}
Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-constructor.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-constructor.xml?rev=769059&r1=769058&r2=769059&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-constructor.xml (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-constructor.xml Mon Apr 27 16:56:10 2009
@@ -51,4 +51,28 @@
<argument value="hello"/>
</bean>
+ <bean id="multipleFactory1" class="org.apache.geronimo.blueprint.pojos.Multiple"
+ factory-method = "create" >
+ <argument value="hello"/>
+ <argument value="1234"/>
+ </bean>
+
+ <bean id="multipleFactory2" class="org.apache.geronimo.blueprint.pojos.Multiple"
+ factory-method = "create" >
+ <argument value="helloCreate"/>
+ <argument value="yes"/>
+ </bean>
+
+ <bean id="multipleFactoryNull" class="org.apache.geronimo.blueprint.pojos.Multiple"
+ factory-method = "create" >
+ <argument value="helloNull"/>
+ <argument><null/></argument>
+ </bean>
+
+ <bean id="multipleFactoryTypedNull" class="org.apache.geronimo.blueprint.pojos.Multiple"
+ factory-method = "create" >
+ <argument value="hello"/>
+ <argument type = "java.lang.Boolean"><null/></argument>
+ </bean>
+
</blueprint>