[PATCH 2 of 3] Artifacts: Moved logic of ThemeUtils into ThemeDocument. TODO: Remove ThemeUtils
Wald Commits
scm-commit at wald.intevation.org
Fri Aug 23 01:17:42 CEST 2013
# HG changeset patch
# User Sascha L. Teichmann <teichmann at intevation.de>
# Date 1377213373 -7200
# Node ID 7a9cbb3a3d5a28ce0c275a40f450221de133864a
# Parent 1b35b2ddfc28ff94e5805185cb0106e93dff1f52
Artifacts: Moved logic of ThemeUtils into ThemeDocument. TODO: Remove ThemeUtils
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator.java Thu Aug 22 23:31:38 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator.java Fri Aug 23 01:16:13 2013 +0200
@@ -457,7 +457,7 @@
// Get Themeing information and add legend item.
if (theme != null) {
- textStyle = theme.parseTextStyle();
+ textStyle = theme.parseComplexTextStyle();
lineStyle = theme.parseComplexLineStyle();
if (fa.getLabel() != null) {
LegendItemCollection lic = new LegendItemCollection();
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java Thu Aug 22 23:31:38 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java Fri Aug 23 01:16:13 2013 +0200
@@ -189,7 +189,7 @@
// Get Themeing information and add legend item.
if (theme != null) {
- textStyle = theme.parseTextStyle();
+ textStyle = theme.parseComplexTextStyle();
// XXX: DEAD CODE // lineStyle = themeAccess.parseLineStyle();
if (fa.getLabel() != null) {
LegendItemCollection lic = new LegendItemCollection();
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Thu Aug 22 23:31:38 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Fri Aug 23 01:16:13 2013 +0200
@@ -82,7 +82,7 @@
}
// Apply text style.
- theme.parseTextStyle().apply(renderer);
+ theme.parseComplexTextStyle().apply(renderer);
return renderer;
}
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/themes/ThemeAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/themes/ThemeAccess.java Thu Aug 22 23:31:38 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.themes;
-
-import org.dive4elements.river.utils.ThemeUtil;
-
-import java.awt.Color;
-import java.awt.Font;
-
-import org.w3c.dom.Document;
-
-
-public class ThemeAccess
-{
- protected Document theme;
-
- protected Integer lineWidth;
-
- protected Color lineColor;
- protected Color textColor;
- protected Font font;
- protected String textOrientation;
- protected Color textBackground;
- protected Boolean showTextBackground;
- protected Color pointColor;
-
-
- public ThemeAccess(Document theme) {
- this.theme = theme;
- }
-
-
- public int parseLineWidth() {
- if (lineWidth == null) {
- lineWidth = ThemeUtil.parseLineWidth(theme);
- }
- return lineWidth;
- }
-
-
- public Color parseLineColorField() {
- if (lineColor == null) {
- lineColor = ThemeUtil.parseLineColorField(theme);
- if (lineColor == null) {
- lineColor = Color.BLACK;
- }
- }
- return lineColor;
- }
-
-
- public Color parseTextColor() {
- if (textColor == null) {
- textColor = ThemeUtil.parseTextColor(theme);
- if (textColor == null) {
- textColor = Color.BLACK;
- }
- }
- return textColor;
- }
-
-
- public Font parseTextFont() {
- if (font == null) {
- font = ThemeUtil.parseTextFont(theme);
- if (font == null) {
- font = new Font("Arial", Font.BOLD, 10);
- }
- }
- return font;
- }
-
-
- public String parseTextOrientation() {
- if (textOrientation == null) {
- textOrientation = ThemeUtil.parseTextOrientation(theme);
- }
- return textOrientation;
- }
-
-
- public Color parseTextBackground() {
- if (textBackground == null) {
- textBackground = ThemeUtil.parseTextBackground(theme);
- if (textBackground == null) {
- textBackground = Color.WHITE;
- }
- }
- return textBackground;
- }
-
- public boolean parseLabelShowBackground() {
- if (showTextBackground == null) {
- showTextBackground = ThemeUtil.parseLabelShowBackground(theme);
- }
- return showTextBackground;
- }
-
-
- public Color parsePointColor() {
- if (pointColor == null) {
- pointColor = ThemeUtil.parsePointColor(theme);
-
- if (pointColor == null) {
- return parseLineColorField();
- }
- }
-
- return pointColor;
- }
-
-
- public LineStyle parseLineStyle() {
- return new LineStyle(parseLineColorField(), Integer.valueOf(parseLineWidth()));
- }
-
- public TextStyle parseTextStyle() {
- return new TextStyle(
- parseTextColor(),
- parseTextFont(),
- parseTextBackground(),
- parseLabelShowBackground(),
- !parseTextOrientation().equals("horizontal"));
- }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java
--- a/artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java Thu Aug 22 23:31:38 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java Fri Aug 23 01:16:13 2013 +0200
@@ -11,11 +11,144 @@
import java.awt.Color;
import java.awt.Font;
+import org.apache.log4j.Logger;
import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+import org.dive4elements.river.artifacts.model.MapserverStyle;
+import org.dive4elements.river.artifacts.model.MapserverStyle.Clazz;
+import org.dive4elements.river.artifacts.model.MapserverStyle.Expression;
+import org.dive4elements.river.artifacts.model.MapserverStyle.Label;
+import org.dive4elements.river.artifacts.model.MapserverStyle.Style;
+import org.dive4elements.river.artifacts.resources.Resources;
import org.w3c.dom.Document;
public class ThemeDocument
{
+ private static Logger logger = Logger.getLogger(ThemeDocument.class);
+
+ private static final String MSG_ISOBATH_CLASS = "floodmap.isobath.class";
+
+ private static final String MSG_ISOBATH_LASTCLASS = "floodmap.isobath.lastclass";
+
+ public final static String XPATH_FILL_COLOR =
+ "/theme/field[@name='fillcolor']/@default";
+
+ public final static String XPATH_LINE_COLOR =
+ "/theme/field[@name='linecolor']/@default";
+
+ public final static String XPATH_AREA_LINE_COLOR =
+ "/theme/field[@name='areabordercolor']/@default";
+
+ public static final String XPATH_LINE_SIZE =
+ "/theme/field[@name='linesize']/@default";
+
+ public static final String XPATH_LINE_STYLE =
+ "/theme/field[@name='linetype']/@default";
+
+ public static final String XPATH_POINT_SIZE =
+ "/theme/field[@name='pointsize']/@default";
+
+ public static final String XPATH_POINT_COLOR =
+ "/theme/field[@name='pointcolor']/@default";
+
+ public final static String XPATH_SHOW_BORDER =
+ "/theme/field[@name='showborder']/@default";
+
+ public final static String XPATH_AREA_SHOW_BORDER =
+ "/theme/field[@name='showborder']/@default";
+
+ public final static String XPATH_SHOW_POINTS =
+ "/theme/field[@name='showpoints']/@default";
+
+ public final static String XPATH_SHOW_LINE =
+ "/theme/field[@name='showlines']/@default";
+
+ public final static String XPATH_SHOW_VERTICAL_LINE =
+ "/theme/field[@name='showverticalline']/@default";
+
+ public final static String XPATH_SHOW_HORIZONTAL_LINE =
+ "/theme/field[@name='showhorizontalline']/@default";
+
+ public final static String XPATH_SHOW_LINE_LABEL =
+ "/theme/field[@name='showlinelabel']/@default";
+
+ public final static String XPATH_SHOW_POINT_LABEL =
+ "/theme/field[@name='showpointlabel']/@default";
+
+ public final static String XPATH_SHOW_WIDTH =
+ "/theme/field[@name='showwidth']/@default";
+
+ public final static String XPATH_SHOW_LEVEL =
+ "/theme/field[@name='showlevel']/@default";
+
+ public final static String XPATH_TRANSPARENCY =
+ "/theme/field[@name='transparency']/@default";
+
+ public final static String XPATH_AREA_TRANSPARENCY =
+ "/theme/field[@name='areatransparency']/@default";
+
+ public final static String XPATH_SHOW_AREA =
+ "/theme/field[@name='showarea']/@default";
+
+ public final static String XPATH_SHOW_MIDDLE_HEIGHT =
+ "/theme/field[@name='showmiddleheight']/@default";
+
+ public final static String XPATH_LABEL_FONT_COLOR =
+ "/theme/field[@name='labelfontcolor']/@default";
+
+ public final static String XPATH_LABEL_FONT_SIZE =
+ "/theme/field[@name='labelfontsize']/@default";
+
+ public final static String XPATH_LABEL_FONT_FACE =
+ "/theme/field[@name='labelfontface']/@default";
+
+ public final static String XPATH_LABEL_FONT_STYLE =
+ "/theme/field[@name='labelfontstyle']/@default";
+
+ public final static String XPATH_TEXT_ORIENTATION =
+ "/theme/field[@name='textorientation']/@default";
+
+ public final static String XPATH_LABEL_BGCOLOR =
+ "/theme/field[@name='labelbgcolor']/@default";
+
+ public final static String XPATH_LABEL_SHOW_BACKGROUND =
+ "/theme/field[@name='labelshowbg']/@default";
+
+ public final static String XPATH_BACKGROUND_COLOR =
+ "/theme/field[@name='backgroundcolor']/@default";
+
+ public final static String XPATH_AREA_BACKGROUND_COLOR =
+ "/theme/field[@name='areabgcolor']/@default";
+
+ public final static String XPATH_SYMBOL =
+ "/theme/field[@name='symbol']/@default";
+
+ public final static String XPATH_SHOW_MINIMUM =
+ "/theme/field[@name='showminimum']/@default";
+
+ public final static String XPATH_SHOW_MAXIMUM =
+ "/theme/field[@name='showmaximum']/@default";
+
+ public final static String XPATH_WSPLGEN_FIELDS =
+ "/theme[@name='WSPLGEN']/field";
+
+ public final static String XPATH_WSPLGEN_STARTCOLOR =
+ "/theme/field[@name='startcolor']/@default";
+
+ public final static String XPATH_WSPLGEN_ENDCOLOR =
+ "/theme/field[@name='endcolor']/@default";
+
+ public final static String XPATH_WSPLGEN_NUMCLASSES =
+ "/theme/field[@name='numclasses']/@default";
+
+ /** XPATH to bandwidth field. */
+ public final static String XPATH_BANDWIDTH =
+ "/theme/field[@name='bandwidth']/@default";
+
+ /** XPATH to find showextramark field. */
+ public final static String XPATH_SHOWEXTRAMARK =
+ "/theme/field[@name='showextramark']/@default";
+
private Document document;
public ThemeDocument() {
@@ -29,82 +162,234 @@
return document;
}
- public Color parseLineColorField() {
- return null;
+ /** Parse string to be boolean with default if empty or unrecognized. */
+ public static boolean parseBoolean(String value, boolean defaultsTo) {
+ if (value == null || value.length() == 0) {
+ return defaultsTo;
+ }
+ if (value.equals("false")) {
+ return false;
+ }
+ else if (value.equals("true")) {
+ return true;
+ }
+ else {
+ return defaultsTo;
+ }
+ }
+
+
+ /**
+ * Attempt converting \param value to an integer, in failing cases,
+ * return \param defaultsTo.
+ * @param value String to be converted to integer.
+ * @param defaultsTo Default to return if conversion failed.
+ * @return \param value as integer or defaultsto if conversion failed.
+ */
+ public static int parseInteger(String value, int defaultsTo) {
+ if (value == null || value.length() == 0) {
+ return defaultsTo;
+ }
+
+ try {
+ return Integer.parseInt(value);
+ }
+ catch (NumberFormatException nfe) {
+ // do nothing
+ }
+
+ return defaultsTo;
+ }
+
+
+ /**
+ * Attempt converting \param value to a double, in failing cases,
+ * return \param defaultsTo.
+ * @param value String to be converted to double.
+ * @param defaultsTo Default to return if conversion failed.
+ * @return \param value as integer or defaultsto if conversion failed.
+ */
+ public static double parseDouble(String value, double defaultsTo) {
+ if (value == null || value.length() == 0) {
+ return defaultsTo;
+ }
+
+ try {
+ return Double.parseDouble(value);
+ }
+ catch (NumberFormatException nfe) {
+ // do nothing
+ }
+
+ return defaultsTo;
}
public boolean parseShowLineLabel() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_LINE_LABEL, null);
+ return parseBoolean(show, false);
}
public boolean parseShowWidth() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_WIDTH, null);
+ return parseBoolean(show, false);
}
public boolean parseShowLevel() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_LEVEL, null);
+ return parseBoolean(show, false);
+ }
+
+ public String parseTextOrientation() {
+ String o = XMLUtils.xpathString(document, XPATH_TEXT_ORIENTATION, null);
+ if ("true".equals(o)) {
+ return "horizontal";
+ }
+ else {
+ return "vertical";
+ }
}
public boolean parseShowMiddleHeight() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_MIDDLE_HEIGHT, null);
+ return parseBoolean(show, false);
}
public boolean parseLabelShowBackground() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_LABEL_SHOW_BACKGROUND, null);
+ return parseBoolean(show, false);
}
public Font parseTextFont() {
- return null;
+ String font = XMLUtils.xpathString(document, XPATH_LABEL_FONT_FACE, null);
+ if (font == null || font.length() == 0) {
+ return null;
+ }
+
+ int size = parseTextSize();
+ int style = parseTextStyle();
+ Font f = new Font(font, style, size);
+ return f;
}
public Color parseTextColor() {
- return null;
+ return parseRGB(getTextColorString());
+ }
+
+ public String getTextColorString() {
+ String textColor = XMLUtils.xpathString(document, XPATH_LABEL_FONT_COLOR, null);
+ return textColor;
}
public Color parseTextBackground() {
- return null;
+ String color = getLabelBackgroundColorString();
+ if (color == null || color.length() == 0) {
+ return Color.WHITE;
+ }
+ return parseRGB(color);
}
+ public String getLabelBackgroundColorString() {
+ return XMLUtils.xpathString(document, XPATH_LABEL_BGCOLOR, null);
+ }
+
+
public int parseLineWidth() {
+ String size = XMLUtils.xpathString(document, XPATH_LINE_SIZE, null);
+ if (size == null || size.length() == 0) {
+ return 0;
+ }
+
+ try {
+ return Integer.parseInt(size);
+ }
+ catch (NumberFormatException nfe) {
+ logger.warn("Unable to set line size from string: '" + size + "'");
+ }
return 0;
}
public float [] parseLineStyle() {
- return null;
+ String dash = XMLUtils.xpathString(document, XPATH_LINE_STYLE, null);
+
+ float[] def = {10};
+ if (dash == null || dash.length() == 0) {
+ return def;
+ }
+
+ String[] pattern = dash.split(",");
+ if(pattern.length == 1) {
+ return def;
+ }
+
+ try {
+ float[] dashes = new float[pattern.length];
+ for (int i = 0; i < pattern.length; i++) {
+ dashes[i] = Float.parseFloat(pattern[i]);
+ }
+ return dashes;
+ }
+ catch(NumberFormatException nfe) {
+ logger.warn("Unable to set dash from string: '" + dash + "'");
+ return def;
+ }
}
public int parsePointWidth() {
- return 0;
+ String width = XMLUtils.xpathString(document, XPATH_POINT_SIZE, null);
+
+ return parseInteger(width, 3);
}
public Color parsePointColor() {
- return null;
+ String color = XMLUtils.xpathString(document, XPATH_POINT_COLOR, null);
+ logger.debug("parsePointColor(): color = " + color);
+ return parseColor(color);
}
public boolean parseShowPoints() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_POINTS, null);
+ return parseBoolean(show, false);
}
public boolean parseShowLine() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_LINE, null);
+ return parseBoolean(show, true);
}
- public boolean parseShowMinimum() {
- return false;
+ public int parseTextStyle() {
+ return parseTextStyle(XPATH_LABEL_FONT_STYLE);
}
- public boolean parseShowMaximum() {
- return false;
+ public int parseTextStyle(String path) {
+ String style = XMLUtils.xpathString(document, path, null);
+ if (style == null || style.length() == 0) {
+ return Font.PLAIN;
+ }
+
+ if (style.equals("italic")) {
+ return Font.ITALIC;
+ }
+ else if (style.equals("bold")) {
+ return Font.BOLD;
+ }
+ else {
+ return Font.PLAIN;
+ }
}
- public TextStyle parseTextStyle() {
- // from ThemeAccess
- return null;
+ public TextStyle parseComplexTextStyle() {
+ return new TextStyle(
+ parseTextColor(),
+ parseTextFont(),
+ parseTextBackground(),
+ parseLabelShowBackground(),
+ !parseTextOrientation().equals("horizontal"));
}
public LineStyle parseComplexLineStyle() {
- // from ThemeAccess
- return null;
+ return new LineStyle(
+ parseLineColorField(),
+ Integer.valueOf(parseLineWidth()));
}
public Color parseComplexLineColorField() {
@@ -112,70 +397,364 @@
}
public boolean parseShowVerticalLine() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_VERTICAL_LINE, null);
+ return parseBoolean(show, true);
}
public boolean parseShowHorizontalLine() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_HORIZONTAL_LINE, null);
+ return parseBoolean(show, true);
}
public double parseBandWidth() {
- return 0d;
+ String bandWidth = XMLUtils.xpathString(document, XPATH_BANDWIDTH, null);
+ return parseDouble(bandWidth, 0);
}
- public int parseAreaTransparency() {
- return 0;
- }
+ public static Color parseColor(String colorString) {
+ if (colorString == null || colorString.length() == 0) {
+ return null;
+ }
+ else if (colorString.indexOf("#") == 0) {
+ return parseHexColor(colorString);
+ }
+ else if (colorString.indexOf(",") >= 0) {
+ return parseRGB(colorString);
+ }
- public static Color parseColor(String s) {
return null;
}
- public String getAreaBackgroundColorString() {
- return null;
+
+ /**
+ * Parse a string like "#00CC22" and return the corresponding color.
+ *
+ * @param hex The hex color value.
+ *
+ * @return a Color or null, if <i>hex</i> is empty.
+ */
+ public static Color parseHexColor(String hex) {
+ if (hex == null) {
+ return null;
+ }
+
+ return Color.decode(hex);
}
- public boolean parseAreaShowBorder() {
- return false;
- }
public boolean parseShowArea() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_AREA, null);
+ return parseBoolean(show, false);
}
public boolean parseShowPointLabel() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOW_POINT_LABEL, null);
+ return parseBoolean(show, false);
}
public boolean parseShowExtraMark() {
- return false;
+ String show = XMLUtils.xpathString(document, XPATH_SHOWEXTRAMARK, null);
+ return parseBoolean(show, false);
}
- public String createMapserverStyle() {
- return null;
+ public int parseTextSize() {
+ return parseTextSize(XPATH_LABEL_FONT_SIZE);
}
- public String createDynamicMapserverStyle(
- float from,
- float to,
- float step,
- CallMeta meta
- ) {
- return null;
+ public int parseTextSize(String path) {
+ String size = XMLUtils.xpathString(document, path, null);
+ if (size == null || size.length() == 0) {
+ return 10;
+ }
+
+ try {
+ return Integer.parseInt(size);
+ }
+ catch (NumberFormatException nfe) {
+ }
+ return 10;
}
- public Color parseAreaBackgroundColor() {
- return null;
+ /**
+ * Parse a string like "103, 100, 0" and return a corresping color.
+ * @param rgbtext Color as string representation, e.g. "255,0,20".
+ * @return Color, null in case of issues.
+ */
+ public static Color parseRGB(String rgbtext) {
+ if (rgbtext == null) {
+ return null;
+ }
+ String rgb[] = rgbtext.split(",");
+ Color c = null;
+ try {
+ c = new Color(
+ Integer.parseInt(rgb[0].trim()),
+ Integer.parseInt(rgb[1].trim()),
+ Integer.parseInt(rgb[2].trim()));
+ }
+ catch (NumberFormatException nfe) {
+ c = null;
+ }
+ return c;
}
- public static int parseInteger(String s, int def) {
- return def;
+ public String getLineColorString() {
+ return XMLUtils.xpathString(document, XPATH_LINE_COLOR, null);
}
- public String getAreaTransparencyString() {
- return null;
+
+ /** Get show border as string. */
+ public String getShowBorderString() {
+ return XMLUtils.xpathString(document, XPATH_SHOW_BORDER, null);
}
+
+ /** Get fill color as string. */
+ public String getFillColorString() {
+ return XMLUtils.xpathString(document, XPATH_FILL_COLOR, null);
+ }
+
+
+ public String getBackgroundColorString() {
+ return XMLUtils.xpathString(document, XPATH_BACKGROUND_COLOR, null);
+ }
+
+ public String getSymbol() {
+ return XMLUtils.xpathString(document, XPATH_SYMBOL, null);
+ }
+
+
+ public String getTransparencyString() {
+ return XMLUtils.xpathString(document, XPATH_TRANSPARENCY, null);
+ }
+
+
+ public String getAreaTransparencyString() {
+ return XMLUtils.xpathString(document, XPATH_AREA_TRANSPARENCY, null);
+ }
+
+
+ public String getShowMinimum() {
+ return XMLUtils.xpathString(document, XPATH_SHOW_MINIMUM, null);
+ }
+
+
+ public String getShowMaximum() {
+ return XMLUtils.xpathString(document, XPATH_SHOW_MAXIMUM, null);
+ }
+
+
+ /**
+ * Gets color from color field.
+ * @param theme the theme document.
+ * @return color.
+ */
+ public Color parseFillColorField() {
+ return parseRGB(getFillColorString());
+ }
+
+
+ public boolean parseShowBorder() {
+ return parseBoolean(getShowBorderString(), false);
+ }
+
+
+ public int parseTransparency() {
+ return parseInteger(getTransparencyString(), 50);
+ }
+
+
+ /**
+ * Gets color from color field.
+ * @param theme the theme document.
+ * @return color.
+ */
+ public Color parseLineColorField() {
+ String lineColorStr = getLineColorString();
+ logger.debug("parseLineColorField: lineColorStr = " +
+ (lineColorStr == null ? "null" : lineColorStr));
+ return parseColor(lineColorStr);
+ }
+
+
+ public Color parseAreaLineColorField() {
+ String lineColorStr = getAreaLineColorString();
+ logger.debug("parseLineColorField: lineColorStr = " +
+ (lineColorStr == null ? "null" : lineColorStr));
+ return parseColor(lineColorStr);
+ }
+
+
+ private String getAreaLineColorString() {
+ return XMLUtils.xpathString(document, XPATH_AREA_LINE_COLOR, null);
+ }
+
+
+ public boolean parseShowMinimum() {
+ return parseBoolean(getShowMinimum(), false);
+ }
+
+
+ public boolean parseShowMaximum() {
+ return parseBoolean(getShowMaximum(), false);
+ }
+
+
+ /**
+ * Creates a MapserverStyle from the given XML theme.
+ * This method uses a start- and endcolor to interpolate a
+ * given number of color classes for the MapserverStyle.
+ * @param theme
+ * @return String representation of the MapserverStyle
+ */
+ public String createDynamicMapserverStyle(
+ float from, float to, float step, CallMeta meta)
+ {
+ MapserverStyle ms = new MapserverStyle();
+
+ String strStartColor = XMLUtils.xpathString(document, XPATH_WSPLGEN_STARTCOLOR, null);
+ Color startColor = strStartColor != null ? parseColor(strStartColor) : new Color(178, 201, 215);
+ String strEndColor = XMLUtils.xpathString(document, XPATH_WSPLGEN_ENDCOLOR, null);
+ Color endColor = strEndColor != null? parseColor(strEndColor) : new Color(2, 27, 42);
+
+ to = to != 0 ? to : 9999;
+ step = step != 0 ? step : to;
+
+ int numClasses = (int)((to - from) / step);
+
+ float rd = (endColor.getRed() - startColor.getRed()) / (float)numClasses;
+ float gd = (endColor.getGreen() - startColor.getGreen()) / (float)numClasses;
+ float bd = (endColor.getBlue() - startColor.getBlue()) / (float)numClasses;
+
+ if (numClasses > 1) {
+ // Desktop Flys always added a last "and larger class"
+ numClasses += 1;
+ }
+
+ for (int n = 0; n < numClasses; n++) {
+ StringBuilder newColor = new StringBuilder();
+ newColor.append(startColor.getRed() + Math.round(n * rd));
+ newColor.append(' ');
+ newColor.append(startColor.getGreen() + Math.round(n * gd));
+ newColor.append(' ');
+ newColor.append(startColor.getBlue() + Math.round(n * bd));
+
+ String expr = createWSPLGENClassExpression(from + n * step, step, n + 1, numClasses);
+ String name = createWSPLGENClassName(from + n * step, step, n + 1, numClasses, meta);
+
+ Clazz c = new Clazz(name);
+ Style s = new Style();
+ s.setColor(newColor.toString());
+ s.setSize(5);
+
+ c.addItem(new Expression("(" + expr + ")"));
+ c.addItem(s);
+
+ ms.addClazz(c);
+ }
+
+ return ms.toString();
+ }
+
+
+ protected static String createWSPLGENClassExpression(float val, float step, int idx, int maxIdx) {
+ if (idx < maxIdx) {
+ return "[DIFF] >= " + val + " AND [DIFF] < " + (val + step);
+ }
+ else {
+ return "[DIFF] >= " + val;
+ }
+ }
+
+ /**
+ * Creates a class name for the mapfile style that visualizes a floodmap.
+ * The class names are used in the map's legend.
+ *
+ * @param val Current isobath value.
+ * @param step Difference between to class values.
+ * @param idx Current class index that is being processed.
+ * @param maxIdx Highest class index.
+ * @param meta Caller meta object used to determine locale.
+ * @return
+ */
+ protected static String createWSPLGENClassName(float val, float step, int idx, int maxIdx, CallMeta meta) {
+ assert meta != null : "CallMeta instance is null";
+
+ if (idx < maxIdx) {
+ return Resources.getMsg(meta, MSG_ISOBATH_CLASS,
+ new Object[] {val, val + step});
+ }
+ else {
+ return Resources.getMsg(meta, MSG_ISOBATH_LASTCLASS,
+ new Object[] {val});
+ }
+ }
+
+
+ public String createMapserverStyle() {
+ String symbol = getSymbol();
+ String backcolor = getLabelBackgroundColorString();
+ String linecolor = getLineColorString();
+ if (linecolor == null || "".equals(linecolor)) {
+ logger.warn("createMapserverStyle: linecolor String is empty");
+ linecolor = "0,128,255";
+ }
+
+ int linewidth = parseLineWidth();
+
+ MapserverStyle ms = new MapserverStyle();
+
+ Clazz c = new Clazz(" ");
+
+ Style s = new Style();
+ s.setOutlineColor(linecolor.replace(",", " "));
+
+ if (backcolor != null && backcolor.length() > 0) {
+ s.setColor(backcolor.replace(",", " "));
+ }
+
+ s.setSize(linewidth);
+ s.setSymbol(symbol);
+ c.addItem(s);
+
+ String textcolor = getTextColorString();
+ int textsize = parseTextSize();
+
+ if (textcolor != null && textcolor.length() > 0 && textsize > 0) {
+ Label l = new Label();
+ l.setColor(textcolor.replace(",", " "));
+ l.setSize(textsize);
+ c.addItem(l);
+ }
+
+ ms.addClazz(c);
+
+ return ms.toString();
+ }
+
+
+ public String getAreaBackgroundColorString() {
+ return XMLUtils.xpathString(document, XPATH_AREA_BACKGROUND_COLOR, null);
+ }
+
+
+ public Color parseAreaBackgroundColor() {
+ return parseColor(getAreaBackgroundColorString());
+ }
+
+
+ public int parseAreaTransparency() {
+ return parseInteger(getAreaTransparencyString(), 50);
+ }
+
+
+ public boolean parseAreaShowBorder() {
+ return parseBoolean(getAreaShowBorderString(), false);
+ }
+
+
+ private String getAreaShowBorderString() {
+ return XMLUtils.xpathString(document, XPATH_AREA_SHOW_BORDER, null);
+ }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
-
diff -r 1b35b2ddfc28 -r 7a9cbb3a3d5a artifacts/src/main/java/org/dive4elements/river/utils/ThemeUtil.java
--- a/artifacts/src/main/java/org/dive4elements/river/utils/ThemeUtil.java Thu Aug 22 23:31:38 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/utils/ThemeUtil.java Fri Aug 23 01:16:13 2013 +0200
@@ -8,820 +8,9 @@
package org.dive4elements.river.utils;
-import org.dive4elements.artifacts.CallMeta;
-import org.dive4elements.artifacts.common.utils.XMLUtils;
-import org.dive4elements.river.artifacts.model.MapserverStyle;
-import org.dive4elements.river.artifacts.model.MapserverStyle.Clazz;
-import org.dive4elements.river.artifacts.model.MapserverStyle.Expression;
-import org.dive4elements.river.artifacts.model.MapserverStyle.Label;
-import org.dive4elements.river.artifacts.model.MapserverStyle.Style;
-import org.dive4elements.river.artifacts.resources.Resources;
-
-import java.awt.Color;
-import java.awt.Font;
-
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-
-
-/**
- * Utility to deal with themes and their representations.
- */
public class ThemeUtil {
- /** Private logger. */
- private static Logger logger =
- Logger.getLogger(ThemeUtil.class);
+ // KILL ME!
- private static final String MSG_ISOBATH_CLASS = "floodmap.isobath.class";
-
- private static final String MSG_ISOBATH_LASTCLASS = "floodmap.isobath.lastclass";
-
- public final static String XPATH_FILL_COLOR =
- "/theme/field[@name='fillcolor']/@default";
-
- public final static String XPATH_LINE_COLOR =
- "/theme/field[@name='linecolor']/@default";
-
- public final static String XPATH_AREA_LINE_COLOR =
- "/theme/field[@name='areabordercolor']/@default";
-
- public static final String XPATH_LINE_SIZE =
- "/theme/field[@name='linesize']/@default";
-
- public static final String XPATH_LINE_STYLE =
- "/theme/field[@name='linetype']/@default";
-
- public static final String XPATH_POINT_SIZE =
- "/theme/field[@name='pointsize']/@default";
-
- public static final String XPATH_POINT_COLOR =
- "/theme/field[@name='pointcolor']/@default";
-
- public final static String XPATH_SHOW_BORDER =
- "/theme/field[@name='showborder']/@default";
-
- public final static String XPATH_AREA_SHOW_BORDER =
- "/theme/field[@name='showborder']/@default";
-
- public final static String XPATH_SHOW_POINTS =
- "/theme/field[@name='showpoints']/@default";
-
- public final static String XPATH_SHOW_LINE =
- "/theme/field[@name='showlines']/@default";
-
- public final static String XPATH_SHOW_VERTICAL_LINE =
- "/theme/field[@name='showverticalline']/@default";
-
- public final static String XPATH_SHOW_HORIZONTAL_LINE =
- "/theme/field[@name='showhorizontalline']/@default";
-
- public final static String XPATH_SHOW_LINE_LABEL =
- "/theme/field[@name='showlinelabel']/@default";
-
- public final static String XPATH_SHOW_POINT_LABEL =
- "/theme/field[@name='showpointlabel']/@default";
-
- public final static String XPATH_SHOW_WIDTH =
- "/theme/field[@name='showwidth']/@default";
-
- public final static String XPATH_SHOW_LEVEL =
- "/theme/field[@name='showlevel']/@default";
-
- public final static String XPATH_TRANSPARENCY =
- "/theme/field[@name='transparency']/@default";
-
- public final static String XPATH_AREA_TRANSPARENCY =
- "/theme/field[@name='areatransparency']/@default";
-
- public final static String XPATH_SHOW_AREA =
- "/theme/field[@name='showarea']/@default";
-
- public final static String XPATH_SHOW_MIDDLE_HEIGHT =
- "/theme/field[@name='showmiddleheight']/@default";
-
- public final static String XPATH_LABEL_FONT_COLOR =
- "/theme/field[@name='labelfontcolor']/@default";
-
- public final static String XPATH_LABEL_FONT_SIZE =
- "/theme/field[@name='labelfontsize']/@default";
-
- public final static String XPATH_LABEL_FONT_FACE =
- "/theme/field[@name='labelfontface']/@default";
-
- public final static String XPATH_LABEL_FONT_STYLE =
- "/theme/field[@name='labelfontstyle']/@default";
-
- public final static String XPATH_TEXT_ORIENTATION =
- "/theme/field[@name='textorientation']/@default";
-
- public final static String XPATH_LABEL_BGCOLOR =
- "/theme/field[@name='labelbgcolor']/@default";
-
- public final static String XPATH_LABEL_SHOW_BACKGROUND =
- "/theme/field[@name='labelshowbg']/@default";
-
- public final static String XPATH_BACKGROUND_COLOR =
- "/theme/field[@name='backgroundcolor']/@default";
-
- public final static String XPATH_AREA_BACKGROUND_COLOR =
- "/theme/field[@name='areabgcolor']/@default";
-
- public final static String XPATH_SYMBOL =
- "/theme/field[@name='symbol']/@default";
-
- public final static String XPATH_SHOW_MINIMUM =
- "/theme/field[@name='showminimum']/@default";
-
- public final static String XPATH_SHOW_MAXIMUM =
- "/theme/field[@name='showmaximum']/@default";
-
- public final static String XPATH_WSPLGEN_FIELDS =
- "/theme[@name='WSPLGEN']/field";
-
- public final static String XPATH_WSPLGEN_STARTCOLOR =
- "/theme/field[@name='startcolor']/@default";
-
- public final static String XPATH_WSPLGEN_ENDCOLOR =
- "/theme/field[@name='endcolor']/@default";
-
- public final static String XPATH_WSPLGEN_NUMCLASSES =
- "/theme/field[@name='numclasses']/@default";
-
- /** XPATH to bandwidth field. */
- public final static String XPATH_BANDWIDTH =
- "/theme/field[@name='bandwidth']/@default";
-
- /** XPATH to find showextramark field. */
- public final static String XPATH_SHOWEXTRAMARK =
- "/theme/field[@name='showextramark']/@default";
-
- /** Parse string to be boolean with default if empty or unrecognized. */
- public static boolean parseBoolean(String value, boolean defaultsTo) {
- if (value == null || value.length() == 0) {
- return defaultsTo;
- }
- if (value.equals("false")) {
- return false;
- }
- else if (value.equals("true")) {
- return true;
- }
- else {
- return defaultsTo;
- }
- }
-
-
- /**
- * Attempt converting \param value to an integer, in failing cases,
- * return \param defaultsTo.
- * @param value String to be converted to integer.
- * @param defaultsTo Default to return if conversion failed.
- * @return \param value as integer or defaultsto if conversion failed.
- */
- public static int parseInteger(String value, int defaultsTo) {
- if (value == null || value.length() == 0) {
- return defaultsTo;
- }
-
- try {
- return Integer.parseInt(value);
- }
- catch (NumberFormatException nfe) {
- // do nothing
- }
-
- return defaultsTo;
- }
-
-
- /**
- * Attempt converting \param value to a double, in failing cases,
- * return \param defaultsTo.
- * @param value String to be converted to double.
- * @param defaultsTo Default to return if conversion failed.
- * @return \param value as integer or defaultsto if conversion failed.
- */
- public static double parseDouble(String value, double defaultsTo) {
- if (value == null || value.length() == 0) {
- return defaultsTo;
- }
-
- try {
- return Double.parseDouble(value);
- }
- catch (NumberFormatException nfe) {
- // do nothing
- }
-
- return defaultsTo;
- }
-
-
- /**
- * Parses line width, defaulting to 0.
- * @param theme the theme
- */
- public static int parseLineWidth(Document theme) {
- String size = XMLUtils.xpathString(theme, XPATH_LINE_SIZE, null);
- if (size == null || size.length() == 0) {
- return 0;
- }
-
- try {
- return Integer.parseInt(size);
- }
- catch (NumberFormatException nfe) {
- logger.warn("Unable to set line size from string: '" + size + "'");
- }
- return 0;
- }
-
-
- /**
- * Parse band width, defaulting to 0.
- * @param theme the theme.
- */
- public static double parseBandWidth(Document theme) {
- String bandWidth = XMLUtils.xpathString(theme, XPATH_BANDWIDTH, null);
-
- return parseDouble(bandWidth, 0);
- }
-
-
- public static int parsePointWidth(Document theme) {
- String width = XMLUtils.xpathString(theme, XPATH_POINT_SIZE, null);
-
- return parseInteger(width, 3);
- }
-
-
- public static Color parsePointColor(Document theme) {
- String color = XMLUtils.xpathString(theme, XPATH_POINT_COLOR, null);
- logger.debug("parsePointColor(): color = " + color);
- return parseColor(color);
- }
-
-
- /**
- * Parses the line style, defaulting to '10'.
- * @param theme The theme.
- */
- public static float[] parseLineStyle(Document theme) {
- String dash = XMLUtils.xpathString(theme, XPATH_LINE_STYLE, null);
-
- float[] def = {10};
- if (dash == null || dash.length() == 0) {
- return def;
- }
-
- String[] pattern = dash.split(",");
- if(pattern.length == 1) {
- return def;
- }
-
- try {
- float[] dashes = new float[pattern.length];
- for (int i = 0; i < pattern.length; i++) {
- dashes[i] = Float.parseFloat(pattern[i]);
- }
- return dashes;
- }
- catch(NumberFormatException nfe) {
- logger.warn("Unable to set dash from string: '" + dash + "'");
- return def;
- }
- }
-
-
- /**
- * Parses text size, defaulting to 10.
- * @param theme The theme.
- */
- public static int parseTextSize(Document theme, String path) {
- String size = XMLUtils.xpathString(theme, path, null);
- if (size == null || size.length() == 0) {
- return 10;
- }
-
- try {
- return Integer.parseInt(size);
- }
- catch (NumberFormatException nfe) {
- }
- return 10;
- }
-
-
- public static int parseTextSize(Document theme) {
- return parseTextSize(theme, XPATH_LABEL_FONT_SIZE);
- }
-
-
- /**
- * Parses the attribute 'showextramark', defaults to false.
- * @param theme The theme.
- */
- public static boolean parseShowExtraMark(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOWEXTRAMARK, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses the attribute 'showpoints', defaults to false.
- * @param theme The theme.
- */
- public static boolean parseShowPoints(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_POINTS, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses the attribute 'showmiddleheight', defaults to false.
- * @param theme The theme.
- */
- public static boolean parseShowMiddleHeight(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_MIDDLE_HEIGHT, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses the attribute 'showarea', defaults to false.
- * @param theme The theme.
- */
- public static boolean parseShowArea(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_AREA, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses the attribute 'showverticalline', defaults to true.
- * @param theme The theme.
- */
- public static boolean parseShowVerticalLine(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_VERTICAL_LINE, null);
- return parseBoolean(show, true);
- }
-
- /**
- * Parses the attribute 'showhorizontalline', defaults to true.
- * @param theme The theme.
- */
- public static boolean parseShowHorizontalLine(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_HORIZONTAL_LINE, null);
- return parseBoolean(show, true);
- }
-
- /**
- * Parses the attribute 'showlines', defaults to true.
- * @param theme The theme.
- */
- public static boolean parseShowLine(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_LINE, null);
- return parseBoolean(show, true);
- }
-
- /**
- * Parses the attribute 'showlinelabel', defaults to true.
- * @param theme The theme.
- */
- public static boolean parseShowLineLabel(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_LINE_LABEL, null);
- return parseBoolean(show, false);
- }
-
- public static boolean parseShowPointLabel(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_POINT_LABEL, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses text color.
- * @param theme The theme.
- */
- public static Color parseTextColor(Document theme) {
- return parseRGB(getTextColorString(theme));
- }
-
-
- /**
- * Parses the font.
- * @param theme The theme.
- */
- public static Font parseTextFont(Document theme) {
- String font = XMLUtils.xpathString(theme, XPATH_LABEL_FONT_FACE, null);
- if (font == null || font.length() == 0) {
- return null;
- }
-
- int size = parseTextSize(theme);
- int style = parseTextStyle(theme);
- Font f = new Font (font, style, size);
- return f;
- }
-
-
- /**
- * Parses the text style, defaults to 'Font.PLAIN'.
- * @param theme The theme.
- */
- public static int parseTextStyle(Document theme, String path) {
- String style = XMLUtils.xpathString(theme, path, null);
- if (style == null || style.length() == 0) {
- return Font.PLAIN;
- }
-
- if (style.equals("italic")) {
- return Font.ITALIC;
- }
- else if (style.equals("bold")) {
- return Font.BOLD;
- }
- else {
- return Font.PLAIN;
- }
- }
-
-
- public static int parseTextStyle(Document theme) {
- return parseTextStyle(theme, XPATH_LABEL_FONT_STYLE);
- }
-
-
- public static boolean parseShowWidth(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_WIDTH, null);
- return parseBoolean(show, false);
- }
-
-
- public static boolean parseShowLevel(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_SHOW_LEVEL, null);
- return parseBoolean(show, false);
- }
-
- /**
- * Parses the textorientation, defaults to 'vertical'.
- * @param theme The theme.
- */
- public static String parseTextOrientation(Document theme) {
- String o = XMLUtils.xpathString(theme, XPATH_TEXT_ORIENTATION, null);
- if ("true".equals(o)) {
- return "horizontal";
- }
- else {
- return "vertical";
- }
- }
-
-
- /**
- * Parses the text background color, defaults to white.
- * @param theme The theme.
- */
- public static Color parseTextBackground(Document theme) {
- String color = getLabelBackgroundColorString(theme);
- if (color == null || color.length() == 0) {
- return Color.WHITE;
- }
- return parseRGB(color);
- }
-
-
- /**
- * Parses the attribute whether to show background or not, defaults to
- * false.
- * @param theme The theme.
- */
- public static boolean parseLabelShowBackground(Document theme) {
- String show = XMLUtils.xpathString(theme, XPATH_LABEL_SHOW_BACKGROUND, null);
- return parseBoolean(show, false);
- }
-
-
- public static Color parseColor(String colorString) {
- if (colorString == null || colorString.length() == 0) {
- return null;
- }
- else if (colorString.indexOf("#") == 0) {
- return parseHexColor(colorString);
- }
- else if (colorString.indexOf(",") >= 0) {
- return parseRGB(colorString);
- }
-
- return null;
- }
-
-
- /**
- * Parse a string like "#00CC22" and return the corresponding color.
- *
- * @param hex The hex color value.
- *
- * @return a Color or null, if <i>hex</i> is empty.
- */
- public static Color parseHexColor(String hex) {
- if (hex == null) {
- return null;
- }
-
- return Color.decode(hex);
- }
-
- /**
- * Parse a string like "103, 100, 0" and return a corresping color.
- * @param rgbtext Color as string representation, e.g. "255,0,20".
- * @return Color, null in case of issues.
- */
- public static Color parseRGB(String rgbtext) {
- if (rgbtext == null) {
- return null;
- }
- String rgb[] = rgbtext.split(",");
- Color c = null;
- try {
- c = new Color(
- Integer.parseInt(rgb[0].trim()),
- Integer.parseInt(rgb[1].trim()),
- Integer.parseInt(rgb[2].trim()));
- }
- catch (NumberFormatException nfe) {
- c = null;
- }
- return c;
- }
-
-
- public static String getLineColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_LINE_COLOR, null);
- }
-
-
- /** Get show border as string. */
- public static String getShowBorderString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_SHOW_BORDER, null);
- }
-
-
- /** Get fill color as string. */
- public static String getFillColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_FILL_COLOR, null);
- }
-
-
- public static String getLabelBackgroundColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_LABEL_BGCOLOR, null);
- }
-
-
- public static String getBackgroundColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_BACKGROUND_COLOR, null);
- }
-
-
- public static String getTextColorString(Document theme) {
- String textColor = XMLUtils.xpathString(theme, XPATH_LABEL_FONT_COLOR, null);
- return textColor;
- }
-
-
- public static String getSymbol(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_SYMBOL, null);
- }
-
-
- public static String getTransparencyString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_TRANSPARENCY, null);
- }
-
-
- public static String getAreaTransparencyString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_AREA_TRANSPARENCY, null);
- }
-
-
- public static String getShowMinimum(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_SHOW_MINIMUM, null);
- }
-
-
- public static String getShowMaximum(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_SHOW_MAXIMUM, null);
- }
-
-
- /**
- * Gets color from color field.
- * @param theme the theme document.
- * @return color.
- */
- public static Color parseFillColorField(Document theme) {
- return parseRGB(getFillColorString(theme));
- }
-
-
- public static boolean parseShowBorder(Document theme) {
- return parseBoolean(getShowBorderString(theme), false);
- }
-
-
- public static int parseTransparency(Document theme) {
- return parseInteger(getTransparencyString(theme), 50);
- }
-
-
- /**
- * Gets color from color field.
- * @param theme the theme document.
- * @return color.
- */
- public static Color parseLineColorField(Document theme) {
- String lineColorStr = getLineColorString(theme);
- logger.debug("parseLineColorField: lineColorStr = " +
- (lineColorStr == null ? "null" : lineColorStr));
- return parseColor(lineColorStr);
- }
-
-
- public static Color parseAreaLineColorField(Document theme) {
- String lineColorStr = getAreaLineColorString(theme);
- logger.debug("parseLineColorField: lineColorStr = " +
- (lineColorStr == null ? "null" : lineColorStr));
- return parseColor(lineColorStr);
- }
-
-
- private static String getAreaLineColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_AREA_LINE_COLOR, null);
- }
-
-
- public static boolean parseShowMinimum(Document theme) {
- return parseBoolean(getShowMinimum(theme), false);
- }
-
-
- public static boolean parseShowMaximum(Document theme) {
- return parseBoolean(getShowMaximum(theme), false);
- }
-
-
- /**
- * Creates a MapserverStyle from the given XML theme.
- * This method uses a start- and endcolor to interpolate a
- * given number of color classes for the MapserverStyle.
- * @param theme
- * @return String representation of the MapserverStyle
- */
- public static String createDynamicMapserverStyle(Document theme,
- float from, float to, float step, CallMeta meta)
- {
- MapserverStyle ms = new MapserverStyle();
-
- String strStartColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_STARTCOLOR, null);
- Color startColor = strStartColor != null ? parseColor(strStartColor) : new Color(178, 201, 215);
- String strEndColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_ENDCOLOR, null);
- Color endColor = strEndColor != null? parseColor(strEndColor) : new Color(2, 27, 42);
-
- to = to != 0 ? to : 9999;
- step = step != 0 ? step : to;
-
- int numClasses = (int)((to - from) / step);
-
- float rd = (endColor.getRed() - startColor.getRed()) / (float)numClasses;
- float gd = (endColor.getGreen() - startColor.getGreen()) / (float)numClasses;
- float bd = (endColor.getBlue() - startColor.getBlue()) / (float)numClasses;
-
- if (numClasses > 1) {
- // Desktop Flys always added a last "and larger class"
- numClasses += 1;
- }
-
- for (int n = 0; n < numClasses; n++) {
- StringBuilder newColor = new StringBuilder();
- newColor.append(startColor.getRed() + Math.round(n * rd));
- newColor.append(' ');
- newColor.append(startColor.getGreen() + Math.round(n * gd));
- newColor.append(' ');
- newColor.append(startColor.getBlue() + Math.round(n * bd));
-
- String expr = createWSPLGENClassExpression(from + n * step, step, n + 1, numClasses);
- String name = createWSPLGENClassName(from + n * step, step, n + 1, numClasses, meta);
-
- Clazz c = new Clazz(name);
- Style s = new Style();
- s.setColor(newColor.toString());
- s.setSize(5);
-
- c.addItem(new Expression("(" + expr + ")"));
- c.addItem(s);
-
- ms.addClazz(c);
- }
-
- return ms.toString();
- }
-
-
- protected static String createWSPLGENClassExpression(float val, float step, int idx, int maxIdx) {
- if (idx < maxIdx) {
- return "[DIFF] >= " + val + " AND [DIFF] < " + (val + step);
- }
- else {
- return "[DIFF] >= " + val;
- }
- }
-
- /**
- * Creates a class name for the mapfile style that visualizes a floodmap.
- * The class names are used in the map's legend.
- *
- * @param val Current isobath value.
- * @param step Difference between to class values.
- * @param idx Current class index that is being processed.
- * @param maxIdx Highest class index.
- * @param meta Caller meta object used to determine locale.
- * @return
- */
- protected static String createWSPLGENClassName(float val, float step, int idx, int maxIdx, CallMeta meta) {
- assert meta != null : "CallMeta instance is null";
-
- if (idx < maxIdx) {
- return Resources.getMsg(meta, MSG_ISOBATH_CLASS,
- new Object[] {val, val + step});
- }
- else {
- return Resources.getMsg(meta, MSG_ISOBATH_LASTCLASS,
- new Object[] {val});
- }
- }
-
-
- public static String createMapserverStyle(Document theme) {
- String symbol = getSymbol(theme);
- String backcolor = getLabelBackgroundColorString(theme);
- String linecolor = getLineColorString(theme);
- if (linecolor == null || "".equals(linecolor)) {
- logger.warn("createMapserverStyle: linecolor String is empty");
- linecolor = "0,128,255";
- }
-
- int linewidth = parseLineWidth(theme);
-
- MapserverStyle ms = new MapserverStyle();
-
- Clazz c = new Clazz(" ");
-
- Style s = new Style();
- s.setOutlineColor(linecolor.replace(",", " "));
-
- if (backcolor != null && backcolor.length() > 0) {
- s.setColor(backcolor.replace(",", " "));
- }
-
- s.setSize(linewidth);
- s.setSymbol(symbol);
- c.addItem(s);
-
- String textcolor = getTextColorString(theme);
- int textsize = parseTextSize(theme);
-
- if (textcolor != null && textcolor.length() > 0 && textsize > 0) {
- Label l = new Label();
- l.setColor(textcolor.replace(",", " "));
- l.setSize(textsize);
- c.addItem(l);
- }
-
- ms.addClazz(c);
-
- return ms.toString();
- }
-
-
- public static String getAreaBackgroundColorString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_AREA_BACKGROUND_COLOR, null);
- }
-
-
- public static Color parseAreaBackgroundColor(Document theme) {
- return parseColor(getAreaBackgroundColorString(theme));
- }
-
-
- public static int parseAreaTransparency(Document theme) {
- return parseInteger(getAreaTransparencyString(theme), 50);
- }
-
-
- public static boolean parseAreaShowBorder(Document theme) {
- return parseBoolean(getAreaShowBorderString(theme), false);
- }
-
-
- private static String getAreaShowBorderString(Document theme) {
- return XMLUtils.xpathString(theme, XPATH_AREA_SHOW_BORDER, null);
- }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
More information about the Dive4elements-commits
mailing list