]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/MapArg.java
Create separate Hibernate project
[gpl/argeo-slc.git] / org.argeo.slc.core / 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.core.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> getMap() {
23 if (map.size() == 0) {
24 for (EntryArg arg : entries) {
25 String key = arg.getKey();
26 if (map.containsKey(key)) {
27 throw new SlcException("Key '" + key + "' already set.");
28 } else {
29 map.put(key, arg.getValueStr());
30 }
31 }
32 }
33 return map;
34 }
35
36 public static class EntryArg {
37 private String key;
38 private Object valueStr;
39 private OverrideArg overrideArg;
40
41 public String getKey() {
42 return key;
43 }
44
45 public void setKey(String key) {
46 this.key = key;
47 }
48
49 public Object getValueStr() {
50 if (overrideArg != null) {
51 return overrideArg.getObject();
52 } else if (valueStr != null) {
53 return valueStr;
54 } else {
55 throw new BuildException("Value not set.");
56 }
57 }
58
59 public void setValue(String value) {
60 check();
61 this.valueStr = value;
62 }
63
64 public OverrideArg createOverride() {
65 check();
66 overrideArg = new OverrideArg();
67 return overrideArg;
68 }
69
70 private void check() {
71 if (valueStr != null || overrideArg != null) {
72 throw new BuildException("Value already set");
73 }
74 }
75 }
76 }