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