X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.agent%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FOverrideArg.java;h=645b59204cebf0d8edc9884b41815f6e16d885b1;hb=7a8f034133c1112e187e2a2bfd2c56a8d2452345;hp=3dd26c844f7e2f5aa3189b8812ad7622dc6a8c00;hpb=847af36ba908ea3285a16e17d809a2b29f207b0a;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 3dd26c844..645b59204 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -1,19 +1,22 @@ package org.argeo.slc.ant.spring; import java.util.List; -import java.util.Vector; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.BuildException; -import org.argeo.slc.core.SlcException; - /** Ant type allowing to override bean properties. */ public class OverrideArg extends SpringArg { + private final static Log log = LogFactory.getLog(OverrideArg.class); + private String name; private Object value; - private OverrideList overrideList; + private ListArg overrideList; private MapArg overrideMap; - private String antref; + + private Boolean merge = false; /** The name of the property to override. */ public String getName() { @@ -25,12 +28,6 @@ public class OverrideArg extends SpringArg { 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) { checkValueAlreadySet(); @@ -44,9 +41,9 @@ public class OverrideArg extends SpringArg { } /** Creates override list sub tag. */ - public OverrideList createList() { + public ListArg createList() { checkValueAlreadySet(); - overrideList = new OverrideList(); + overrideList = new ListArg(); return overrideList; } @@ -62,51 +59,45 @@ public class OverrideArg extends SpringArg { */ public Object getObject() { if (value != null) { + if (log.isTraceEnabled()) + log.trace(this + "\t: Returns override object as value"); return value; - } else if (getBean() != null) { - return getBeanInstance(); + } else if (getBean() != null + || getAntref() != null + // works on original if no collection is defined + || (getOriginal() != null && overrideList == null && overrideMap == null)) { + if (log.isTraceEnabled()) + log.trace(this + "\t: Returns override object as instance"); + return getInstance(); } else if (overrideList != null) { - return overrideList.getAsObjectList(); + if (log.isTraceEnabled()) + log.trace(this + "\t: Returns override object as list"); + return overrideList.getAsObjectList((List) getOriginal()); } 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; + if (log.isTraceEnabled()) + log.trace(this + "\t: Returns override object as map"); + return overrideMap + .getAsObjectMap((Map) getOriginal()); } 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."); + protected void checkValueAlreadySet() { + super.checkValueAlreadySet(); + if (value != null || overrideList != null || overrideMap != null) { + if (!getMerge()) { + throw new BuildException("Value already 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; - } + public Boolean getMerge() { + return merge; + } - /** Gets as list of objects. */ - public List getAsObjectList() { - List objectList = new Vector(); - for (OverrideArg arg : list) { - objectList.add(arg.getObject()); - } - return objectList; - } + public void setMerge(Boolean merge) { + this.merge = merge; } + }