diff flys-artifacts/src/main/java/de/intevation/flys/exports/ChartGenerator.java @ 423:bab867fb37e8

Charts are generated using the size defined in the incoming request document. flys-artifacts/trunk@1908 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 12 May 2011 09:11:16 +0000
parents 046bd86ae41d
children 8fa4c5c9cd1a
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/ChartGenerator.java	Wed May 11 16:31:38 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/ChartGenerator.java	Thu May 12 09:11:16 2011 +0000
@@ -3,13 +3,19 @@
 import java.io.IOException;
 import java.io.OutputStream;
 
+import javax.xml.xpath.XPathConstants;
+
 import org.apache.log4j.Logger;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Node;
 
 import de.intevation.artifacts.Artifact;
 import de.intevation.artifacts.CallContext;
 
+import de.intevation.artifacts.ArtifactNamespaceContext;
+import de.intevation.artifacts.common.utils.XMLUtils;
+
 import de.intevation.flys.model.River;
 
 import de.intevation.flys.artifacts.FLYSArtifact;
@@ -27,6 +33,18 @@
     private static Logger logger = Logger.getLogger(ChartGenerator.class);
 
 
+    /** The default chart width, if no other width is set.*/
+    public static final int DEFAULT_CHART_WIDTH  = 600;
+
+    /** The default chart height, if no other height is set.*/
+    public static final int DEFAULT_CHART_HEIGHT = 400;
+
+    /** The XPath that points to the chart size of the incoming request
+     * document.*/
+    public static final String XPATH_CHART_SIZE =
+        "/art:action/art:attributes/art:size";
+
+
     /** The document of the incoming out() request.*/
     protected Document request;
 
@@ -79,6 +97,54 @@
     }
 
 
+    /**
+     * Returns the size of a chart export as array which has been specified by
+     * the incoming request document.
+     *
+     * @return the size of a chart as [width, height] or the result of
+     * getDefaultSize() if no width or height are given in the request document.
+     */
+    protected int[] getSize() {
+        int[] size = new int[2];
+
+        Node sizeEl = (Node) XMLUtils.xpath(
+            request,
+            XPATH_CHART_SIZE,
+            XPathConstants.NODE,
+            ArtifactNamespaceContext.INSTANCE);
+
+        if (sizeEl != null) {
+            String w = XMLUtils.xpathString(
+                sizeEl, "@art:width", ArtifactNamespaceContext.INSTANCE);
+
+            String h = XMLUtils.xpathString(
+                sizeEl, "@art:height", ArtifactNamespaceContext.INSTANCE);
+
+            if (w != null && w.length() > 0 && h != null && h.length() > 0) {
+                try {
+                    size[0] = Integer.parseInt(w);
+                    size[1] = Integer.parseInt(h);
+                }
+                catch (NumberFormatException nfe) {
+                    logger.warn("Wrong values for chart width/height.");
+                }
+            }
+        }
+
+        return size[0] > 0 && size[1] > 0 ? size : getDefaultSize();
+    }
+
+
+    /**
+     * Returns the default size of a chart export as array.
+     *
+     * @return the default size of a chart as [width, height].
+     */
+    protected int[] getDefaultSize() {
+        return new int[] { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT };
+    }
+
+
     public abstract void doOut(Artifact artifact, String facet, Document attr);
 
     public abstract void generate() throws IOException;

http://dive4elements.wald.intevation.org