Introduce override
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 23 Oct 2007 08:20:20 +0000 (08:20 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 23 Oct 2007 08:20:20 +0000 (08:20 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@630 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc/src/main/java/org/argeo/slc/ant/AbstractSpringArg.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java [new file with mode: 0644]
org.argeo.slc/src/test/ant/applicationContext.xml
org.argeo.slc/src/test/ant/build.xml
org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java [new file with mode: 0644]

index fac2945925ca66be4bb8687b0e6f7abf11b6274f..2e2f3dfefa03d4fab28bd01eb9d19a417ec1362b 100644 (file)
@@ -1,8 +1,16 @@
 package org.argeo.slc.ant;\r
 \r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.springframework.beans.BeanWrapper;\r
+import org.springframework.beans.BeanWrapperImpl;\r
 import org.springframework.context.ApplicationContext;\r
 \r
+import org.apache.tools.ant.BuildException;\r
+\r
 public abstract class AbstractSpringArg {\r
+       private List<OverrideArg> overrides = new Vector<OverrideArg>();\r
 \r
        private String bean;\r
        private ApplicationContext context;\r
@@ -14,14 +22,26 @@ public abstract class AbstractSpringArg {
        public void setBean(String bean) {\r
                this.bean = bean;\r
        }\r
-       \r
-       protected Object getBeanInstance(){\r
-               return context.getBean(bean);\r
+\r
+       protected Object getBeanInstance() {\r
+               Object obj = context.getBean(bean);\r
+\r
+               BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
+               for (OverrideArg override : overrides) {\r
+                       wrapper.setPropertyValue(override.getName(), override.getObject());\r
+               }\r
+\r
+               return obj;\r
        }\r
 \r
        public void setContext(ApplicationContext context) {\r
                this.context = context;\r
        }\r
-       \r
-       \r
+\r
+       public OverrideArg createOverride() {\r
+               OverrideArg propertyArg = new OverrideArg();\r
+               propertyArg.setContext(context);\r
+               overrides.add(propertyArg);\r
+               return propertyArg;\r
+       }\r
 }\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java
new file mode 100644 (file)
index 0000000..6f793e4
--- /dev/null
@@ -0,0 +1,44 @@
+package org.argeo.slc.ant;\r
+\r
+import org.apache.tools.ant.BuildException;\r
+\r
+public class OverrideArg extends AbstractSpringArg {\r
+       private String name;\r
+       private Object value;\r
+\r
+       public String getName() {\r
+               return name;\r
+       }\r
+\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+\r
+       public void setValue(String value) {\r
+               if (getBean() != null) {\r
+                       throw new BuildException(\r
+                                       "Cannot set both 'bean' and 'value' attributes.");\r
+               }\r
+               this.value = value;\r
+       }\r
+\r
+       @Override\r
+       public void setBean(String bean) {\r
+               if (value != null) {\r
+                       throw new BuildException(\r
+                                       "Cannot set both 'bean' and 'value' attributes.");\r
+               }\r
+               super.setBean(bean);\r
+       }\r
+\r
+       public Object getObject() {\r
+               if (value != null) {\r
+                       return value;\r
+               } else if (getBean() != null) {\r
+                       return getBeanInstance();\r
+               } else {\r
+                       throw new BuildException("Value or bean not set.");\r
+               }\r
+       }\r
+\r
+}\r
index eb745be8887c069746572ee1779659cf115a5a90..b03c1e08426d91d9f4cde5d69748c57836c6445c 100644 (file)
                <property name="reached" value="value2" />\r
        </bean>\r
 \r
+       <bean id="dummyTestDataObjOK"\r
+               class="org.argeo.slc.testslc.DummyTestData" scope="prototype">\r
+               <property name="expected" ref="dummyTestDataObject1" />\r
+               <property name="reached" ref="dummyTestDataObject1" />\r
+       </bean>\r
+\r
+       <bean id="dummyTestDataObjNOK"\r
+               class="org.argeo.slc.testslc.DummyTestData" scope="prototype">\r
+               <property name="expected" ref="dummyTestDataObject1" />\r
+               <property name="reached" ref="dummyTestDataObject2" />\r
+       </bean>\r
+\r
+       <bean id="dummyTestDataObject1"\r
+               class="org.argeo.slc.testslc.DummyTestDataObject" scope="prototype">\r
+               <property name="value" value="dummy1" />\r
+       </bean>\r
+\r
+       <bean id="dummyTestDataObject2"\r
+               class="org.argeo.slc.testslc.DummyTestDataObject" scope="prototype">\r
+               <property name="value" value="dummy2" />\r
+       </bean>\r
+\r
 </beans>
\ No newline at end of file
index fdd1557d2b859be03e8e039e906e69b229422967..84208f57774ec8ec3125a8ce6d7b310a07c09098 100644 (file)
@@ -1,15 +1,50 @@
 <project default="test">\r
        <taskdef name="slc.test" classname="org.argeo.slc.ant.SlcTestTask" />\r
 \r
-       <target name="test">\r
+       <target name="test" depends="testSimple,testObj">\r
+       </target>\r
+\r
+       <target name="testSimple">\r
+               <!-- Success -->\r
                <slc.test>\r
                        <testDefinition bean="dummyTestDefinition" />\r
                        <testData bean="dummyTestDataOK" />\r
                </slc.test>\r
 \r
+               <!-- Failure -->\r
                <slc.test>\r
                        <testDefinition bean="dummyTestDefinition" />\r
                        <testData bean="dummyTestDataNOK" />\r
                </slc.test>\r
+\r
+               <!-- Override property -->\r
+               <slc.test>\r
+                       <testDefinition bean="dummyTestDefinition" />\r
+                       <testData bean="dummyTestDataNOK">\r
+                               <override name="reached" value="value1" />\r
+                       </testData>\r
+               </slc.test>\r
+       </target>\r
+       \r
+       <target name="testObj">\r
+               <!-- Success -->\r
+               <slc.test>\r
+                       <testDefinition bean="dummyTestDefinition" />\r
+                       <testData bean="dummyTestDataObjOK" />\r
+               </slc.test>\r
+\r
+               <!-- Failure -->\r
+               <slc.test>\r
+                       <testDefinition bean="dummyTestDefinition" />\r
+                       <testData bean="dummyTestDataObjNOK" />\r
+               </slc.test>\r
+\r
+               <!-- Override property -->\r
+               <slc.test>\r
+                       <testDefinition bean="dummyTestDefinition" />\r
+                       <testData bean="dummyTestDataObjNOK">\r
+                               <override name="reached" bean="dummyTestDataObject1" />\r
+                       </testData>\r
+               </slc.test>\r
        </target>\r
 </project>
\ No newline at end of file
diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java
new file mode 100644 (file)
index 0000000..34b00d2
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.slc.testslc;\r
+\r
+public class DummyTestDataObject {\r
+       private Object value;\r
+\r
+       public Object getValue() {\r
+               return value;\r
+       }\r
+\r
+       public void setValue(Object value) {\r
+               this.value = value;\r
+       }\r
+\r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if (obj instanceof DummyTestDataObject) {\r
+                       DummyTestDataObject dtdo = (DummyTestDataObject) obj;\r
+                       return value.equals(dtdo.value);\r
+               }\r
+               return false;\r
+       }\r
+\r
+}\r