X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FOverrideArg.java;h=5c0dc3e690e37f0b5ece4f1566836af79565f6c1;hb=f366b06720d300b3e20f996902d0c2dab55a3473;hp=20508a6e8b90416c75007a3ad3ba58e7089775fa;hpb=faf680e212bf3e18837c4f798587856e061273b3;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 20508a6e8..5c0dc3e69 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -5,11 +5,15 @@ import java.util.Vector; import org.apache.tools.ant.BuildException; +import org.argeo.slc.core.SlcException; + /** Ant type allowing to override bean properties. */ public class OverrideArg extends AbstractSpringArg { private String name; private Object value; private OverrideList overrideList; + private MapArg overrideMap; + private String antref; /** The name of the property to override. */ public String getName() { @@ -21,35 +25,37 @@ public class OverrideArg extends AbstractSpringArg { this.name = name; } + /** Sets a reference to an ant data type. */ + public void setAntref(String antref) { + checkValueAlreadySet(); + this.antref = antref; + } + /** Both value and bean cannot be set. */ public void setValue(String value) { - if (getBean() != null || overrideList != null) { - throw new BuildException("Value already set."); - } + checkValueAlreadySet(); this.value = value; } @Override public void setBean(String bean) { - if (value != null || overrideList != null) { - throw new BuildException("Value already set."); - } + checkValueAlreadySet(); 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"); - } + checkValueAlreadySet(); + overrideList = new OverrideList(); return overrideList; } + public MapArg createMap() { + checkValueAlreadySet(); + overrideMap = new MapArg(); + return overrideMap; + } + /** * The related object: the value if a value had been set or an instance of * the bean if not. @@ -61,11 +67,28 @@ public class OverrideArg extends AbstractSpringArg { return getBeanInstance(); } else if (overrideList != null) { return overrideList.getAsObjectList(); + } else if (overrideMap != null) { + return overrideMap.getMap(); + } else if (antref != null) { + Object obj = getProject().getReference(antref); + if (obj == null) { + throw new SlcException("No object found for reference " + + antref); + } + setOverridenProperties(obj); + return obj; } else { throw new BuildException("Value or bean not set."); } } + private void checkValueAlreadySet() { + if (value != null || overrideList != null || antref != null + || getBean() != null || overrideMap != null) { + throw new BuildException("Value already set."); + } + } + /** List of overrides */ protected class OverrideList { private List list = new Vector();