Mercurial > dive4elements > river
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 : |