# HG changeset patch # User Raimund Renkert # Date 1326457193 0 # Node ID d109e7702995b883f1d8169c40b6bb7e72e7ef3f # Parent 2d0b22602fc29d124e43da8a8df21e63f1b04943 Initial implementation for module 'new chart'. flys-artifacts/trunk@3677 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri Jan 13 12:19:53 2012 +0000 @@ -1,3 +1,22 @@ +2012-01-13 Raimund Renkert + + Initial implementation for module 'new chart'. + + * src/main/java/de/intevation/flys/artifacts/ChartArtifact.java: + New. Artifact for module 'new chart'. + + * doc/conf/artifacts/chart.xml: + New. Artifact description for the new artifact. + + * doc/conf/conf.xml: + Added new artifact to config. + + * src/main/resources/messages.properties, + src/main/resources/messages_de_DE.properties, + src/main/resources/messages_en.properties, + src/main/resources/messages_de.properties: + Added i18n strings for 'new chart' chart types. + 2011-01-13 Felix Wolfsteller * src/main/java/de/intevation/flys/artifacts/AnnotationArtifact.java: diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/doc/conf/artifacts/chart.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/doc/conf/artifacts/chart.xml Fri Jan 13 12:19:53 2012 +0000 @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Fri Jan 13 12:19:53 2012 +0000 @@ -71,6 +71,9 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + de.intevation.artifactdatabase.DefaultArtifactFactory de.intevation.artifactdatabase.DefaultUserFactory @@ -127,6 +130,7 @@ + diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/src/main/java/de/intevation/flys/artifacts/ChartArtifact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/ChartArtifact.java Fri Jan 13 12:19:53 2012 +0000 @@ -0,0 +1,324 @@ +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 org.w3c.dom.Node; + +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.artifactdatabase.transition.TransitionEngine; + +import de.intevation.flys.model.River; +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 states = getStates(context); + + setCurrentState(states.get(0)); + } + + + @Override + public Document describe(Document data, CallContext context) { + logger.debug("Describe: the current state is: " + getCurrentStateId()); + + if (logger.isDebugEnabled()) { + dumpArtifact(); + } + + FLYSContext flysContext = FLYSUtils.getFlysContext(context); + + StateEngine stateEngine = (StateEngine) flysContext.get( + FLYSContext.STATE_ENGINE_KEY); + + TransitionEngine transitionEngine = (TransitionEngine) flysContext.get( + FLYSContext.TRANSITION_ENGINE_KEY); + + List reachable = transitionEngine.getReachableStates( + this, getCurrentState(context), stateEngine); + + Document description = XMLUtils.newDocument(); + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + description, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element root = ProtocolUtils.createRootNode(creator); + description.appendChild(root); + + State current = getCurrentState(context); + + ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash()); + ProtocolUtils.appendState(creator, root, current); + ProtocolUtils.appendReachableStates(creator, root, reachable); + + appendBackgroundActivity(creator, root, context); + + Element name = ProtocolUtils.createArtNode( + creator, "name", + new String[] { "value" }, + new String[] { getName() }); + + Element ui = ProtocolUtils.createArtNode( + creator, "ui", null, null); + + Element staticUI = ProtocolUtils.createArtNode( + creator, "static", null, null); + + Element outs = ProtocolUtils.createArtNode( + creator, "outputmodes", null, null); + appendOutputModes(description, outs, context, identifier()); + + appendStaticUI(description, staticUI, context, identifier()); + + Element dynamic = current.describe( + this, + description, + root, + context, + identifier()); + + if (dynamic != null) { + ui.appendChild(dynamic); + } + + ui.appendChild(staticUI); + + root.appendChild(name); + root.appendChild(ui); + root.appendChild(outs); + + return description; + + } + + + protected static 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. + */ + protected void appendOutputModes( + Document doc, + Element outs, + CallContext context, + String uuid) + { + List 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 list = state.getOutputs(); + if (list == null || list.size() == 0) { + logger.debug("-> No output modes for this state."); + continue; + } + + List 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 generated = generateOutputs(list, fs); + + ProtocolUtils.appendOutputModes(doc, outs, generated); + } + + try { + DefaultState cur = (DefaultState) getCurrentState(context); + if (cur.validate(this)) { + List list = cur.getOutputs(); + if (list != null && list.size() > 0) { + logger.debug( + "Append output modes for current state: " + cur.getID()); + + List fs = facets.get(cur.getID()); + + if (fs != null && fs.size() > 0) { + List 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. + } + } + + + /** + * This method appends the static data - that has already been inserted by + * the user - to the static node of the DESCRIBE document. + * + * @param doc The document. + * @param ui The root node. + * @param context The CallContext. + * @param uuid The identifier of the artifact. + */ + protected void appendStaticUI( + Document doc, + Node ui, + CallContext context, + String uuid) + { + List stateIds = getPreviousStateIds(); + + logger.debug("previous states: " + stateIds); + FLYSContext flysContext = FLYSUtils.getFlysContext(context); + StateEngine engine = (StateEngine) flysContext.get( + FLYSContext.STATE_ENGINE_KEY); + + for (String stateId: stateIds) { + logger.debug("Append static data for state: " + stateId); + DefaultState state = (DefaultState) engine.getState(stateId); + + ui.appendChild(state.describeStatic(this, doc, ui, context, uuid)); + } + } + + + 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.discharge_longitudinal_section"; + + public static final String W_DIFFERENCES = + "chart.new.w_differences"; + + public static final String WATERLEVEL = + "chart.new.waterlevel"; + + 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 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; + } + + + } +} diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/src/main/resources/messages.properties --- a/flys-artifacts/src/main/resources/messages.properties Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages.properties Fri Jan 13 12:19:53 2012 +0000 @@ -23,6 +23,15 @@ calc.reference.curve = Reference Curve +state.chart.river = River +state.chart.type = Charttype + +chart.new.durationcurve = Duration Curve +chart.new.computeddischargecurve = Discharge Curve +chart.new.discharge_longitudinal_section = Discharge Curve at +chart.new.w_differences = Differences +chart.new.waterlevel = Waterlevel + cross_section = Cross Section scenario.current = Current diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/src/main/resources/messages_de.properties --- a/flys-artifacts/src/main/resources/messages_de.properties Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_de.properties Fri Jan 13 12:19:53 2012 +0000 @@ -23,6 +23,15 @@ calc.reference.curve = Bezugslinie +state.chart.river = Gew\u00e4sser +state.chart.type = Diagrammtyp + +chart.new.durationcurve = Dauerlinie +chart.new.computeddischargecurve = Abflusskurve +chart.new.discharge_longitudinal_section = Abflusskurve bei ungleichwertigem Abfluss +chart.new.w_differences = Differenzen +chart.new.waterlevel = Wasserstand/Wasserspiegellage + cross_section = Querprofil scenario.current = Aktuell diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/src/main/resources/messages_de_DE.properties --- a/flys-artifacts/src/main/resources/messages_de_DE.properties Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_de_DE.properties Fri Jan 13 12:19:53 2012 +0000 @@ -23,6 +23,15 @@ calc.reference.curve = Bezugslinie +state.chart.river = Gew\u00e4sser +state.chart.type = Diagrammtyp + +chart.new.durationcurve = Dauerlinie +chart.new.computeddischargecurve = Abflusskurve +chart.new.discharge_longitudinal_section = Abflusskurve bei ungleichwertigem Abfluss +chart.new.w_differences = Differenzen +chart.new.waterlevel = Wasserstand/Wasserspiegellage + cross_section = Querprofil scenario.current = Aktuell diff -r 2d0b22602fc2 -r d109e7702995 flys-artifacts/src/main/resources/messages_en.properties --- a/flys-artifacts/src/main/resources/messages_en.properties Fri Jan 13 11:41:05 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_en.properties Fri Jan 13 12:19:53 2012 +0000 @@ -21,6 +21,15 @@ calc.discharge.longitudinal.section = TODO (W bei...) calc.w.differences = Differences +state.chart.river = River +state.chart.type = Charttype + +chart.new.durationcurve = Duration Curve +chart.new.computeddischargecurve = Discharge Curve +chart.new.discharge_longitudinal_section = Discharge Curve at +chart.new.w_differences = Differences +chart.new.waterlevel = Waterlevel + cross_section = Cross Section scenario.current = Current