]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.ant/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
Introduce org.argeo.slc.support.ant
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.ant / src / main / java / org / argeo / slc / ant / spring / OverrideArg.java
1 package org.argeo.slc.ant.spring;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.apache.tools.ant.BuildException;
9
10 /** Ant type allowing to override bean properties. */
11 public class OverrideArg extends SpringArg<Object> {
12 private final static Log log = LogFactory.getLog(OverrideArg.class);
13
14 private String name;
15 private Object value;
16 private ListArg overrideList;
17 private MapArg overrideMap;
18
19 private Boolean merge = false;
20
21 /** The name of the property to override. */
22 public String getName() {
23 return name;
24 }
25
26 /** Sets the name. */
27 public void setName(String name) {
28 this.name = name;
29 }
30
31 /** Both value and bean cannot be set. */
32 public void setValue(String value) {
33 checkValueAlreadySet();
34 this.value = value;
35 }
36
37 @Override
38 public void setBean(String bean) {
39 checkValueAlreadySet();
40 super.setBean(bean);
41 }
42
43 /** Creates override list sub tag. */
44 public ListArg createList() {
45 checkValueAlreadySet();
46 overrideList = new ListArg();
47 return overrideList;
48 }
49
50 public MapArg createMap() {
51 checkValueAlreadySet();
52 overrideMap = new MapArg();
53 return overrideMap;
54 }
55
56 /**
57 * The related object: the value if a value had been set or an instance of
58 * the bean if not.
59 */
60 public Object getObject() {
61 if (value != null) {
62 if (log.isTraceEnabled())
63 log.trace(this + "\t: Returns override object as value");
64 return value;
65 } else if (getBean() != null
66 || getAntref() != null
67 // works on original if no collection is defined
68 || (getOriginal() != null && overrideList == null && overrideMap == null)) {
69 if (log.isTraceEnabled())
70 log.trace(this + "\t: Returns override object as instance");
71 return getInstance();
72 } else if (overrideList != null) {
73 if (log.isTraceEnabled())
74 log.trace(this + "\t: Returns override object as list");
75 return overrideList.getAsObjectList((List<Object>) getOriginal());
76 } else if (overrideMap != null) {
77 if (log.isTraceEnabled())
78 log.trace(this + "\t: Returns override object as map");
79 return overrideMap
80 .getAsObjectMap((Map<String, Object>) getOriginal());
81 } else {
82 throw new BuildException("Value or bean not set.");
83 }
84 }
85
86 protected void checkValueAlreadySet() {
87 super.checkValueAlreadySet();
88 if (value != null || overrideList != null || overrideMap != null) {
89 if (!getMerge()) {
90 throw new BuildException("Value already set.");
91 }
92 }
93 }
94
95 public Boolean getMerge() {
96 return merge;
97 }
98
99 public void setMerge(Boolean merge) {
100 this.merge = merge;
101 }
102
103 }