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