view flys-artifacts/src/main/java/de/intevation/flys/artifacts/ChartArtifact.java @ 3785:a5f65e8983be

Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line fix issue865 - missing showarea theme prop. ........ r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line Add robustness checks to prevent NPEs ........ r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line i18n for area label (fix issue487). ........ r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line Update themes to show point descriptions ........ r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines Removed incorrect characteristic diameter. ........ r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines Fixed some stupid bugs in bed quality data factory and calculation. ........ r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line The usual whitespace and import cleanups. ........ r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line Use generics aware Collections.emptyList(). ........ r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line Some more little steps towards "Auslagerung extremer Wasserspiegellagen". ........ r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line A and B facets of fix analyis are now deactivated by default ........ r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines Add the gauge station to the GaugeOverviewInfoService xml response ........ r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines Added CSV export to bed quality calculation. ........ r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines Fix date in changelog entry ........ r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line Removed trailing whitespace. ........ flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:58:31 +0000
parents 7b14d00bca8a
children 8e66293c5369
line wrap: on
line source
package de.intevation.flys.artifacts;

import org.apache.log4j.Logger;

import java.util.List;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import de.intevation.artifacts.Artifact;

import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.CallContext;

import de.intevation.artifacts.common.utils.XMLUtils;
import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
import de.intevation.artifacts.common.ArtifactNamespaceContext;

import de.intevation.artifactdatabase.ProtocolUtils;
import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifactdatabase.state.State;
import de.intevation.artifactdatabase.state.StateEngine;
import de.intevation.artifactdatabase.state.Output;

import de.intevation.flys.utils.FLYSUtils;

import de.intevation.flys.artifacts.states.DefaultState;
import de.intevation.flys.artifacts.context.FLYSContext;
import de.intevation.flys.artifacts.resources.Resources;


/** Artifact, open to generate any (?) out. */
public class ChartArtifact extends FLYSArtifact {

    private static final Logger logger =
        Logger.getLogger(ChartArtifact.class);

    @Override
    public void setup(
        String          identifier,
        ArtifactFactory factory,
        Object          context,
        CallMeta        callmeta,
        Document        data)
    {
        logger.debug("ChartArtifact.setup");
        this.identifier = identifier;
        name = "new_chart";

        List<State> states = getStates(context);

        setCurrentState(states.get(0));
    }

    @Override
    protected void appendBackgroundActivity(
        ElementCreator cr,
        Element        root,
        CallContext    context
    ) {
        Element inBackground = cr.create("background-processing");
        root.appendChild(inBackground);

        cr.addAttr(
            inBackground,
            "value",
            String.valueOf(context.isInBackground()),
            true);
    }


    /**
     * Append output mode nodes to a document.
     */
    @Override
    protected void appendOutputModes(
        Document    doc,
        Element     outs,
        CallContext context,
        String      uuid)
    {
        List<String> stateIds = getPreviousStateIds();

        XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(
            doc,
            ArtifactNamespaceContext.NAMESPACE_URI,
            ArtifactNamespaceContext.NAMESPACE_PREFIX);

        FLYSContext flysContext = FLYSUtils.getFlysContext(context);
        StateEngine engine      = (StateEngine) flysContext.get(
            FLYSContext.STATE_ENGINE_KEY);

        for (String stateId: stateIds) {
            logger.debug("Append output modes for state: " + stateId);
            DefaultState state = (DefaultState) engine.getState(stateId);

            List<Output> list = state.getOutputs();
            if (list == null || list.isEmpty()) {
                logger.debug("-> No output modes for this state.");
                continue;
            }

            List<Facet> fs = facets.get(stateId);

            if (fs == null || fs.isEmpty()) {
                logger.debug("No facets for previous state found.");
                continue;
            }

            logger.debug("Found " + fs.size() + " facets in previous states.");

            List<Output> generated = generateOutputs(list, fs);

            ProtocolUtils.appendOutputModes(doc, outs, generated);
        }

        try {
            DefaultState cur = (DefaultState) getCurrentState(context);
            List<Output> list = cur.getOutputs();
            if (list != null && list.size() > 0) {
                logger.debug(
                    "Append output modes for current state: " + cur.getID());

                List<Facet> fs = facets.get(cur.getID());

                if (fs != null && fs.size() > 0) {
                    List<Output> generated = generateOutputs(list, fs);

                    logger.debug("Found " + fs.size() + " current facets.");
                    if (!generated.isEmpty()) {
                        ProtocolUtils.appendOutputModes(
                            doc, outs, generated);
                    }
                }
                else {
                    logger.debug("No facets found for the current state.");
                }
            }
        }
        catch (IllegalArgumentException iae) {
            // state is not valid, so we do not append its outputs.
        }
    }

    public static class ChartState extends DefaultState {

        public static final String FIELD_MODE = "chart_type";

        public static final String DURATION_CURVE =
            "chart.new.durationcurve";

        public static final String COMPUTED_DISCHARGE_CURVE =
            "chart.new.computeddischargecurve";

        public static final String DISCHARGE_LONGITUDINAL_CURVE =
            "chart.new.longitudinal_section";

        public static final String W_DIFFERENCES =
            "chart.new.w_differences";

        public static final String WATERLEVEL =
            "chart.new.crosssection";

        public static final String[] CHARTS = {
            COMPUTED_DISCHARGE_CURVE,
            DURATION_CURVE,
            DISCHARGE_LONGITUDINAL_CURVE,
            W_DIFFERENCES,
            WATERLEVEL };



        @Override
        public Object computeAdvance(
            FLYSArtifact artifact,
            String       hash,
            CallContext  context,
            List<Facet>  facets,
            Object       old)
        {
            logger.debug("ChartState.computeAdvance");


            return null;
        }


        @Override
        protected Element[] createItems(
            XMLUtils.ElementCreator cr,
            Artifact    artifact,
            String      name,
            CallContext context)
        {
            CallMeta meta   = context.getMeta();
            Element[] charts = new Element[CHARTS.length];

            int i = 0;

            for (String chart: CHARTS) {
                charts[i++] = createItem(
                    cr, new String[] {
                        Resources.getMsg(meta, chart, chart),
                        chart
                    });
            }

            return charts;
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org