[PATCH 4 of 6] New method to extract multi attribute data

Wald Commits scm-commit at wald.intevation.org
Thu Mar 20 13:37:31 CET 2014


# HG changeset patch
# User Raimund Renkert <rrenkert at intevation.de>
# Date 1395318945 -3600
# Branch minfo-opt
# Node ID 2c221acebb766141670aca1e368d219258bf6489
# Parent  c053b2d813f99e2c15fa778ab2ba6434e56a2996
New method to extract multi attribute data.

diff -r c053b2d813f9 -r 2c221acebb76 gwt-client/src/main/java/org/dive4elements/river/client/server/DataFactory.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/server/DataFactory.java	Thu Mar 20 13:35:13 2014 +0100
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/server/DataFactory.java	Thu Mar 20 13:35:45 2014 +0100
@@ -8,9 +8,13 @@
 
 package org.dive4elements.river.client.server;
 
+import java.util.HashMap;
+
 import javax.xml.xpath.XPathConstants;
 
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import org.apache.log4j.Logger;
@@ -27,6 +31,8 @@
 import org.dive4elements.river.client.shared.model.IntegerData;
 import org.dive4elements.river.client.shared.model.IntegerOptionsData;
 import org.dive4elements.river.client.shared.model.IntegerRangeData;
+import org.dive4elements.river.client.shared.model.MultiAttributeData;
+import org.dive4elements.river.client.shared.model.MultiDataItem;
 import org.dive4elements.river.client.shared.model.StringData;
 import org.dive4elements.river.client.shared.model.StringOptionsData;
 import org.dive4elements.river.client.shared.model.LongRangeData;
@@ -91,6 +97,9 @@
             else if (type.equals(LongRangeData.TYPE)) {
                 return createLongRangeData(element, name, label);
             }
+            else if (type.equals(MultiAttributeData.TYPE)) {
+                return createMultiAttributeData(element, name, label);
+            }
             else {
                 return createDefaultData(element, name, label);
             }
@@ -103,6 +112,52 @@
     }
 
 
+    public static Data createMultiAttributeData(
+        Element element,
+        String name,
+        String label) {
+        return new MultiAttributeData(
+            name,
+            label,
+            extractMultiDataItems(element));
+    }
+
+
+    protected static DataItem[] extractMultiDataItems(Element element) {
+        NodeList itemList = (NodeList) XMLUtils.xpath(
+            element,
+            "art:item",
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        if (itemList == null || itemList.getLength() == 0) {
+            logger.debug("No old data items found.");
+            return null;
+        }
+
+        int count = itemList.getLength();
+
+        MultiDataItem[] items = new MultiDataItem[count];
+
+         for (int i = 0; i < count; i++) {
+             Element tmp = (Element) itemList.item(i);
+
+             HashMap<String, String> data = new HashMap<String, String>();
+             String label = tmp.getAttributeNS(NS_URI, "label");
+             NamedNodeMap attributes = tmp.getAttributes();
+             for (int j = 0; j < attributes.getLength(); j++) {
+                 Node n = attributes.item(j);
+                 if (n.getNodeName().equals("label")) {
+                     continue;
+                 }
+                 data.put(n.getNodeName(), n.getNodeValue());
+             }
+             items[i] = new MultiDataItem(label, label, data);
+         }
+         return items;
+    }
+
+
     /**
      * This method creates a new instance of DefaultData which has no real type
      * set.


More information about the Dive4Elements-commits mailing list