]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Add map override
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 1 Feb 2008 09:10:16 +0000 (09:10 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 1 Feb 2008 09:10:16 +0000 (09:10 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@939 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java [deleted file]
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties

index b7a63c9d28d42c4d02905ccd82044edcbc1d8574..6096f1f63ac215f8933fc9bd64f921db0c46cfec 100644 (file)
@@ -11,6 +11,7 @@ import org.springframework.context.ApplicationContext;
 import org.apache.commons.logging.LogFactory;\r
 import org.apache.tools.ant.types.DataType;\r
 \r
+import org.argeo.slc.ant.SlcAntException;\r
 import org.argeo.slc.ant.SlcProjectHelper;\r
 import org.argeo.slc.core.SlcException;\r
 \r
@@ -40,13 +41,8 @@ public abstract class AbstractSpringArg extends DataType {
        public Object getBeanInstance() {\r
                if (beanInstance == null) {\r
                        beanInstance = getContext().getBean(bean);\r
-\r
-                       BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);\r
-                       for (OverrideArg override : overrides) {\r
-                               LogFactory.getLog(getClass()).debug("Prop "+override.getName());\r
-                               wrapper.setPropertyValue(override.getName(), override\r
-                                               .getObject());\r
-                       }\r
+                       \r
+                       setOverridenProperties(beanInstance);\r
 \r
                        if (beanInstance instanceof InitializingBean) {\r
                                try {\r
@@ -58,6 +54,22 @@ public abstract class AbstractSpringArg extends DataType {
                }\r
                return beanInstance;\r
        }\r
+       \r
+       protected void setOverridenProperties(Object obj){\r
+               BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
+               for (OverrideArg override : overrides) {\r
+                       if (override.getName() == null) {\r
+                               throw new SlcAntException(\r
+                                               "The name of the property to override has to be set.");\r
+                       }\r
+\r
+//                     LogFactory.getLog(getClass()).debug(\r
+//                                     "Prop " + override.getName());\r
+                       wrapper.setPropertyValue(override.getName(), override\r
+                                       .getObject());\r
+               }\r
+       \r
+       }\r
 \r
        /** Creates an override subtag. */\r
        public OverrideArg createOverride() {\r
index 00b2676601f7bc6fe924fc7b9ef4647f77adcc04..5c0dc3e690e37f0b5ece4f1566836af79565f6c1 100644 (file)
@@ -12,6 +12,7 @@ public class OverrideArg extends AbstractSpringArg {
        private String name;\r
        private Object value;\r
        private OverrideList overrideList;\r
+       private MapArg overrideMap;\r
        private String antref;\r
 \r
        /** The name of the property to override. */\r
@@ -26,41 +27,35 @@ public class OverrideArg extends AbstractSpringArg {
 \r
        /** Sets a reference to an ant data type. */\r
        public void setAntref(String antref) {\r
-               if (value != null || overrideList != null || getBean() != null) {\r
-                       throw new BuildException("Value already set.");\r
-               }\r
+               checkValueAlreadySet();\r
                this.antref = antref;\r
        }\r
 \r
        /** Both value and bean cannot be set. */\r
        public void setValue(String value) {\r
-               if (getBean() != null || overrideList != null || antref != null) {\r
-                       throw new BuildException("Value already set.");\r
-               }\r
+               checkValueAlreadySet();\r
                this.value = value;\r
        }\r
 \r
        @Override\r
        public void setBean(String bean) {\r
-               if (value != null || overrideList != null || antref != null) {\r
-                       throw new BuildException("Value already set.");\r
-               }\r
+               checkValueAlreadySet();\r
                super.setBean(bean);\r
        }\r
 \r
        /** Creates override list sub tag. */\r
        public OverrideList createList() {\r
-               if (value != null || getBean() != null) {\r
-                       throw new BuildException("Value already set.");\r
-               }\r
-               if (overrideList == null) {\r
-                       overrideList = new OverrideList();\r
-               } else {\r
-                       throw new BuildException("Only one list can be declared");\r
-               }\r
+               checkValueAlreadySet();\r
+               overrideList = new OverrideList();\r
                return overrideList;\r
        }\r
 \r
+       public MapArg createMap() {\r
+               checkValueAlreadySet();\r
+               overrideMap = new MapArg();\r
+               return overrideMap;\r
+       }\r
+\r
        /**\r
         * The related object: the value if a value had been set or an instance of\r
         * the bean if not.\r
@@ -72,18 +67,28 @@ public class OverrideArg extends AbstractSpringArg {
                        return getBeanInstance();\r
                } else if (overrideList != null) {\r
                        return overrideList.getAsObjectList();\r
+               } else if (overrideMap != null) {\r
+                       return overrideMap.getMap();\r
                } else if (antref != null) {\r
                        Object obj = getProject().getReference(antref);\r
                        if (obj == null) {\r
                                throw new SlcException("No object found for reference "\r
                                                + antref);\r
                        }\r
+                       setOverridenProperties(obj);\r
                        return obj;\r
                } else {\r
                        throw new BuildException("Value or bean not set.");\r
                }\r
        }\r
 \r
+       private void checkValueAlreadySet() {\r
+               if (value != null || overrideList != null || antref != null\r
+                               || getBean() != null || overrideMap != null) {\r
+                       throw new BuildException("Value already set.");\r
+               }\r
+       }\r
+\r
        /** List of overrides */\r
        protected class OverrideList {\r
                private List<OverrideArg> list = new Vector<OverrideArg>();\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java
deleted file mode 100644 (file)
index fe45739..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.argeo.slc.ant.test;\r
-\r
-import java.util.Collection;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-import java.util.Vector;\r
-\r
-import org.apache.tools.ant.types.DataType;\r
-\r
-import org.argeo.slc.ant.spring.MapArg;\r
-import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.core.test.context.ContextAware;\r
-import org.argeo.slc.core.test.context.ParentContextAware;\r
-\r
-public class ParentContextArg extends DataType implements ParentContextAware {\r
-       private MapArg values = null;\r
-       private MapArg expectedValues = null;\r
-\r
-       private List<ContextAware> children = new Vector<ContextAware>();\r
-\r
-       public MapArg createValues() {\r
-               values = new MapArg();\r
-               return values;\r
-       }\r
-\r
-       public MapArg createExpectedValues() {\r
-               expectedValues = new MapArg();\r
-               return expectedValues;\r
-       }\r
-\r
-       public void addChildContext(ContextAware contextAware) {\r
-               children.add(contextAware);\r
-       }\r
-\r
-       public Collection<ContextAware> getChildContexts() {\r
-               return children;\r
-       }\r
-\r
-       public String getContextAnyFlag() {\r
-               return DEFAULT_ANY_FLAG;\r
-       }\r
-\r
-       public String getContextSkipFlag() {\r
-               return DEFAULT_SKIP_FLAG;\r
-       }\r
-\r
-       public Map<String, Object> getExpectedValues() {\r
-               if (expectedValues == null)\r
-                       expectedValues = new MapArg();\r
-               return expectedValues.getMap();\r
-       }\r
-\r
-       public Map<String, Object> getValues() {\r
-               if (values == null)\r
-                       values = new MapArg();\r
-               return values.getMap();\r
-       }\r
-\r
-       public void setValues(Map<String, Object> values) {\r
-               throw new SlcException("Cannot override values map.");\r
-       }\r
-\r
-}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java
new file mode 100644 (file)
index 0000000..b6b541d
--- /dev/null
@@ -0,0 +1,71 @@
+package org.argeo.slc.ant.test;\r
+\r
+import java.util.Collection;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Vector;\r
+\r
+import org.apache.tools.ant.types.DataType;\r
+\r
+import org.argeo.slc.ant.spring.MapArg;\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.test.context.ContextAware;\r
+import org.argeo.slc.core.test.context.ParentContextAware;\r
+\r
+public class ParentContextType extends DataType implements ParentContextAware {\r
+       private MapArg values = null;\r
+       private MapArg expectedValues = null;\r
+\r
+       private List<ContextAware> children = new Vector<ContextAware>();\r
+\r
+       public MapArg createValues() {\r
+               values = new MapArg();\r
+               return values;\r
+       }\r
+\r
+       public MapArg createExpectedValues() {\r
+               expectedValues = new MapArg();\r
+               return expectedValues;\r
+       }\r
+\r
+       public void addChildContext(ContextAware contextAware) {\r
+               children.add(contextAware);\r
+       }\r
+\r
+       public Collection<ContextAware> getChildContexts() {\r
+               return children;\r
+       }\r
+\r
+       public String getContextAnyFlag() {\r
+               return DEFAULT_ANY_FLAG;\r
+       }\r
+\r
+       public String getContextSkipFlag() {\r
+               return DEFAULT_SKIP_FLAG;\r
+       }\r
+\r
+       public Map<String, Object> getExpectedValues() {\r
+               if (expectedValues == null)\r
+                       expectedValues = new MapArg();\r
+               return expectedValues.getMap();\r
+       }\r
+\r
+       public Map<String, Object> getValues() {\r
+               if (values == null)\r
+                       values = new MapArg();\r
+               return values.getMap();\r
+       }\r
+\r
+       public void setValues(Map<String, Object> values) {\r
+               throw new SlcException("Cannot override values map.");\r
+       }\r
+\r
+       public void setUpdateValues(Map<String, Object> overrideValues) {\r
+               getValues().putAll(overrideValues);\r
+       }\r
+\r
+       public void setUpdateExpectedValues(\r
+                       Map<String, Object> overrideExpectedValues) {\r
+               getExpectedValues().putAll(overrideExpectedValues);\r
+       }\r
+}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java
new file mode 100644 (file)
index 0000000..da0fae6
--- /dev/null
@@ -0,0 +1,26 @@
+package org.argeo.slc.unit.test.tree;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.SimpleResultPart;\r
+import org.argeo.slc.core.test.tree.PartSubList;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+\r
+/** Utilities for unit tests. */\r
+public class UnitTestTreeUtil {\r
+       /** Assert one part of a tree test result. */\r
+       public static void assertPart(TreeTestResult testResult, String pathStr,\r
+                       int index, Integer status, String message) {\r
+               TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
+               PartSubList list = testResult.getResultParts().get(path);\r
+               SimpleResultPart part = (SimpleResultPart) list.getParts().get(index);\r
+               TestCase.assertEquals(status, part.getStatus());\r
+               TestCase.assertEquals(message, part.getMessage());\r
+       }\r
+\r
+       /** Makes sure this is a singleton */\r
+       private UnitTestTreeUtil() {\r
+\r
+       }\r
+}\r
index c1fb4777267998011a11a308117111b6d506d708..0cb3b2c46290c2450dce3e75056a325514de955e 100644 (file)
@@ -1,2 +1,2 @@
 # Types\r
-slc.context=org.argeo.slc.ant.test.ParentContextArg\r
+slc.context=org.argeo.slc.ant.test.ParentContextType\r