# HG changeset patch # User Ingo Weinzierl # Date 1305191476 0 # Node ID bab867fb37e8542b3e93370a2762d60cbd87f969 # Parent 3b83341e0cf49d29981cbd1e95f3974935af29c1 Charts are generated using the size defined in the incoming request document. flys-artifacts/trunk@1908 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 3b83341e0cf4 -r bab867fb37e8 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed May 11 16:31:38 2011 +0000 +++ b/flys-artifacts/ChangeLog Thu May 12 09:11:16 2011 +0000 @@ -1,3 +1,13 @@ +2011-05-11 Ingo Weinzierl + + * src/main/java/de/intevation/flys/exports/ChartGenerator.java: Added new + methods that return the requested chart size as integer array [width, + height]. The requested size is read from the incomding request document. + + * src/main/java/de/intevation/flys/exports/XYChartGenerator.java: The size + of a chart is no longer static. The requested size is fetched using + ChartGenerator.getSize(). + 2011-05-11 Ingo Weinzierl ISSUE-52 diff -r 3b83341e0cf4 -r bab867fb37e8 flys-artifacts/src/main/java/de/intevation/flys/exports/ChartGenerator.java --- 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; diff -r 3b83341e0cf4 -r bab867fb37e8 flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Wed May 11 16:31:38 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Thu May 12 09:11:16 2011 +0000 @@ -87,11 +87,13 @@ adjustPlot(plot); adjustAxes(plot); + int[] size = getSize(); + ChartExportHelper.exportImage( out, chart, "png", - 600, 400); + size[0], size[1]); }