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 :

http://dive4elements.wald.intevation.org