diff flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java @ 803:653ae84533e7

Read/create recommended Artifacts and add them to the current Collection. flys-client/trunk@2350 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 18 Jul 2011 09:52:16 +0000
parents a078ba1c139d
children 6f65e70fa11d
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java	Tue Jul 12 15:04:50 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java	Mon Jul 18 09:52:16 2011 +0000
@@ -6,6 +6,7 @@
 import javax.xml.xpath.XPathConstants;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -46,6 +47,9 @@
 
     public static final String XPATH_STATIC_ITEM_NODE = "art:item";
 
+    public static final String XPATH_RECOMMENDED_ARTIFACTS =
+        "/art:result/art:recommended-artifacts/art:artifact-factory";
+
     /**
      * This method creates the {@link ArtifactDescription} of the DESCRIBE
      * document <i>doc</i>.
@@ -73,14 +77,16 @@
         DataList currentData = extractCurrentData(dynamicNode, state);
         DataList[] old       = extractOldData(staticNode);
         String[] states      = extractReachableStates(reachable);
-        OutputMode[] outs        = extractOutputModes(outputs);
+        OutputMode[] outs    = extractOutputModes(outputs);
+        String[] recommended = extractRecommendedArtifacts(doc);
 
         return new DefaultArtifactDescription(
             old,
             currentData,
             state,
             states,
-            outs);
+            outs,
+            recommended);
     }
 
 
@@ -464,5 +470,31 @@
 
         return (OutputMode[]) outs.toArray(new OutputMode[size]);
     }
+
+
+    protected static String[] extractRecommendedArtifacts(Document doc) {
+        System.out.println("ArtifactDescriptionFactory - extract recommended.");
+
+        NodeList list = (NodeList) XMLUtils.xpath(
+            doc,
+            XPATH_RECOMMENDED_ARTIFACTS,
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        int num = list != null ? list.getLength() : 0;
+
+        String[] factories = new String[num];
+
+        for (int i = 0; i < num; i++) {
+            Element e = (Element) list.item(i);
+            String  f = e.getAttribute("name");
+
+            if (f != null && f.length() > 0) {
+                factories[i] = f;
+            }
+        }
+
+        return factories;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org