[PATCH] ChartGenerator2 can be used as ChartInfoGenerator, too
Wald Commits
scm-commit at wald.intevation.org
Fri Sep 20 17:01:03 CEST 2013
# HG changeset patch
# User Sascha L. Teichmann <teichmann at intevation.de>
# Date 1379689259 -7200
# Branch generator-refactoring
# Node ID 48e30e2c5db9c2608b7744dfa526316d9d8f70d9
# Parent b780cf1148c38d5b3ea864a730786bf600cfcbd8
ChartGenerator2 can be used as ChartInfoGenerator, too.
diff -r b780cf1148c3 -r 48e30e2c5db9 artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Fri Sep 20 16:34:37 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Fri Sep 20 17:00:59 2013 +0200
@@ -8,43 +8,22 @@
package org.dive4elements.river.exports;
-import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
-import org.dive4elements.artifactdatabase.state.Settings;
-import org.dive4elements.artifacts.Artifact;
-import org.dive4elements.artifacts.ArtifactNamespaceContext;
-import org.dive4elements.artifacts.CallContext;
-import org.dive4elements.artifacts.CallMeta;
-import org.dive4elements.artifacts.PreferredLocale;
-import org.dive4elements.artifacts.common.utils.XMLUtils;
-import org.dive4elements.river.artifacts.access.RangeAccess;
-import org.dive4elements.river.artifacts.D4EArtifact;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.collections.D4EArtifactCollection;
-import org.dive4elements.river.jfree.Bounds;
-import org.dive4elements.river.jfree.DoubleBounds;
-import org.dive4elements.river.jfree.EnhancedLineAndShapeRenderer;
-import org.dive4elements.river.jfree.RiverAnnotation;
-import org.dive4elements.river.jfree.StableXYDifferenceRenderer;
-import org.dive4elements.river.jfree.Style;
-import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
-import org.dive4elements.river.jfree.StyledSeries;
-import org.dive4elements.river.jfree.AxisDataset;
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.themes.LineStyle;
-import org.dive4elements.river.themes.TextStyle;
-import org.dive4elements.river.themes.ThemeDocument;
-import org.dive4elements.river.utils.RiverUtils;
-
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
+import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.TexturePaint;
+import java.awt.Transparency;
+
import java.awt.geom.Rectangle2D;
+
import java.awt.image.BufferedImage;
+
import java.io.IOException;
import java.io.OutputStream;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -55,23 +34,72 @@
import javax.xml.xpath.XPathConstants;
import org.apache.log4j.Logger;
+
+import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
+import org.dive4elements.artifactdatabase.state.Settings;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.ArtifactNamespaceContext;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.PreferredLocale;
+
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+
+import org.dive4elements.river.artifacts.D4EArtifact;
+
+import org.dive4elements.river.artifacts.access.RangeAccess;
+
+import org.dive4elements.river.artifacts.resources.Resources;
+
+import org.dive4elements.river.collections.D4EArtifactCollection;
+
+import org.dive4elements.river.java2d.NOPGraphics2D;
+
+import org.dive4elements.river.jfree.AxisDataset;
+import org.dive4elements.river.jfree.Bounds;
+import org.dive4elements.river.jfree.DoubleBounds;
+import org.dive4elements.river.jfree.EnhancedLineAndShapeRenderer;
+import org.dive4elements.river.jfree.RiverAnnotation;
+import org.dive4elements.river.jfree.StableXYDifferenceRenderer;
+import org.dive4elements.river.jfree.Style;
+import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
+import org.dive4elements.river.jfree.StyledSeries;
+
+import org.dive4elements.river.model.River;
+
+import org.dive4elements.river.themes.LineStyle;
+import org.dive4elements.river.themes.TextStyle;
+import org.dive4elements.river.themes.ThemeDocument;
+
+import org.dive4elements.river.utils.Formatter;
+import org.dive4elements.river.utils.RiverUtils;
+
+import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
+
import org.jfree.chart.axis.NumberAxis;
+
import org.jfree.chart.plot.XYPlot;
+
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
+
import org.jfree.chart.title.TextTitle;
+
import org.jfree.data.Range;
+
import org.jfree.data.general.Series;
+
import org.jfree.data.xy.XYDataset;
+
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.dive4elements.river.utils.Formatter;
-
/**
* Implementation of the OutGenerator interface for charts.
* It should provide some basic things that equal in all chart types.
@@ -81,6 +109,10 @@
private static Logger logger = Logger.getLogger(ChartGenerator2.class);
+ public static final boolean USE_NOP_GRAPHICS =
+ Boolean.getBoolean("info.rendering.nop.graphics");
+
+
public static final int DEFAULT_CHART_WIDTH = 600;
public static final int DEFAULT_CHART_HEIGHT = 400;
public static final String DEFAULT_CHART_FORMAT = "png";
@@ -256,11 +288,73 @@
* Generate chart.
*/
@Override
- public void generate()
- throws IOException
- {
+ public void generate() throws IOException {
+
logger.debug("ChartGenerator2.generate");
+ if (outName.indexOf("chartinfo") > 0) {
+ generateInfo();
+ }
+ else {
+ generateImage();
+ }
+ }
+
+
+ /** Generate only meta infos */
+ private void generateInfo() throws IOException {
+
+ logger.debug("ChartInfoGenerator2.generateInfo");
+
+ JFreeChart chart = generateChart();
+
+ int[] size = getSize();
+ if (size == null) {
+ size = getDefaultSize();
+ }
+
+ ChartRenderingInfo info = new ChartRenderingInfo();
+
+ long startTime = System.currentTimeMillis();
+
+ if (USE_NOP_GRAPHICS) {
+ BufferedImage image =
+ new BufferedImage(size[0], size[1], Transparency.BITMASK);
+
+ Graphics2D g2d = image.createGraphics();
+ Graphics2D nop = new NOPGraphics2D(g2d);
+
+ chart.draw(
+ nop,
+ new Rectangle2D.Double(0, 0, size[0], size[1]),
+ null,
+ info);
+
+ nop.dispose();
+ }
+ else {
+ chart.createBufferedImage(
+ size[0], size[1], Transparency.BITMASK, info);
+ }
+
+ long stopTime = System.currentTimeMillis();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Rendering info took: " +
+ (stopTime-startTime) + "ms");
+ }
+
+
+ InfoGeneratorHelper helper = new InfoGeneratorHelper(this);
+ Document doc = helper.createInfoDocument(chart, info);
+
+ XMLUtils.toStream(doc, out);
+ }
+
+ /** Generate the diagram as an image. */
+ private void generateImage() throws IOException {
+ logger.debug("ChartGenerator2.generateImage");
+
JFreeChart chart = generateChart();
String format = getFormat();
More information about the Dive4elements-commits
mailing list