# HG changeset patch # User Raimund Renkert # Date 1325851330 0 # Node ID 0da8874bd378056780fb7baaa4b9dfe0eda183fc # Parent 701658081f4fad56fafaf80eeef777389784fbd8 Added initial state to map artifact to be able to advance and step back. The map artifact overrides describe() to have the complete UI information in the describe response document. flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri Jan 06 12:02:10 2012 +0000 @@ -1,3 +1,24 @@ +2011-01-06 Raimund Renkert + + * src/main/java/de/intevation/flys/artifacts/MapArtifact.java: + The map artifact has two states now and overrides describe() to + generate UI sections in the describe response. + The map state overrides computeAdvance() instead of computeFeed(). + + * src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java, + src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java: + Changed the WMSDBArtifact in WMSDBState to FLYSArtifact and adjusted + constructors in state classes. + + * doc/conf/artifacts/map.xml: + Added initial state and transition. + + * 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 state. + 2011-01-06 Felix Wolfsteller Partial fix for flys/issue437 (Querprofil: Zugeladene Basisdaten diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/doc/conf/artifacts/map.xml --- a/flys-artifacts/doc/conf/artifacts/map.xml Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/doc/conf/artifacts/map.xml Fri Jan 06 12:02:10 2012 +0000 @@ -1,8 +1,16 @@ - + + + + + + + + + diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/java/de/intevation/flys/artifacts/MapArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/MapArtifact.java Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/MapArtifact.java Fri Jan 06 12:02:10 2012 +0000 @@ -5,27 +5,34 @@ import java.util.List; import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; import de.intevation.artifacts.ArtifactFactory; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.CallContext; -import de.intevation.artifactdatabase.state.DefaultOutput; +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.flys.artifacts.model.WMSDBLayerFacet; +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.model.FacetTypes; -import de.intevation.flys.artifacts.model.RiverFactory; -import de.intevation.flys.artifacts.resources.Resources; -import de.intevation.flys.utils.FLYSUtils; -import de.intevation.flys.utils.GeometryUtils; +import de.intevation.flys.artifacts.RiverAxisArtifact.RiverAxisState; +import de.intevation.flys.artifacts.states.DefaultState; +import de.intevation.flys.artifacts.context.FLYSContext; +import de.intevation.flys.artifacts.model.WMSDBLayerFacet; -public class MapArtifact extends RiverAxisArtifact { +public class MapArtifact extends FLYSArtifact { private static final Logger logger = Logger.getLogger(MapArtifact.class); @@ -40,64 +47,226 @@ { logger.debug("MapArtifact.setup"); this.identifier = identifier; - } - - @Override - public State getCurrentState(Object cc) { - logger.debug("MapArtifact.getCurrentState"); - - State state = new MapState(this); - List fs = facets.get(getCurrentStateId()); + name = "map"; - DefaultOutput o = new DefaultOutput( - "floodmap", - "floodmap", - "image/png", - fs, - "map"); + FLYSContext flysContext = FLYSUtils.getFlysContext(context); - state.getOutputs().add(o); + List states = getStates(context); - return state; + setCurrentState(states.get(0)); } @Override - public String getCurrentStateId() { - return "state.map.new"; + 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 MapState extends RiverAxisState { - public MapState() { - } - - public MapState(MapArtifact artifact) { - super(artifact); - this.id = "state.map.new"; - } - @Override - public Object computeInit( - FLYSArtifact artifact, - String hash, - Object context, - CallMeta meta, - List facets) - { - return null; - } - - @Override - public Object computeFeed( + public Object computeAdvance( FLYSArtifact artifact, String hash, CallContext context, List facets, Object old) { - logger.debug("MapState.computeFeed"); + logger.debug("MapState.computeAdvance"); + + this.artifact = artifact; String type = getFacetType(); @@ -105,7 +274,7 @@ 0, type, getTitle(context.getMeta()), - ComputeType.FEED, + ComputeType.ADVANCE, getID(), hash, getUrl()); diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java Fri Jan 06 12:02:10 2012 +0000 @@ -83,7 +83,7 @@ public RiverAxisState(){} - public RiverAxisState(WMSDBArtifact artifact) { + public RiverAxisState(FLYSArtifact artifact) { super(artifact); riverId = 0; } diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Fri Jan 06 12:02:10 2012 +0000 @@ -103,11 +103,11 @@ public static abstract class WMSDBState extends DefaultState { private static final Logger logger = Logger.getLogger(WMSDBState.class); - protected WMSDBArtifact artifact; + protected FLYSArtifact artifact; public WMSDBState() {} - public WMSDBState(WMSDBArtifact artifact) { + public WMSDBState(FLYSArtifact artifact) { this.artifact = artifact; } diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/resources/messages.properties --- a/flys-artifacts/src/main/resources/messages.properties Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages.properties Fri Jan 06 12:02:10 2012 +0000 @@ -119,3 +119,4 @@ Saar = Saar Elbe = Elbe +state.map.river = River diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/resources/messages_de.properties --- a/flys-artifacts/src/main/resources/messages_de.properties Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_de.properties Fri Jan 06 12:02:10 2012 +0000 @@ -119,3 +119,5 @@ Saar = Saar Elbe = Elbe +state.map.river = Gew\u00e4sser + diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/resources/messages_de_DE.properties --- a/flys-artifacts/src/main/resources/messages_de_DE.properties Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_de_DE.properties Fri Jan 06 12:02:10 2012 +0000 @@ -118,3 +118,5 @@ Mosel = Mosel Saar = Saar Elbe = Elbe + +state.map.river = Gew\u00e4sser diff -r 701658081f4f -r 0da8874bd378 flys-artifacts/src/main/resources/messages_en.properties --- a/flys-artifacts/src/main/resources/messages_en.properties Fri Jan 06 10:11:48 2012 +0000 +++ b/flys-artifacts/src/main/resources/messages_en.properties Fri Jan 06 12:02:10 2012 +0000 @@ -115,3 +115,5 @@ Saar = Saar Elbe = Elbe +state.map.river = River +