# HG changeset patch # User Sascha L. Teichmann # Date 1314031032 0 # Node ID d4a5d3941cc095f6b7b50563ced868c4ba146572 # Parent bd1b751deab30ec6da3a9e7a909193b56058d646 Build out/facet filter from XML document passed at creation time. flys-artifacts/trunk@2527 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r bd1b751deab3 -r d4a5d3941cc0 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Aug 22 16:05:40 2011 +0000 +++ b/flys-artifacts/ChangeLog Mon Aug 22 16:37:12 2011 +0000 @@ -1,3 +1,8 @@ +2011-08-22 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: + Build out/facet filter from XML document passed at creation time. + 2011-08-22 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: diff -r bd1b751deab3 -r d4a5d3941cc0 flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon Aug 22 16:05:40 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon Aug 22 16:37:12 2011 +0000 @@ -6,6 +6,7 @@ import de.intevation.artifactdatabase.data.DefaultStateData; import de.intevation.artifactdatabase.data.StateData; +import de.intevation.artifactdatabase.state.DefaultFacet; import de.intevation.artifactdatabase.state.DefaultOutput; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Output; @@ -76,6 +77,9 @@ public static final String XPATH_MODEL_ARTIFACT = "/art:action/art:template/@uuid"; + public static final String XPATH_FILTER = + "/art:action/art:filter/art:out"; + /** The constant string that shows that an operation was successful.*/ public static final String OPERATION_SUCCESSFUL = "SUCCESS"; @@ -182,6 +186,8 @@ logger.error(adbe, adbe); } } + + filterFacets = buildFilterFacets(data); } @@ -193,6 +199,57 @@ // do nothing here } + protected Map> buildFilterFacets(Document document) { + + NodeList nodes = (NodeList)XMLUtils.xpath( + document, + XPATH_FILTER, + XPathConstants.NODESET, + ArtifactNamespaceContext.INSTANCE); + + if (nodes == null || nodes.getLength() == 0) { + return null; + } + + Map> result = new HashMap>(); + + for (int i = 0, N = nodes.getLength(); i < N; ++i) { + Element element = (Element)nodes.item(i); + String oName = element.getAttribute("name"); + if (oName.length() == 0) { + continue; + } + + List facets = new ArrayList(); + + NodeList facetNodes = element.getElementsByTagNameNS( + ArtifactNamespaceContext.NAMESPACE_URI, + "facet"); + + for (int j = 0, M = facetNodes.getLength(); j < M; ++j) { + Element facetElement = (Element)facetNodes.item(j); + + String fName = facetElement.getAttribute("name"); + + int index; + try { + index = Integer.parseInt(facetElement.getAttribute("index")); + } + catch (NumberFormatException nfe) { + logger.warn(nfe); + index = 0; + } + facets.add(new DefaultFacet(index, fName, "")); + } + + if (!facets.isEmpty()) { + result.put(oName, facets); + } + } + + return result; + } + /** * Insert new data included in input into the current state.