X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FOverrideArg.java;h=20508a6e8b90416c75007a3ad3ba58e7089775fa;hb=5764eb4717599e8df700094e7f0360a155e2a3bb;hp=85a6e2c89100f55de07adfe7d15f7a5098aaf91b;hpb=2d2e8673ee9a9c610dcd831833cb67c3a508c372;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 85a6e2c89..20508a6e8 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -1,45 +1,89 @@ package org.argeo.slc.ant.spring; -import org.apache.tools.ant.BuildException; +import java.util.List; +import java.util.Vector; +import org.apache.tools.ant.BuildException; +/** Ant type allowing to override bean properties. */ public class OverrideArg extends AbstractSpringArg { private String name; private Object value; + private OverrideList overrideList; + /** The name of the property to override. */ public String getName() { return name; } + /** Sets the name. */ public void setName(String name) { this.name = name; } + /** Both value and bean cannot be set. */ public void setValue(String value) { - if (getBean() != null) { - throw new BuildException( - "Cannot set both 'bean' and 'value' attributes."); + if (getBean() != null || overrideList != null) { + throw new BuildException("Value already set."); } this.value = value; } @Override public void setBean(String bean) { - if (value != null) { - throw new BuildException( - "Cannot set both 'bean' and 'value' attributes."); + if (value != null || overrideList != null) { + throw new BuildException("Value already set."); } super.setBean(bean); } + /** Creates override list sub tag. */ + public OverrideList createList() { + if (value != null || getBean() != null) { + throw new BuildException("Value already set."); + } + if (overrideList == null) { + overrideList = new OverrideList(); + } else { + throw new BuildException("Only one list can be declared"); + } + return overrideList; + } + + /** + * The related object: the value if a value had been set or an instance of + * the bean if not. + */ public Object getObject() { if (value != null) { return value; } else if (getBean() != null) { return getBeanInstance(); + } else if (overrideList != null) { + return overrideList.getAsObjectList(); } else { throw new BuildException("Value or bean not set."); } } + /** List of overrides */ + protected class OverrideList { + private List list = new Vector(); + + /** Creates override sub tag. */ + public OverrideArg createOverride() { + OverrideArg overrideArg = new OverrideArg(); + list.add(overrideArg); + return overrideArg; + } + + /** Gets as list of objects. */ + public List getAsObjectList() { + List objectList = new Vector(); + for (OverrideArg arg : list) { + objectList.add(arg.getObject()); + } + return objectList; + } + } }