comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java @ 1057:d4a5d3941cc0

Build out/facet filter from XML document passed at creation time. flys-artifacts/trunk@2527 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 22 Aug 2011 16:37:12 +0000
parents bd1b751deab3
children fdb0f4ef96f0
comparison
equal deleted inserted replaced
1056:bd1b751deab3 1057:d4a5d3941cc0
4 import de.intevation.artifactdatabase.DefaultArtifact; 4 import de.intevation.artifactdatabase.DefaultArtifact;
5 5
6 import de.intevation.artifactdatabase.data.DefaultStateData; 6 import de.intevation.artifactdatabase.data.DefaultStateData;
7 import de.intevation.artifactdatabase.data.StateData; 7 import de.intevation.artifactdatabase.data.StateData;
8 8
9 import de.intevation.artifactdatabase.state.DefaultFacet;
9 import de.intevation.artifactdatabase.state.DefaultOutput; 10 import de.intevation.artifactdatabase.state.DefaultOutput;
10 import de.intevation.artifactdatabase.state.Facet; 11 import de.intevation.artifactdatabase.state.Facet;
11 import de.intevation.artifactdatabase.state.Output; 12 import de.intevation.artifactdatabase.state.Output;
12 import de.intevation.artifactdatabase.state.State; 13 import de.intevation.artifactdatabase.state.State;
13 import de.intevation.artifactdatabase.state.StateEngine; 14 import de.intevation.artifactdatabase.state.StateEngine;
73 public static final String XPATH_ADVANCE_TARGET = 74 public static final String XPATH_ADVANCE_TARGET =
74 "/art:action/art:target/@art:name"; 75 "/art:action/art:target/@art:name";
75 76
76 public static final String XPATH_MODEL_ARTIFACT = 77 public static final String XPATH_MODEL_ARTIFACT =
77 "/art:action/art:template/@uuid"; 78 "/art:action/art:template/@uuid";
79
80 public static final String XPATH_FILTER =
81 "/art:action/art:filter/art:out";
78 82
79 /** The constant string that shows that an operation was successful.*/ 83 /** The constant string that shows that an operation was successful.*/
80 public static final String OPERATION_SUCCESSFUL = "SUCCESS"; 84 public static final String OPERATION_SUCCESSFUL = "SUCCESS";
81 85
82 /** The constant string that shows that an operation failed.*/ 86 /** The constant string that shows that an operation failed.*/
180 } 184 }
181 catch (ArtifactDatabaseException adbe) { 185 catch (ArtifactDatabaseException adbe) {
182 logger.error(adbe, adbe); 186 logger.error(adbe, adbe);
183 } 187 }
184 } 188 }
189
190 filterFacets = buildFilterFacets(data);
185 } 191 }
186 192
187 193
188 protected void initialize( 194 protected void initialize(
189 Artifact artifact, 195 Artifact artifact,
190 Object context, 196 Object context,
191 CallMeta callMeta) 197 CallMeta callMeta)
192 { 198 {
193 // do nothing here 199 // do nothing here
200 }
201
202 protected Map<String, List<Facet>> buildFilterFacets(Document document) {
203
204 NodeList nodes = (NodeList)XMLUtils.xpath(
205 document,
206 XPATH_FILTER,
207 XPathConstants.NODESET,
208 ArtifactNamespaceContext.INSTANCE);
209
210 if (nodes == null || nodes.getLength() == 0) {
211 return null;
212 }
213
214 Map<String, List<Facet>> result = new HashMap<String, List<Facet>>();
215
216 for (int i = 0, N = nodes.getLength(); i < N; ++i) {
217 Element element = (Element)nodes.item(i);
218 String oName = element.getAttribute("name");
219 if (oName.length() == 0) {
220 continue;
221 }
222
223 List<Facet> facets = new ArrayList<Facet>();
224
225 NodeList facetNodes = element.getElementsByTagNameNS(
226 ArtifactNamespaceContext.NAMESPACE_URI,
227 "facet");
228
229 for (int j = 0, M = facetNodes.getLength(); j < M; ++j) {
230 Element facetElement = (Element)facetNodes.item(j);
231
232 String fName = facetElement.getAttribute("name");
233
234 int index;
235 try {
236 index = Integer.parseInt(facetElement.getAttribute("index"));
237 }
238 catch (NumberFormatException nfe) {
239 logger.warn(nfe);
240 index = 0;
241 }
242 facets.add(new DefaultFacet(index, fName, ""));
243 }
244
245 if (!facets.isEmpty()) {
246 result.put(oName, facets);
247 }
248 }
249
250 return result;
194 } 251 }
195 252
196 253
197 /** 254 /**
198 * Insert new data included in <code>input</code> into the current state. 255 * Insert new data included in <code>input</code> into the current state.

http://dive4elements.wald.intevation.org