]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
Create separate agent project
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / ant / spring / OverrideArg.java
index 20508a6e8b90416c75007a3ad3ba58e7089775fa..5c0dc3e690e37f0b5ece4f1566836af79565f6c1 100644 (file)
@@ -5,11 +5,15 @@ import java.util.Vector;
 \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 AbstractSpringArg {\r
        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
        public String getName() {\r
@@ -21,35 +25,37 @@ public class OverrideArg extends AbstractSpringArg {
                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
-               if (getBean() != null || overrideList != 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) {\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
@@ -61,11 +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