ingo@647: package de.intevation.flys.exports; ingo@647: ingo@647: import java.awt.Transparency; ingo@647: import java.io.IOException; ingo@647: import java.io.OutputStream; ingo@647: ingo@647: import org.w3c.dom.Document; ingo@647: ingo@647: import org.apache.log4j.Logger; ingo@647: ingo@647: import org.jfree.chart.ChartRenderingInfo; ingo@647: import org.jfree.chart.JFreeChart; ingo@647: ingo@647: import de.intevation.artifacts.Artifact; ingo@647: import de.intevation.artifacts.CallContext; ingo@647: ingo@695: import de.intevation.artifactdatabase.state.Facet; ingo@695: ingo@647: import de.intevation.artifacts.common.utils.XMLUtils; ingo@647: ingo@647: ingo@647: /** ingo@647: * An OutGenerator that generates meta information for charts. A concrete ingo@647: * ChartInfoGenerator need to instantiate a concrete ChartGenerator and dispatch ingo@647: * the methods to that instance. The only thing this ChartInfoGenerator needs ingo@647: * to, is to overrite the generate() method which doesn't write the chart image ingo@647: * to the OutputStream but a Document that contains some meta information of the ingo@647: * created chart. ingo@647: * ingo@647: * @author Ingo Weinzierl ingo@647: */ ingo@647: public abstract class ChartInfoGenerator implements OutGenerator { ingo@647: ingo@647: /** The logger used in this generator.*/ ingo@647: private static Logger logger = ingo@647: Logger.getLogger(ChartInfoGenerator.class); ingo@647: ingo@647: ingo@647: /** The OutGenerator that creates the charts.*/ ingo@653: protected XYChartGenerator generator; ingo@647: ingo@647: protected OutputStream out; ingo@647: ingo@647: ingo@647: ingo@653: public ChartInfoGenerator(XYChartGenerator generator) { ingo@647: this.generator = generator; ingo@647: } ingo@647: ingo@647: ingo@647: /** ingo@647: * Dispatches the operation to the instantiated generator. ingo@647: * ingo@647: * @param request ingo@647: * @param out ingo@647: * @param context ingo@647: */ ingo@647: public void init(Document request, OutputStream out, CallContext context) { ingo@647: this.out = out; ingo@647: ingo@647: generator.init(request, out, context); ingo@647: } ingo@647: ingo@647: ingo@647: /** ingo@647: * Dispatches the operation to the instantiated generator. ingo@647: * ingo@647: * @param master ingo@647: */ ingo@647: public void setMasterArtifact(Artifact master) { ingo@647: generator.setMasterArtifact(master); ingo@647: } ingo@647: ingo@647: ingo@647: /** ingo@647: * Dispatches the operation to the instantiated generator. ingo@647: * ingo@647: * @param artifacts ingo@647: * @param facet ingo@647: * @param attr ingo@647: */ ingo@1684: public void doOut( ingo@1684: Artifact artifact, ingo@1684: Facet facet, ingo@1684: Document attr, ingo@1684: boolean visible ingo@1684: ) { ingo@1684: generator.doOut(artifact, facet, attr, visible); ingo@647: } ingo@647: ingo@647: ingo@647: /** ingo@647: * This method generates the chart using a concrete ChartGenerator but ingo@647: * doesn't write the chart itself to the OutputStream but a Document that ingo@647: * contains meta information of the created chart. ingo@647: */ ingo@647: @Override ingo@647: public void generate() ingo@647: throws IOException ingo@647: { ingo@647: logger.debug("ChartInfoGenerator.generate"); ingo@647: ingo@653: JFreeChart chart = generator.generateChart(); ingo@647: ingo@653: int[] size = generator.getSize(); ingo@647: ingo@647: ChartRenderingInfo info = new ChartRenderingInfo(); ingo@647: ingo@647: chart.createBufferedImage(size[0], size[1], Transparency.BITMASK, info); ingo@647: ingo@673: InfoGeneratorHelper helper = new InfoGeneratorHelper(generator); ingo@673: Document doc = helper.createInfoDocument(chart, info); ingo@647: ingo@647: XMLUtils.toStream(doc, out); ingo@647: } ingo@647: } ingo@647: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :