Mercurial > dive4elements > river
changeset 2089:0da8874bd378
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
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Fri, 06 Jan 2012 12:02:10 +0000 |
parents | 701658081f4f |
children | 17e7a0d063bd |
files | flys-artifacts/ChangeLog flys-artifacts/doc/conf/artifacts/map.xml flys-artifacts/src/main/java/de/intevation/flys/artifacts/MapArtifact.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java flys-artifacts/src/main/resources/messages.properties flys-artifacts/src/main/resources/messages_de.properties flys-artifacts/src/main/resources/messages_de_DE.properties flys-artifacts/src/main/resources/messages_en.properties |
diffstat | 9 files changed, 258 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- 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 <raimund.renkert@intevation.de> + + * 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 <felix.wolfsteller@intevation.de> Partial fix for flys/issue437 (Querprofil: Zugeladene Basisdaten
--- 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 @@ <?xml version="1.0" encoding="UTF-8"?> <artifact name="map"> <states> - <state id="state.map.new" description="state.map.new" state="de.intevation.flys.artifacts.MapArtifact$MapState"> + <state id="state.map.river" description="state.winfo.river" state="de.intevation.flys.artifacts.states.RiverSelect"> <data name="river" type="String" /> + </state> + + <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition"> + <from state="state.map.river"/> + <to state="state.map.new"/> + </transition> + + <state id="state.map.new" description="state.map.new" state="de.intevation.flys.artifacts.MapArtifact$MapState"> <outputmodes> <outputmode name="floodmap" description="output.uesk.map.description" type="map"> <facets>
--- 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<Facet> 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<State> 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<State> 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<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); + if (cur.validate(this)) { + 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. + } + } + + + /** + * 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<String> 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<Facet> facets) - { - return null; - } - - @Override - public Object computeFeed( + public Object computeAdvance( FLYSArtifact artifact, String hash, CallContext context, List<Facet> 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());
--- 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; }
--- 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; }
--- 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
--- 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 +