[PATCH 3 of 5] Add InfoGenerator Hacks to be removed soon
Wald Commits
scm-commit at wald.intevation.org
Fri Sep 20 14:59:05 CEST 2013
# HG changeset patch
# User Andre Heinecke <aheinecke at intevation.de>
# Date 1379681806 -7200
# Branch generator-refactoring
# Node ID 9b52c501c57e02bf41c027c055700aae52cae75c
# Parent 726d998dce295a1d21440eeb9a259dde307d26e0
Add InfoGenerator Hacks to be removed soon.
Neccessary for testing but they will be removed again in one of the next
commits
diff -r 726d998dce29 -r 9b52c501c57e artifacts/src/main/java/org/dive4elements/river/exports/ChartInfoGenerator2.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartInfoGenerator2.java Fri Sep 20 14:56:46 2013 +0200
@@ -0,0 +1,204 @@
+/* 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.exports;
+
+import org.dive4elements.river.collections.D4EArtifactCollection;
+import org.dive4elements.river.java2d.NOPGraphics2D;
+import org.dive4elements.river.themes.ThemeDocument;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.awt.Transparency;
+import java.awt.Graphics2D;
+
+import java.awt.geom.Rectangle2D;
+
+import java.awt.image.BufferedImage;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
+
+import org.jfree.chart.ChartRenderingInfo;
+import org.jfree.chart.JFreeChart;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+
+import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
+import org.dive4elements.artifactdatabase.state.Settings;
+
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+
+
+/**
+ * An OutGenerator that generates meta information for charts. A concrete
+ * ChartInfoGenerator2 need to instantiate a concrete ChartGenerator and dispatch
+ * the methods to that instance. The only thing this ChartInfoGenerator2 needs
+ * to, is to overwrite the generate() method which doesn't write the chart image
+ * to the OutputStream but a Document that contains some meta information of the
+ * created chart.
+ *
+ * @author <a href="mailto:ingo.weinzierl at intevation.de">Ingo Weinzierl</a>
+ */
+public abstract class ChartInfoGenerator2 implements OutGenerator {
+
+ public static final boolean USE_NOP_GRAPHICS =
+ Boolean.getBoolean("info.rendering.nop.graphics");
+
+ /** The logger used in this generator.*/
+ private static Logger logger =
+ Logger.getLogger(ChartInfoGenerator2.class);
+
+
+ /** The OutGenerator that creates the charts.*/
+ protected ChartGenerator2 generator;
+
+ protected OutputStream out;
+
+
+
+ public ChartInfoGenerator2(ChartGenerator2 generator) {
+ this.generator = generator;
+ }
+
+ public void setup(Element config) {
+ logger.debug("ChartInfoGenerator2.setup");
+ }
+
+
+ /**
+ * Dispatches the operation to the instantiated generator.
+ *
+ * @param request
+ * @param out
+ * @param context
+ */
+ public void init(Document request, OutputStream out, CallContext context) {
+ this.out = out;
+
+ generator.init(request, out, context);
+ }
+
+
+ /**
+ * Dispatches the operation to the instantiated generator.
+ *
+ * @param master The master artifact
+ */
+ public void setMasterArtifact(Artifact master) {
+ generator.setMasterArtifact(master);
+ }
+
+
+ /**
+ * Dispatches the operation to the instantiated generator.
+ *
+ * @param collection The collection.
+ */
+ public void setCollection(D4EArtifactCollection collection) {
+ generator.setCollection(collection);
+ }
+
+
+ /**
+ * Dispatches the operation to the instantiated generator.
+ */
+ @Override
+ public void doOut(
+ ArtifactAndFacet artifactFacet,
+ ThemeDocument attr,
+ boolean visible
+ ) {
+ generator.doOut(artifactFacet, attr, visible);
+ }
+
+
+ /**
+ * This method generates the chart using a concrete ChartGenerator but
+ * doesn't write the chart itself to the OutputStream but a Document that
+ * contains meta information of the created chart.
+ */
+ @Override
+ public void generate()
+ throws IOException
+ {
+ logger.debug("ChartInfoGenerator2.generate");
+
+ JFreeChart chart = generator.generateChart();
+
+ int[] size = generator.getSize();
+ if (size == null) {
+ size = generator.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(generator);
+ Document doc = helper.createInfoDocument(chart, info);
+
+ XMLUtils.toStream(doc, out);
+ }
+
+
+ /**
+ * A proxy method which calls <i>generator</i>.getSettings() and returns its
+ * return value.
+ *
+ * @return a Settings object provided by <i>generator</i>.
+ */
+ @Override
+ public Settings getSettings() {
+ return generator.getSettings();
+ }
+
+
+ /**
+ * A proxy method which calls <i>generator</i>.setSettings().
+ *
+ * @param settings A settings object for the <i>generator</i>.
+ */
+ @Override
+ public void setSettings(Settings settings) {
+ generator.setSettings(settings);
+ }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 726d998dce29 -r 9b52c501c57e artifacts/src/main/java/org/dive4elements/river/exports/InfoGeneratorHelper.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/InfoGeneratorHelper.java Fri Sep 20 14:55:44 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/InfoGeneratorHelper.java Fri Sep 20 14:56:46 2013 +0200
@@ -47,12 +47,17 @@
Logger.getLogger(InfoGeneratorHelper.class);
protected ChartGenerator generator;
+ protected ChartGenerator2 generator2;
public InfoGeneratorHelper(ChartGenerator generator) {
this.generator = generator;
}
+ public InfoGeneratorHelper(ChartGenerator2 generator) {
+ this.generator2 = generator2;
+ }
+
/**
* Triggers the creation of the chart info document.
@@ -186,7 +191,7 @@
cr.addAttr(e, "to", String.valueOf(range.getUpperBound()), true);
cr.addAttr(e, "axistype", "number", true);
- Range[] rs = generator.getRangesForAxis(pos);
+ Range[] rs = generator2 == null ? generator.getRangesForAxis(pos) : generator2.getRangesForAxis(pos);
Range r = null;
if (type.equals("range")) {
@@ -216,10 +221,10 @@
Bounds bounds = null;
if (type.equals("range")) {
- bounds = generator.getYBounds(pos);
+ bounds = generator2 == null ? generator.getYBounds(pos) : generator2.getYBounds(pos);
}
else {
- bounds = generator.getXBounds(pos);
+ bounds = generator2 == null ? generator.getXBounds(pos) : generator2.getXBounds(pos);
}
cr.addAttr(e, "axistype", "date", true);
diff -r 726d998dce29 -r 9b52c501c57e artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionInfoGenerator.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionInfoGenerator.java Fri Sep 20 14:55:44 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionInfoGenerator.java Fri Sep 20 14:56:46 2013 +0200
@@ -16,10 +16,10 @@
* @author <a href="mailto:ingo.weinzierl at intevation.de">Ingo Weinzierl</a>
*/
public class LongitudinalSectionInfoGenerator
-extends ChartInfoGenerator
+extends ChartInfoGenerator2
{
public LongitudinalSectionInfoGenerator() {
- super(new LongitudinalSectionGenerator());
+ super(new DiagramGenerator());
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
More information about the Dive4elements-commits
mailing list