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