-package org.argeo.slc.ant.spring;\r
-\r
-import java.util.List;\r
-import java.util.Vector;\r
-\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
- return name;\r
- }\r
-\r
- /** Sets the name. */\r
- public void setName(String name) {\r
- 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
- this.value = value;\r
- }\r
-\r
- @Override\r
- public void setBean(String bean) {\r
- checkValueAlreadySet();\r
- super.setBean(bean);\r
- }\r
-\r
- /** Creates override list sub tag. */\r
- public OverrideList createList() {\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
- */\r
- public Object getObject() {\r
- if (value != null) {\r
- return value;\r
- } else if (getBean() != null) {\r
- 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
-\r
- /** Creates override sub tag. */\r
- public OverrideArg createOverride() {\r
- OverrideArg overrideArg = new OverrideArg();\r
- list.add(overrideArg);\r
- return overrideArg;\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
- }\r
-}\r