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