]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.ant/src/main/java/org/argeo/slc/ant/spring/MapArg.java
Refactor package names
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.ant / src / main / java / org / argeo / slc / ant / spring / MapArg.java
1 package org.argeo.slc.ant.spring;
2
3 import java.util.List;
4 import java.util.Map;
5 import java.util.TreeMap;
6 import java.util.Vector;
7
8 import org.apache.tools.ant.BuildException;
9
10 import org.argeo.slc.SlcException;
11
12 public class MapArg {
13 private List<EntryArg> entries = new Vector<EntryArg>();
14 private Map<String, Object> map = new TreeMap<String, Object>();
15
16 public EntryArg createEntry() {
17 EntryArg arg = new EntryArg();
18 entries.add(arg);
19 return arg;
20 }
21
22 public Map<String, Object> getAsObjectMap(Map<String, Object> originalMap) {
23 Map<String, Object> objectMap = new TreeMap<String, Object>();
24 for (EntryArg arg : entries) {
25 String key = arg.getKey();
26
27 if (objectMap.containsKey(key)) {
28 throw new SlcException("Key '" + key + "' already set.");
29 }
30
31 if (originalMap != null && originalMap.containsKey(key)
32 && arg.getOverrideArg() != null)
33 arg.getOverrideArg().setOriginal(originalMap.get(key));
34
35 objectMap.put(key, arg.getObject());
36
37 }
38 return objectMap;
39 }
40
41 /**
42 * Returns a cached reference if it was already called. This reference could
43 * have been modified externally and thus not anymore be in line with the
44 * configuration.
45 */
46 public Map<String, Object> getMap() {
47 if (map.size() == 0)
48 map = getAsObjectMap(null);
49 return map;
50 }
51
52 public static class EntryArg {
53 private String key;
54 private Object valueStr;
55 private OverrideArg overrideArg;
56
57 public String getKey() {
58 return key;
59 }
60
61 public void setKey(String key) {
62 this.key = key;
63 }
64
65 public Object getObject() {
66 if (overrideArg != null) {
67 return overrideArg.getObject();
68 } else if (valueStr != null) {
69 return valueStr;
70 } else {
71 throw new BuildException("Value not set.");
72 }
73 }
74
75 public void setValue(String value) {
76 check();
77 this.valueStr = value;
78 }
79
80 public OverrideArg createOverride() {
81 check();
82 overrideArg = new OverrideArg();
83 return overrideArg;
84 }
85
86 private void check() {
87 if (valueStr != null || overrideArg != null) {
88 throw new BuildException("Value already set");
89 }
90 }
91
92 public OverrideArg getOverrideArg() {
93 return overrideArg;
94 }
95
96 }
97 }