package org.argeo.slc.ant.spring;\r
\r
-import org.apache.tools.ant.BuildException;\r
+import java.util.List;\r
+import java.util.Vector;\r
\r
+import org.apache.tools.ant.BuildException;\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
\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
+ /** Both value and bean cannot be set. */\r
public void setValue(String value) {\r
- if (getBean() != null) {\r
- throw new BuildException(\r
- "Cannot set both 'bean' and 'value' attributes.");\r
+ if (getBean() != null || overrideList != null) {\r
+ throw new BuildException("Value already set.");\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
+ if (value != null || overrideList != null) {\r
+ throw new BuildException("Value already set.");\r
}\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
+ return overrideList;\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 {\r
throw new BuildException("Value or bean not 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