1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.util.config;
18
19 import java.util.HashMap;
20 import java.util.Map;
21 import java.util.Properties;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public class HierarchicalGenericConfig extends GenericConfig {
40
41
42
43 protected String m_prefix = "";
44
45
46 @Override
47 public Map<String, Object> getMap() {
48 Map<String, Object> map = new HashMap<String, Object>();
49
50 for (String key : m_map.keySet()) {
51 if (key.startsWith("#")) {
52 HierarchicalGenericConfig child = (HierarchicalGenericConfig)
53 m_map.get(key);
54 map.putAll(child.getMap());
55 } else {
56 map.put(m_prefix + key, m_map.get(key));
57 }
58 }
59 return map;
60 }
61
62
63 @Override
64 public void setMap(Map<String, Object> map) {
65 m_map.clear();
66 setOverrideMap(map);
67 }
68
69
70 @Override
71 public void setOverrideMap(Map<String, Object> map) {
72 for (String key : map.keySet()) {
73 add(key, map.get(key));
74 }
75 }
76
77
78 @Override
79 public void setOverrideMap(Properties properties) {
80 for (Object key : properties.keySet()) {
81 add((String) key, properties.get(key));
82 }
83 }
84
85
86 @Override
87 public void add(String key, Object value) {
88 if (key.contains(".")) {
89 String childKey = key.substring(0, key.indexOf("."));
90 HierarchicalGenericConfig child = getSubConfig(childKey);
91
92
93 if (child == null) {
94 child = new HierarchicalGenericConfig();
95 child.setPrefix(m_prefix + childKey + ".");
96 }
97
98 child.add(key.substring(key.indexOf(".") + 1), value);
99
100 m_map.put("#" + childKey, child);
101 } else {
102 m_map.put(key, value);
103 }
104 }
105
106
107 @Override
108 public Object get(String key) {
109 if (key.contains(".")) {
110 HierarchicalGenericConfig child = (HierarchicalGenericConfig)
111 m_map.get("#" + key.substring(0, key.indexOf(".")));
112 return child.get(key.substring(key.indexOf(".") + 1));
113 } else {
114 return m_map.get(key);
115 }
116 }
117
118
119
120
121
122 public HierarchicalGenericConfig getSubConfig(String prefix) {
123 if (prefix.contains(".")) {
124 HierarchicalGenericConfig child = (HierarchicalGenericConfig)
125 m_map.get("#" + prefix.substring(0, prefix.indexOf(".")));
126 return child.getSubConfig(
127 prefix.substring(prefix.indexOf(".") + 1));
128 } else {
129 return (HierarchicalGenericConfig) m_map.get("#" + prefix);
130 }
131 }
132
133
134
135
136 public Map<String, Object> getChildren() {
137 Map<String, Object> map = new HashMap<String, Object>();
138
139 for (String key : m_map.keySet()) {
140 if (key.startsWith("#")) {
141 map.put(key.substring(1), m_map.get(key));
142 } else {
143 map.put(key, m_map.get(key));
144 }
145 }
146
147 return map;
148 }
149
150
151 @Override
152 public String toString() {
153 StringBuffer buffer = new StringBuffer();
154 Map<String, Object> map = getMap();
155 for (String key : map.keySet()) {
156 buffer.append(key);
157 buffer.append(" = ");
158 buffer.append(map.get(key));
159 buffer.append(System.getProperty("line.separator"));
160 }
161 return buffer.toString();
162 }
163
164
165
166
167 public String getPrefix() {
168 return m_prefix;
169 }
170
171
172
173
174 public void setPrefix(String prefix) {
175 m_prefix = prefix;
176 }
177 }