1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.configuration;
19
20 import java.io.Reader;
21 import java.io.Writer;
22 import java.io.File;
23 import java.io.InputStream;
24 import java.io.OutputStream;
25 import java.net.URL;
26 import java.util.Collection;
27 import java.util.Iterator;
28 import java.util.List;
29
30 import org.apache.commons.configuration.event.ConfigurationEvent;
31 import org.apache.commons.configuration.event.ConfigurationListener;
32 import org.apache.commons.configuration.reloading.ReloadingStrategy;
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public abstract class AbstractHierarchicalFileConfiguration
47 extends HierarchicalConfiguration
48 implements FileConfiguration, ConfigurationListener
49 {
50
51
52
53 private FileConfigurationDelegate delegate;
54
55
56
57
58
59 protected AbstractHierarchicalFileConfiguration()
60 {
61 initialize();
62 }
63
64
65
66
67
68
69
70
71
72 protected AbstractHierarchicalFileConfiguration(HierarchicalConfiguration c)
73 {
74 super(c);
75 initialize();
76 }
77
78
79
80
81
82
83
84 public AbstractHierarchicalFileConfiguration(String fileName) throws ConfigurationException
85 {
86 this();
87
88 delegate.setFileName(fileName);
89
90
91 load();
92 }
93
94
95
96
97
98
99
100 public AbstractHierarchicalFileConfiguration(File file) throws ConfigurationException
101 {
102 this();
103
104 setFile(file);
105
106
107 if (file.exists())
108 {
109 load();
110 }
111 }
112
113
114
115
116
117
118
119 public AbstractHierarchicalFileConfiguration(URL url) throws ConfigurationException
120 {
121 this();
122
123 setURL(url);
124
125
126 load();
127 }
128
129
130
131
132 private void initialize()
133 {
134 delegate = createDelegate();
135 initDelegate(delegate);
136 }
137
138 protected void addPropertyDirect(String key, Object obj)
139 {
140 super.addPropertyDirect(key, obj);
141 delegate.possiblySave();
142 }
143
144 public void clearProperty(String key)
145 {
146 super.clearProperty(key);
147 delegate.possiblySave();
148 }
149
150 public void clearTree(String key)
151 {
152 super.clearTree(key);
153 delegate.possiblySave();
154 }
155
156 public void setProperty(String key, Object value)
157 {
158 super.setProperty(key, value);
159 delegate.possiblySave();
160 }
161
162 public void load() throws ConfigurationException
163 {
164 delegate.load();
165 }
166
167 public void load(String fileName) throws ConfigurationException
168 {
169 delegate.load(fileName);
170 }
171
172 public void load(File file) throws ConfigurationException
173 {
174 delegate.load(file);
175 }
176
177 public void load(URL url) throws ConfigurationException
178 {
179 delegate.load(url);
180 }
181
182 public void load(InputStream in) throws ConfigurationException
183 {
184 delegate.load(in);
185 }
186
187 public void load(InputStream in, String encoding) throws ConfigurationException
188 {
189 delegate.load(in, encoding);
190 }
191
192 public void save() throws ConfigurationException
193 {
194 delegate.save();
195 }
196
197 public void save(String fileName) throws ConfigurationException
198 {
199 delegate.save(fileName);
200 }
201
202 public void save(File file) throws ConfigurationException
203 {
204 delegate.save(file);
205 }
206
207 public void save(URL url) throws ConfigurationException
208 {
209 delegate.save(url);
210 }
211
212 public void save(OutputStream out) throws ConfigurationException
213 {
214 delegate.save(out);
215 }
216
217 public void save(OutputStream out, String encoding) throws ConfigurationException
218 {
219 delegate.save(out, encoding);
220 }
221
222 public String getFileName()
223 {
224 return delegate.getFileName();
225 }
226
227 public void setFileName(String fileName)
228 {
229 delegate.setFileName(fileName);
230 }
231
232 public String getBasePath()
233 {
234 return delegate.getBasePath();
235 }
236
237 public void setBasePath(String basePath)
238 {
239 delegate.setBasePath(basePath);
240 }
241
242 public File getFile()
243 {
244 return delegate.getFile();
245 }
246
247 public void setFile(File file)
248 {
249 delegate.setFile(file);
250 }
251
252 public URL getURL()
253 {
254 return delegate.getURL();
255 }
256
257 public void setURL(URL url)
258 {
259 delegate.setURL(url);
260 }
261
262 public void setAutoSave(boolean autoSave)
263 {
264 delegate.setAutoSave(autoSave);
265 }
266
267 public boolean isAutoSave()
268 {
269 return delegate.isAutoSave();
270 }
271
272 public ReloadingStrategy getReloadingStrategy()
273 {
274 return delegate.getReloadingStrategy();
275 }
276
277 public void setReloadingStrategy(ReloadingStrategy strategy)
278 {
279 delegate.setReloadingStrategy(strategy);
280 }
281
282 public void reload()
283 {
284 setDetailEvents(false);
285 try
286 {
287 delegate.reload();
288 }
289 finally
290 {
291 setDetailEvents(true);
292 }
293 }
294
295 public String getEncoding()
296 {
297 return delegate.getEncoding();
298 }
299
300 public void setEncoding(String encoding)
301 {
302 delegate.setEncoding(encoding);
303 }
304
305 public boolean containsKey(String key)
306 {
307 reload();
308 return super.containsKey(key);
309 }
310
311 public Iterator getKeys(String prefix)
312 {
313 reload();
314 return super.getKeys(prefix);
315 }
316
317 public Object getProperty(String key)
318 {
319 reload();
320 return super.getProperty(key);
321 }
322
323 public boolean isEmpty()
324 {
325 reload();
326 return super.isEmpty();
327 }
328
329
330
331
332
333
334
335
336
337 public void addNodes(String key, Collection nodes)
338 {
339 super.addNodes(key, nodes);
340 delegate.possiblySave();
341 }
342
343
344
345
346
347
348
349
350 protected List fetchNodeList(String key)
351 {
352 reload();
353 return super.fetchNodeList(key);
354 }
355
356
357
358
359
360
361
362
363 protected void subnodeConfigurationChanged(ConfigurationEvent event)
364 {
365 delegate.possiblySave();
366 super.subnodeConfigurationChanged(event);
367 }
368
369
370
371
372
373
374
375
376
377
378 protected FileConfigurationDelegate createDelegate()
379 {
380 return new FileConfigurationDelegate();
381 }
382
383
384
385
386
387
388 private void initDelegate(FileConfigurationDelegate del)
389 {
390 del.addConfigurationListener(this);
391 }
392
393
394
395
396
397
398
399
400 public void configurationChanged(ConfigurationEvent event)
401 {
402
403 setDetailEvents(true);
404 try
405 {
406 fireEvent(event.getType(), event.getPropertyName(), event
407 .getPropertyValue(), event.isBeforeUpdate());
408 }
409 finally
410 {
411 setDetailEvents(false);
412 }
413 }
414
415
416
417
418
419
420 protected FileConfigurationDelegate getDelegate()
421 {
422 return delegate;
423 }
424
425
426
427
428
429 protected void setDelegate(FileConfigurationDelegate delegate)
430 {
431 this.delegate = delegate;
432 }
433
434
435
436
437
438
439 protected class FileConfigurationDelegate extends AbstractFileConfiguration
440 {
441 public void load(Reader in) throws ConfigurationException
442 {
443 AbstractHierarchicalFileConfiguration.this.load(in);
444 }
445
446 public void save(Writer out) throws ConfigurationException
447 {
448 AbstractHierarchicalFileConfiguration.this.save(out);
449 }
450
451 public void clear()
452 {
453 AbstractHierarchicalFileConfiguration.this.clear();
454 }
455 }
456 }