diff flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java @ 2616:27cc95e65f18

Defined a style for WSPLGEN layers which are now modifiable. flys-artifacts/trunk@4200 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 05 Apr 2012 07:21:58 +0000
parents 41037d51c8b6
children 8aaa7f4ce06a
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java	Wed Apr 04 18:30:44 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java	Thu Apr 05 07:21:58 2012 +0000
@@ -5,12 +5,17 @@
 import java.awt.Color;
 import java.awt.Font;
 
+import javax.xml.xpath.XPathConstants;
+
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import de.intevation.artifacts.common.utils.XMLUtils;
 
 import de.intevation.flys.artifacts.model.MapserverStyle;
 import de.intevation.flys.artifacts.model.MapserverStyle.Clazz;
+import de.intevation.flys.artifacts.model.MapserverStyle.Expression;
 import de.intevation.flys.artifacts.model.MapserverStyle.Style;
 import de.intevation.flys.artifacts.model.MapserverStyle.Label;
 
@@ -80,6 +85,9 @@
     public final static String XPATH_SHOW_MAXIMUM =
         "/theme/field[@name='showmaximum']/@default";
 
+    public final static String XPATH_WSPLGEN_FIELDS =
+        "/theme[@name='WSPLGEN']/field";
+
 
     /** Parse string to be boolean with default if empty or unrecognized. */
     public static boolean parseBoolean(String value, boolean defaultsTo) {
@@ -404,6 +412,62 @@
     }
 
 
+    public static String createWSPLGENStyle(Document theme) {
+        NodeList categories = (NodeList) XMLUtils.xpath(
+            theme,
+            XPATH_WSPLGEN_FIELDS,
+            XPathConstants.NODESET);
+
+        return createWSPLGENStyle(categories).toString();
+    }
+
+    protected static MapserverStyle createWSPLGENStyle(NodeList categories) {
+        MapserverStyle ms = new MapserverStyle();
+
+        for (int i = 0, n = categories.getLength(); i < n; i++) {
+            Element  cat = (Element) categories.item(i);
+            String color = cat.getAttribute("default");
+            String name  = cat.getAttribute("name");
+
+            String expr;
+
+            try {
+                int length = name.length();
+                int idx    = Integer.valueOf(name.substring(length-1, length));
+
+                expr = createWSPLGENExpression(idx);
+            }
+            catch (NumberFormatException nfe) {
+                logger.warn("Error while parsing WSPLGEN category.", nfe);
+                continue;
+            }
+
+            Clazz      c = new Clazz(expr);
+            Style      s = new Style();
+            s.setColor(color.replace(",", ""));
+            s.setSize(5);
+
+            c.addItem(new Expression("(" + expr + ")"));
+            c.addItem(s);
+
+            ms.addClazz(c);
+        }
+
+        return ms;
+    }
+
+
+    protected static String createWSPLGENExpression(int idx) {
+        if (idx < 5) {
+            int lower = idx - 1;
+            return "[DIFF] >= " + lower + " AND  [DIFF] < " + idx;
+        }
+        else {
+            return "[DIFF] >= 4";
+        }
+    }
+
+
     public static String createMapserverStyle(Document theme) {
         String symbol    = getSymbol(theme);
         String backcolor = getBackgroundColorString(theme);

http://dive4elements.wald.intevation.org