changeset 8392:994995baa32b

Only the master-artifact should decide about injected CURRENT_KM et al. (and removed dependend obsolete class).
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 08 Oct 2014 11:49:07 +0200
parents 6b12045ac372
children 47e96ce9bd79
files artifacts/doc/conf/generators/generators.xml artifacts/src/main/java/org/dive4elements/river/collections/D4EArtifactCollection.java artifacts/src/main/java/org/dive4elements/river/exports/OutputHelper.java artifacts/src/main/java/org/dive4elements/river/exports/sq/SQOverviewGenerator.java
diffstat 4 files changed, 26 insertions(+), 279 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
     <output-generator names="bed_quality_export" class="org.dive4elements.river.exports.minfo.BedQualityExporter"/>
     <output-generator names="bedheight_difference_export" class="org.dive4elements.river.exports.minfo.BedDifferenceExporter"/>
     <output-generator names="sq_relation_export" class="org.dive4elements.river.exports.sq.SQRelationExporter"/>
-    <!--output-generator names="sq_overview" class="org.dive4elements.river.exports.sq.SQOverviewGenerator"/-->
     <output-generator names="fix_parameters_export" class="org.dive4elements.river.exports.fixings.ParametersExporter"/>
     <output-generator names="fix_deltawt_export" class="org.dive4elements.river.exports.fixings.DeltaWtExporter"/>
     <output-generator names="fix_deltawt_curve" class="org.dive4elements.river.exports.fixings.FixDeltaWtGenerator"/>
--- 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);
--- 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<ContextInjector> getContextInjectors(CallContext context, String out) {
@@ -104,6 +106,12 @@
 
         List<ContextInjector> 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) {
--- 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<JFreeChart> 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<JFreeChart>();
-    }
-
-    @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<String, String> vars = new HashMap<String, String>();
-        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 :

http://dive4elements.wald.intevation.org