# HG changeset patch # User Sascha L. Teichmann # Date 1412761747 -7200 # Node ID 994995baa32b7bde88834ea64b0b1d40f4699b01 # Parent 6b12045ac372cf6b7489cca2e740ab0d16fb9b78 Only the master-artifact should decide about injected CURRENT_KM et al. (and removed dependend obsolete class). diff -r 6b12045ac372 -r 994995baa32b artifacts/doc/conf/generators/generators.xml --- a/artifacts/doc/conf/generators/generators.xml Wed Oct 08 11:02:16 2014 +0200 +++ b/artifacts/doc/conf/generators/generators.xml Wed Oct 08 11:49:07 2014 +0200 @@ -35,7 +35,6 @@ - diff -r 6b12045ac372 -r 994995baa32b artifacts/src/main/java/org/dive4elements/river/collections/D4EArtifactCollection.java --- a/artifacts/src/main/java/org/dive4elements/river/collections/D4EArtifactCollection.java Wed Oct 08 11:02:16 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/collections/D4EArtifactCollection.java Wed Oct 08 11:49:07 2014 +0200 @@ -329,11 +329,12 @@ // because it has no OutputStream set! Document dummy = XMLUtils.newDocument(); outGen.init(out, dummy, null, getContext()); - prepareMasterArtifact(outGen); + D4EArtifact master = getMasterArtifact(); + prepareMasterArtifact(master, outGen); try { Document outAttr = getAttribute(attr, out); - OutputHelper helper = new OutputHelper(identifier()); + OutputHelper helper = new OutputHelper(identifier(), master); helper.doOut(outGen, out, out, outAttr, getContext(), dummy); } catch (ArtifactDatabaseException adbe) { @@ -413,11 +414,13 @@ generator.init(key, format, out, context); generator.setSettings(settings); generator.setCollection(this); - prepareMasterArtifact(generator); + + D4EArtifact master = getMasterArtifact(); + prepareMasterArtifact(master, generator); try { Document attr = getAttribute(cAttr, name); - OutputHelper helper = new OutputHelper(identifier()); + OutputHelper helper = new OutputHelper(identifier(), master); helper.doOut(generator, name, subtype, attr, context, format); generator.generate(); } @@ -437,10 +440,8 @@ * * @param generator The generator that gets a master Artifact. */ - protected void prepareMasterArtifact(OutGenerator generator - ) { + protected void prepareMasterArtifact(D4EArtifact master, OutGenerator generator) { // Get master artifact. - D4EArtifact master = getMasterArtifact(); if (master != null) { log.debug("Set master Artifact to uuid: " + master.identifier()); generator.setMasterArtifact(master); diff -r 6b12045ac372 -r 994995baa32b artifacts/src/main/java/org/dive4elements/river/exports/OutputHelper.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/OutputHelper.java Wed Oct 08 11:02:16 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/OutputHelper.java Wed Oct 08 11:49:07 2014 +0200 @@ -50,9 +50,11 @@ private static Logger log = Logger.getLogger(OutputHelper.class); protected String identifier; + private D4EArtifact masterArtifact; - public OutputHelper(String identifier) { + public OutputHelper(String identifier, D4EArtifact masterArtifact) { this.identifier = identifier; + this.masterArtifact = masterArtifact; } private static List getContextInjectors(CallContext context, String out) { @@ -104,6 +106,12 @@ List cis = getContextInjectors(context, outName); + if (cis != null) { + for (ContextInjector ci: cis) { + ci.injectContext(context, masterArtifact, request); + } + } + try { for (int i = 0, T = themeList.size(); i < T; i++) { ManagedFacet theme = themeList.get(i); @@ -131,23 +139,16 @@ continue; } - if (cis != null) { - for (ContextInjector ci: cis) { - ci.injectContext( - context, dataProviders.get(i).getArtifact(), request); - } - } - generator.doOut( - dataProviders.get(i), - getFacetThemeFromAttribute( - art, - outName, - facetName, - theme.getDescription(), - theme.getIndex(), - context), - theme.getActive() == 1); + dataProviders.get(i), + getFacetThemeFromAttribute( + art, + outName, + facetName, + theme.getDescription(), + theme.getIndex(), + context), + theme.getActive() == 1); } } catch (ArtifactDatabaseException ade) { diff -r 6b12045ac372 -r 994995baa32b artifacts/src/main/java/org/dive4elements/river/exports/sq/SQOverviewGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQOverviewGenerator.java Wed Oct 08 11:02:16 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* 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.sq; - -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.imageio.ImageIO; -import javax.xml.xpath.XPathConstants; - -import org.apache.log4j.Logger; -import org.jfree.chart.ChartRenderingInfo; -import org.jfree.chart.JFreeChart; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; -import org.dive4elements.artifactdatabase.state.Settings; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.ArtifactDatabaseException; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.artifacts.common.ArtifactNamespaceContext; -import org.dive4elements.artifacts.common.utils.XMLUtils; -import org.dive4elements.river.artifacts.context.RiverContext; -import org.dive4elements.river.collections.D4EArtifactCollection; -import org.dive4elements.river.exports.ChartGenerator2; -import org.dive4elements.river.exports.OutGenerator; -import org.dive4elements.river.exports.OutputHelper; -import org.dive4elements.river.themes.ThemeDocument; - -public class SQOverviewGenerator -implements OutGenerator -{ - private static Logger log = Logger.getLogger(SQOverviewGenerator.class); - - public static final String XPATH_CHART_SIZE = - "/art:action/art:attributes/art:size"; - - protected D4EArtifactCollection collection; - - protected Artifact master; - - protected Settings settings; - - protected Document request; - - protected OutputStream out; - - protected CallContext context; - - protected List charts; - - protected String outName; - - @Override - public void setup(Object config) { - log.debug("SQOverviewGenerator.setup"); - } - - /** - * Produce output. - * @param artifactAndFacet current facet and artifact. - * @param attr theme for facet - */ - @Override - public void doOut( - ArtifactAndFacet artifactAndFacet, - ThemeDocument attr, - boolean visible - ) { - log.debug("doOut()"); - - // TODO: Why not using outName for this. - - String name = artifactAndFacet.getData(context).toString(); - if(name != null) { - log.debug("name: " + name); - ChartGenerator2 g = - (ChartGenerator2)RiverContext.getOutGenerator( - context, - name); - /* Make sure master is also set in those */ - g.setMasterArtifact(master); - - OutputHelper helper = new OutputHelper(master.identifier()); - Document collectionAttribute = collection.getAttribute(); - - try { - Document cAttr = getAttribute(context, collectionAttribute, name); - g.init(name, request, out, context); - - helper.doOut(g, name, name, cAttr, context, request); - JFreeChart chart = g.generateChart(); - chart.removeLegend(); - charts.add(chart); - } - catch (IOException e) { - log.warn(e); - } - catch (ArtifactDatabaseException e) { - log.warn(e); - } - } - } - - @Override - public void init(String outName, Document request, OutputStream out, CallContext context) { - this.outName = outName; - this.request = request; - this.out = out; - this.context = context; - charts = new ArrayList(); - } - - @Override - public void setMasterArtifact(Artifact master) { - this.master = master; - } - - @Override - public void setCollection(D4EArtifactCollection collection) { - this.collection = collection; - } - - @Override - public void generate() throws IOException { - log.debug("SQOverviewGenerator.generate"); - - int[] size = getSize(); - - if (size == null) { - size = new int[] {400, 600}; - } - BufferedImage result = - new BufferedImage(size[0], size[1], BufferedImage.TYPE_INT_RGB); - for (int i = 0, S = charts.size(); i < S; i++) { - log.debug("index: " + i); - JFreeChart chart = charts.get(i); - ChartRenderingInfo info = new ChartRenderingInfo(); - BufferedImage img = - chart.createBufferedImage(size[0]/2, size[1]/3, info); - int horPos = 0; - int vertPos = 0; - if (i % 2 == 1) { - horPos = size[0]/2; - } - if (i > 1) { - vertPos = (size[1] / 3) * (i / 2); - } - // TODO: Dispose Graphics object! - result.createGraphics().drawImage(img, horPos, vertPos, null); - } - ImageIO.write(result, "png", out); - } - - @Override - public void setSettings(Settings settings) { - this.settings = settings; - } - - @Override - public Settings getSettings() { - return this.settings; - } - - - /** - * Returns the "attribute" (part of description document) for a specific - * output type. - * - * @param context The CallContext object. - * @param attr The xml attribute saved at the collection. - * @param output The name of the desired output type. - * - * @return the attribute for the desired output type. - */ - protected Document getAttribute( - CallContext context, - Document attr, - String output) - throws ArtifactDatabaseException - { - log.debug("find specific XML node for Output: " + output); - - Map vars = new HashMap(); - vars.put("output", output); - - Node out = (Node) XMLUtils.xpath( - attr, - "art:attribute/art:outputs/art:output[@name=$output]", - XPathConstants.NODE, - ArtifactNamespaceContext.INSTANCE, - vars); - - if (out != null) { - Document o = XMLUtils.newDocument(); - o.appendChild(o.importNode(out, true)); - - return o; - } - - return null; - } - - - /** - * 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 null if no width or - * height are given in the request document. - */ - protected int[] getSize() { - int[] size = new int[2]; - - Element sizeEl = (Element)XMLUtils.xpath( - request, - XPATH_CHART_SIZE, - XPathConstants.NODE, - ArtifactNamespaceContext.INSTANCE); - - if (sizeEl != null) { - String uri = ArtifactNamespaceContext.NAMESPACE_URI; - - String w = sizeEl.getAttributeNS(uri, "width"); - String h = sizeEl.getAttributeNS(uri, "height"); - - if (w.length() > 0 && h.length() > 0) { - try { - size[0] = Integer.parseInt(w); - size[1] = Integer.parseInt(h); - } - catch (NumberFormatException nfe) { - log.warn("Wrong values for chart width/height."); - } - } - } - - return size[0] > 0 && size[1] > 0 ? size : null; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :