Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MetaDataService.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 | 0881cd4be773 |
children | a63d79107289 |
comparison
equal
deleted
inserted
replaced
949:ea56940bfc4c | 950:22bc87a42a0d |
---|---|
1 package de.intevation.flys.artifacts.services; | 1 package de.intevation.flys.artifacts.services; |
2 | |
3 import java.io.InputStream; | |
4 import java.io.IOException; | |
5 import java.io.File; | |
6 import java.io.FileInputStream; | |
7 | 2 |
8 import java.sql.Connection; | 3 import java.sql.Connection; |
9 import java.sql.SQLException; | 4 import java.sql.SQLException; |
10 | 5 |
11 import org.w3c.dom.Document; | 6 import org.w3c.dom.Document; |
14 | 9 |
15 import java.util.Map; | 10 import java.util.Map; |
16 import java.util.HashMap; | 11 import java.util.HashMap; |
17 | 12 |
18 import de.intevation.artifacts.CallMeta; | 13 import de.intevation.artifacts.CallMeta; |
19 import de.intevation.artifacts.ServiceFactory; | |
20 | 14 |
21 import de.intevation.artifactdatabase.DefaultService; | 15 import de.intevation.artifactdatabase.DefaultService; |
22 | 16 |
23 import de.intevation.artifacts.common.utils.Config; | |
24 import de.intevation.artifacts.common.utils.XMLUtils; | 17 import de.intevation.artifacts.common.utils.XMLUtils; |
25 | 18 |
26 import de.intevation.artifacts.common.ArtifactNamespaceContext; | 19 import de.intevation.artifacts.common.ArtifactNamespaceContext; |
27 | 20 |
28 import de.intevation.flys.artifacts.services.meta.Builder; | 21 import de.intevation.flys.artifacts.services.meta.Builder; |
22 import de.intevation.flys.artifacts.services.meta.DataCage; | |
29 | 23 |
30 import de.intevation.flys.backend.SessionHolder; | 24 import de.intevation.flys.backend.SessionHolder; |
31 | 25 |
32 import org.hibernate.Session; | 26 import org.hibernate.Session; |
33 | 27 |
36 public class MetaDataService | 30 public class MetaDataService |
37 extends DefaultService | 31 extends DefaultService |
38 { | 32 { |
39 private static Logger log = Logger.getLogger(MetaDataService.class); | 33 private static Logger log = Logger.getLogger(MetaDataService.class); |
40 | 34 |
41 public static final String XPATH_META_DATA_TEMPLATE = | |
42 "/artifact-database/metadata/@template"; | |
43 | |
44 public static final String XPATH_RIVER = "/art:river/text()"; | 35 public static final String XPATH_RIVER = "/art:river/text()"; |
45 | |
46 protected Builder builder; | |
47 | 36 |
48 public MetaDataService() { | 37 public MetaDataService() { |
49 } | 38 } |
50 | 39 |
51 protected static Map<String, Object> extractParameters(Document data) { | 40 protected static Map<String, Object> extractParameters(Document data) { |
71 ) { | 60 ) { |
72 log.debug("MetaDataService.process"); | 61 log.debug("MetaDataService.process"); |
73 | 62 |
74 final Document result = XMLUtils.newDocument(); | 63 final Document result = XMLUtils.newDocument(); |
75 | 64 |
65 final Builder builder = DataCage.getInstance().getBuilder(); | |
66 | |
76 if (builder == null) { | 67 if (builder == null) { |
77 log.error("MetaDataService is not setup properly."); | 68 log.error("MetaDataService is not setup properly."); |
78 return result; | 69 return result; |
79 } | 70 } |
80 | 71 |
97 SessionHolder.release(); | 88 SessionHolder.release(); |
98 } | 89 } |
99 | 90 |
100 return result; | 91 return result; |
101 } | 92 } |
102 | |
103 @Override | |
104 public void setup(ServiceFactory factory, Object globalContext) { | |
105 log.debug("MetaDataService.setup"); | |
106 | |
107 String path = Config.getStringXPath(XPATH_META_DATA_TEMPLATE); | |
108 | |
109 if (path == null) { | |
110 log.error("no path to template file given"); | |
111 return; | |
112 } | |
113 | |
114 path = Config.replaceConfigDir(path); | |
115 | |
116 File file = new File(path); | |
117 | |
118 if (!file.isFile() || !file.canRead()) { | |
119 log.error("Cannot open template file '" + file + "'"); | |
120 return; | |
121 } | |
122 | |
123 InputStream in = null; | |
124 | |
125 try { | |
126 in = new FileInputStream(file); | |
127 Document template = XMLUtils.parseDocument(in); | |
128 if (template == null) { | |
129 log.error("cannot parse meta data template"); | |
130 } | |
131 else { | |
132 builder = new Builder(template); | |
133 } | |
134 } | |
135 catch (IOException ioe) { | |
136 log.error(ioe); | |
137 } | |
138 finally { | |
139 if (in != null) { | |
140 try { | |
141 in.close(); | |
142 } | |
143 catch (IOException ioe) { | |
144 log.error(ioe); | |
145 } | |
146 } | |
147 } | |
148 } | |
149 } | 93 } |
150 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 94 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |