Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/DataCage.java @ 950:22bc87a42a0d
First step to factor out the "Datenkorb" logic into a service independent singleton.
flys-artifacts/trunk@2367 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 20 Jul 2011 09:56:39 +0000 |
parents | |
children | 92027887775a |
comparison
equal
deleted
inserted
replaced
949:ea56940bfc4c | 950:22bc87a42a0d |
---|---|
1 package de.intevation.flys.artifacts.services.meta; | |
2 | |
3 import java.io.InputStream; | |
4 import java.io.IOException; | |
5 import java.io.File; | |
6 | |
7 import java.io.FileInputStream; | |
8 | |
9 import org.apache.log4j.Logger; | |
10 | |
11 import org.w3c.dom.Document; | |
12 | |
13 import de.intevation.artifacts.common.utils.Config; | |
14 import de.intevation.artifacts.common.utils.XMLUtils; | |
15 | |
16 public class DataCage | |
17 { | |
18 private static Logger log = Logger.getLogger(DataCage.class); | |
19 | |
20 public static final String XPATH_META_DATA_TEMPLATE = | |
21 "/artifact-database/metadata/@template"; | |
22 | |
23 private static DataCage INSTANCE; | |
24 | |
25 protected Builder builder; | |
26 | |
27 public DataCage() { | |
28 } | |
29 | |
30 public DataCage(Builder builder) { | |
31 this.builder = builder; | |
32 } | |
33 | |
34 public Builder getBuilder() { | |
35 return builder; | |
36 } | |
37 | |
38 public static synchronized DataCage getInstance() { | |
39 if (INSTANCE == null) { | |
40 INSTANCE = createDataCage(); | |
41 } | |
42 return INSTANCE; | |
43 } | |
44 | |
45 protected static Builder createBuilder(File file) { | |
46 log.debug("DataCage.createBuilder"); | |
47 | |
48 if (!file.isFile() || !file.canRead()) { | |
49 log.error("Cannot open template file '" + file + "'"); | |
50 return null; | |
51 } | |
52 | |
53 InputStream in = null; | |
54 | |
55 try { | |
56 in = new FileInputStream(file); | |
57 | |
58 Document template = XMLUtils.parseDocument(in); | |
59 | |
60 if (template == null) { | |
61 log.error("cannot parse meta data template"); | |
62 } | |
63 else { | |
64 return new Builder(template); | |
65 } | |
66 } | |
67 catch (IOException ioe) { | |
68 log.error(ioe); | |
69 } | |
70 finally { | |
71 if (in != null) { | |
72 try { | |
73 in.close(); | |
74 } | |
75 catch (IOException ioe) { | |
76 log.error(ioe); | |
77 } | |
78 } | |
79 } | |
80 return null; | |
81 } | |
82 | |
83 protected static DataCage createDataCage() { | |
84 log.debug("DataCage.createDataCage"); | |
85 | |
86 String path = Config.getStringXPath(XPATH_META_DATA_TEMPLATE); | |
87 if (path == null) { | |
88 log.error("no path to template file given"); | |
89 return null; | |
90 } | |
91 | |
92 path = Config.replaceConfigDir(path); | |
93 | |
94 return new DataCage(createBuilder(new File(path))); | |
95 } | |
96 } | |
97 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |