]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
Simplify TreeSPath
[gpl/argeo-slc.git] / org.argeo.slc.core / 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.Vector;
5
6 import org.apache.tools.ant.BuildException;
7
8 import org.argeo.slc.core.SlcException;
9
10 /** Ant type allowing to override bean properties. */
11 public class OverrideArg extends AbstractSpringArg {
12 private String name;
13 private Object value;
14 private OverrideList overrideList;
15 private MapArg overrideMap;
16 private String antref;
17
18 /** The name of the property to override. */
19 public String getName() {
20 return name;
21 }
22
23 /** Sets the name. */
24 public void setName(String name) {
25 this.name = name;
26 }
27
28 /** Sets a reference to an ant data type. */
29 public void setAntref(String antref) {
30 checkValueAlreadySet();
31 this.antref = antref;
32 }
33
34 /** Both value and bean cannot be set. */
35 public void setValue(String value) {
36 checkValueAlreadySet();
37 this.value = value;
38 }
39
40 @Override
41 public void setBean(String bean) {
42 checkValueAlreadySet();
43 super.setBean(bean);
44 }
45
46 /** Creates override list sub tag. */
47 public OverrideList createList() {
48 checkValueAlreadySet();
49 overrideList = new OverrideList();
50 return overrideList;
51 }
52
53 public MapArg createMap() {
54 checkValueAlreadySet();
55 overrideMap = new MapArg();
56 return overrideMap;
57 }
58
59 /**
60 * The related object: the value if a value had been set or an instance of
61 * the bean if not.
62 */
63 public Object getObject() {
64 if (value != null) {
65 return value;
66 } else if (getBean() != null) {
67 return getBeanInstance();
68 } else if (overrideList != null) {
69 return overrideList.getAsObjectList();
70 } else if (overrideMap != null) {
71 return overrideMap.getMap();
72 } else if (antref != null) {
73 Object obj = getProject().getReference(antref);
74 if (obj == null) {
75 throw new SlcException("No object found for reference "
76 + antref);
77 }
78 setOverridenProperties(obj);
79 return obj;
80 } else {
81 throw new BuildException("Value or bean not set.");
82 }
83 }
84
85 private void checkValueAlreadySet() {
86 if (value != null || overrideList != null || antref != null
87 || getBean() != null || overrideMap != null) {
88 throw new BuildException("Value already set.");
89 }
90 }
91
92 /** List of overrides */
93 protected class OverrideList {
94 private List<OverrideArg> list = new Vector<OverrideArg>();
95
96 /** Creates override sub tag. */
97 public OverrideArg createOverride() {
98 OverrideArg overrideArg = new OverrideArg();
99 list.add(overrideArg);
100 return overrideArg;
101 }
102
103 /** Gets as list of objects. */
104 public List<Object> getAsObjectList() {
105 List<Object> objectList = new Vector<Object>();
106 for (OverrideArg arg : list) {
107 objectList.add(arg.getObject());
108 }
109 return objectList;
110 }
111 }
112 }