]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
Introduce examples modules
[gpl/argeo-slc.git] / org.argeo.slc.agent / src / main / java / org / argeo / slc / ant / spring / OverrideArg.java
index 3dd26c844f7e2f5aa3189b8812ad7622dc6a8c00..645b59204cebf0d8edc9884b41815f6e16d885b1 100644 (file)
@@ -1,19 +1,22 @@
 package org.argeo.slc.ant.spring;\r
 \r
 import java.util.List;\r
-import java.util.Vector;\r
+import java.util.Map;\r
 \r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
 import org.apache.tools.ant.BuildException;\r
 \r
-import org.argeo.slc.core.SlcException;\r
-\r
 /** Ant type allowing to override bean properties. */\r
 public class OverrideArg extends SpringArg<Object> {\r
+       private final static Log log = LogFactory.getLog(OverrideArg.class);\r
+\r
        private String name;\r
        private Object value;\r
-       private OverrideList overrideList;\r
+       private ListArg overrideList;\r
        private MapArg overrideMap;\r
-       private String antref;\r
+\r
+       private Boolean merge = false;\r
 \r
        /** The name of the property to override. */\r
        public String getName() {\r
@@ -25,12 +28,6 @@ public class OverrideArg extends SpringArg<Object> {
                this.name = name;\r
        }\r
 \r
-       /** Sets a reference to an ant data type. */\r
-       public void setAntref(String antref) {\r
-               checkValueAlreadySet();\r
-               this.antref = antref;\r
-       }\r
-\r
        /** Both value and bean cannot be set. */\r
        public void setValue(String value) {\r
                checkValueAlreadySet();\r
@@ -44,9 +41,9 @@ public class OverrideArg extends SpringArg<Object> {
        }\r
 \r
        /** Creates override list sub tag. */\r
-       public OverrideList createList() {\r
+       public ListArg createList() {\r
                checkValueAlreadySet();\r
-               overrideList = new OverrideList();\r
+               overrideList = new ListArg();\r
                return overrideList;\r
        }\r
 \r
@@ -62,51 +59,45 @@ public class OverrideArg extends SpringArg<Object> {
         */\r
        public Object getObject() {\r
                if (value != null) {\r
+                       if (log.isTraceEnabled())\r
+                               log.trace(this + "\t: Returns override object as value");\r
                        return value;\r
-               } else if (getBean() != null) {\r
-                       return getBeanInstance();\r
+               } else if (getBean() != null\r
+                               || getAntref() != null\r
+                               // works on original if no collection is defined\r
+                               || (getOriginal() != null && overrideList == null && overrideMap == null)) {\r
+                       if (log.isTraceEnabled())\r
+                               log.trace(this + "\t: Returns override object as instance");\r
+                       return getInstance();\r
                } else if (overrideList != null) {\r
-                       return overrideList.getAsObjectList();\r
+                       if (log.isTraceEnabled())\r
+                               log.trace(this + "\t: Returns override object as list");\r
+                       return overrideList.getAsObjectList((List<Object>) getOriginal());\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
+                       if (log.isTraceEnabled())\r
+                               log.trace(this + "\t: Returns override object as map");\r
+                       return overrideMap\r
+                                       .getAsObjectMap((Map<String, Object>) getOriginal());\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
+       protected void checkValueAlreadySet() {\r
+               super.checkValueAlreadySet();\r
+               if (value != null || overrideList != null || overrideMap != null) {\r
+                       if (!getMerge()) {\r
+                               throw new BuildException("Value already set.");\r
+                       }\r
                }\r
        }\r
 \r
-       /** List of overrides */\r
-       protected class OverrideList {\r
-               private List<OverrideArg> list = new Vector<OverrideArg>();\r
-\r
-               /** Creates override sub tag. */\r
-               public OverrideArg createOverride() {\r
-                       OverrideArg overrideArg = new OverrideArg();\r
-                       list.add(overrideArg);\r
-                       return overrideArg;\r
-               }\r
+       public Boolean getMerge() {\r
+               return merge;\r
+       }\r
 \r
-               /** Gets as list of objects. */\r
-               public List<Object> getAsObjectList() {\r
-                       List<Object> objectList = new Vector<Object>();\r
-                       for (OverrideArg arg : list) {\r
-                               objectList.add(arg.getObject());\r
-                       }\r
-                       return objectList;\r
-               }\r
+       public void setMerge(Boolean merge) {\r
+               this.merge = merge;\r
        }\r
+\r
 }\r