Mercurial > dive4elements > river
changeset 7069:9b52c501c57e generator-refactoring
Add InfoGenerator Hacks to be removed soon.
Neccessary for testing but they will be removed again in one of the next
commits
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 20 Sep 2013 14:56:46 +0200 |
parents | 726d998dce29 |
children | 35aabc86566d |
files | artifacts/src/main/java/org/dive4elements/river/exports/ChartInfoGenerator2.java artifacts/src/main/java/org/dive4elements/river/exports/InfoGeneratorHelper.java artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionInfoGenerator.java |
diffstat | 3 files changed, 214 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- /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@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 :
--- 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);
--- 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@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 :