comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MetaDataService.java @ 970:e456aca4eb7b

meta data service: Adjusted to use the DataCage recommendations. flys-artifacts/trunk@2395 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 22 Jul 2011 10:41:30 +0000
parents 2c8fc60125b9
children 30c85cb33a50
comparison
equal deleted inserted replaced
969:2c8fc60125b9 970:e456aca4eb7b
8 import org.apache.log4j.Logger; 8 import org.apache.log4j.Logger;
9 9
10 import java.util.Map; 10 import java.util.Map;
11 import java.util.HashMap; 11 import java.util.HashMap;
12 12
13 import de.intevation.artifacts.Artifact;
13 import de.intevation.artifacts.CallMeta; 14 import de.intevation.artifacts.CallMeta;
14 import de.intevation.artifacts.GlobalContext; 15 import de.intevation.artifacts.GlobalContext;
16 import de.intevation.artifacts.ArtifactDatabase;
17 import de.intevation.artifacts.ArtifactDatabaseException;
15 18
16 import de.intevation.artifactdatabase.DefaultService; 19 import de.intevation.artifactdatabase.DefaultService;
17 20
18 import de.intevation.artifacts.common.utils.XMLUtils; 21 import de.intevation.artifacts.common.utils.XMLUtils;
22 import de.intevation.artifacts.common.utils.StringUtils;
19 23
20 import de.intevation.artifacts.common.ArtifactNamespaceContext; 24 import de.intevation.artifacts.common.ArtifactNamespaceContext;
21 25
22 import de.intevation.flys.artifacts.services.meta.Builder; 26 import de.intevation.flys.artifacts.services.meta.Builder;
23 import de.intevation.flys.artifacts.services.meta.DataCage; 27 import de.intevation.flys.artifacts.services.meta.DataCage;
28
29 import de.intevation.flys.artifacts.FLYSArtifact;
24 30
25 import de.intevation.flys.backend.SessionHolder; 31 import de.intevation.flys.backend.SessionHolder;
26 32
27 import org.hibernate.Session; 33 import org.hibernate.Session;
28 34
34 private static Logger log = Logger.getLogger(MetaDataService.class); 40 private static Logger log = Logger.getLogger(MetaDataService.class);
35 41
36 // old service. To be removed 42 // old service. To be removed
37 public static final String XPATH_RIVER = "/art:river/text()"; 43 public static final String XPATH_RIVER = "/art:river/text()";
38 44
39 public static final String XPATH_OUT = "/art:out/@value"; 45 public static final String XPATH_UUID = "/art:uuid/@value";
40 public static final String XPATH_UUID = "/art:uuid/@value"; 46 public static final String XPATH_OUTS = "/art:outs/@value";
47 public static final String XPATH_FILTERS = "/art:filters/@value";
48
49 /** The global context key of the artifact database */
50 public static final String ARTIFACT_DATA_BASE_KEY =
51 "global.artifact.database";
41 52
42 public MetaDataService() { 53 public MetaDataService() {
43 } 54 }
44 55
45 protected static Map<String, Object> extractParameters(Document data) { 56 protected static Map<String, Object> extractParameters(Document data) {
55 parameters.put("river", river); 66 parameters.put("river", river);
56 67
57 return parameters; 68 return parameters;
58 } 69 }
59 70
60 @Override 71 /** The old service. To be removed. */
61 public Document process( 72 protected Document oldService(Document data) {
62 Document data,
63 GlobalContext globalContext,
64 CallMeta callMeta
65 ) {
66 log.debug("MetaDataService.process");
67 73
68 final Document result = XMLUtils.newDocument(); 74 final Document result = XMLUtils.newDocument();
69 75
70 final Builder builder = DataCage.getInstance().getBuilder(); 76 final Builder builder = DataCage.getInstance().getBuilder();
71 77
93 SessionHolder.release(); 99 SessionHolder.release();
94 } 100 }
95 101
96 return result; 102 return result;
97 } 103 }
104
105 protected Document newService(
106 String uuid,
107 String outsString,
108 String filters,
109 GlobalContext globalContext
110 ) {
111 Document result = XMLUtils.newDocument();
112
113 if (!StringUtils.checkUUID(uuid)) {
114 log.warn("'" + uuid + "' is not a UUID");
115 return result;
116 }
117
118 Object dbObject =
119 (ArtifactDatabase)globalContext.get(ARTIFACT_DATA_BASE_KEY);
120
121 if (!(dbObject instanceof ArtifactDatabase)) {
122 log.error("Cannot find artifact database");
123 return result;
124 }
125
126 ArtifactDatabase db = (ArtifactDatabase)dbObject;
127
128 Artifact artifact;
129
130 try {
131 artifact = db.getRawArtifact(uuid);
132 }
133 catch (ArtifactDatabaseException adbe) {
134 log.warn("fetching artifact failed", adbe);
135 return result;
136 }
137
138 if (!(artifact instanceof FLYSArtifact)) {
139 log.warn("artifact is not a FLYS artifact.");
140 return result;
141 }
142
143 FLYSArtifact flysArtifact = (FLYSArtifact)artifact;
144
145 String [] outs = outsString.split("\\s*,\\s*");
146
147 Map<String, Object> extras;
148
149 if (filters != null) {
150 extras = new HashMap<String, Object>();
151 for (String filter: filters.split("\\s*,\\*s")) {
152 extras.put(filter, "true");
153 }
154 }
155 else {
156 extras = null;
157 }
158
159 DataCage dc = DataCage.getInstance();
160
161 dc.recommend(flysArtifact, outs, extras, result);
162
163 return result;
164 }
165
166 @Override
167 public Document process(
168 Document data,
169 GlobalContext globalContext,
170 CallMeta callMeta
171 ) {
172 log.debug("MetaDataService.process");
173
174 String uuid = XMLUtils.xpathString(
175 data, XPATH_UUID, ArtifactNamespaceContext.INSTANCE);
176
177 String outs = XMLUtils.xpathString(
178 data, XPATH_OUTS, ArtifactNamespaceContext.INSTANCE);
179
180 String filters = XMLUtils.xpathString(
181 data, XPATH_FILTERS, ArtifactNamespaceContext.INSTANCE);
182
183 return uuid != null && outs != null
184 ? newService(uuid, outs, filters, globalContext)
185 : oldService(data);
186 }
98 } 187 }
99 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 188 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org