Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/ChartArtifact.java @ 3318:dbe2f85bf160
merged flys-artifacts/2.8
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:35 +0200 |
parents | 2f922be407ea |
children | b1912514e0f5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/ChartArtifact.java Fri Sep 28 12:14:35 2012 +0200 @@ -0,0 +1,212 @@ +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; + + +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.size() == 0) { + logger.debug("-> No output modes for this state."); + continue; + } + + List<Facet> fs = facets.get(stateId); + + if (fs == null || fs.size() == 0) { + 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 :