# HG changeset patch # User Tim Englich # Date 1252418879 0 # Node ID f31343d80d5316b73cb2fd1610516495335dcb2f # Parent f01592cd6419d633ddbf09397326d82c4ade8112 Artifact.advance initial implementiert gnv-artifacts/trunk@40 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/Changelog --- a/gnv-artifacts/Changelog Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/Changelog Tue Sep 08 14:07:59 2009 +0000 @@ -1,3 +1,14 @@ +2009-09-08 Tim Englich + + * src/main/java/de/intevation/gnv/transition/TransitionBase.java Edited, + src/main/java/de/intevation/gnv/transition/Transition.java Edited, + src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Edited, + src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCase.java Edited, + src/test/ressources/GNVArtifactsTestCase_Configuration.xml Edited, + src/test/ressources/timeseries/timeseries_step_01_feed.xml Added , + src/test/ressources/timeseries/timeseries_step_01_advance.xml Added : + Artifact.advance initial implementiert + 2009-09-08 Tim Englich * src/main/java/de/intevation/gnv/timeseries/TimeSeriesArtifact.java Edited, diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Tue Sep 08 14:07:59 2009 +0000 @@ -72,6 +72,53 @@ super(); } + /** + * @see de.intevation.artifactdatabase.DefaultArtifact#advance(org.w3c.dom.Document, java.lang.Object) + */ + @Override + public Document advance(Document target, Object context) { + Document result = super.newDocument(); + if (this.current != null){ + String transitionName = this.readTransitionName(target); + if (this.current.isTransitionReachable(transitionName)){ + // 1. Prüfung ob Transition valide ist + if (this.current.validate()){ + + try { + Transition nextStep = this.transitions.get(transitionName); + // 2.Ergebnisse Berechnen + this.current.advance(); + // 3. Ergebnisse übergeben + nextStep.setDescibeData(this.current.getDescibeData()); + // 4. Umschalten auf neue Transistion + this.current = nextStep; + } catch (TransitionException e) { + log.error(e,e); + // TODO: Errormmessage senden. + } + + }else{ + log.error("Advance nicht möglich, da die Bedingungen für den Übergang " + + "in den neuen Zustand noch nicht gegeben ist."); + // TODO: Errormmessage senden. + } + + }else{ + log.error("Transitionsübergang wird nicht unterstützt."); + // TODO: Errormmessage senden. + } + }else{ + log.error("Kein Transitionsschritt aktiviert."); + // TODO: Errormmessage senden. + } + return result; + } + + protected String readTransitionName(Document document) { + String returnValue = Config.getStringXPath(document, "action/target/@name"); + return returnValue; + } + protected Node getConfigurationFragment(Document document){ log.debug("GNVArtifactBase.getConfigurationFragment"); String xpathQuery = XPATH_ARTIFACT_CONFIGURATION.replaceAll(XPATH_IDENTIFIER_REPLACE, this.name); diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/main/java/de/intevation/gnv/transition/Transition.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/Transition.java Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/Transition.java Tue Sep 08 14:07:59 2009 +0000 @@ -20,6 +20,8 @@ public Collection reachableTransitions(); + public boolean isTransitionReachable(String transitionID); + public String getID(); public String getDescription(); @@ -36,5 +38,12 @@ public void putInputData(Collection inputData) throws TransitionException; + public void advance() throws TransitionException; + + + public Collection getDescibeData(); + + public void setDescibeData(Collection descibeData); + } diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Tue Sep 08 14:07:59 2009 +0000 @@ -16,6 +16,10 @@ import de.intevation.artifactdatabase.Config; import de.intevation.gnv.artifacts.GNVArtifactBase; +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.query.QueryExecutor; +import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; +import de.intevation.gnv.geobackend.base.query.exception.QueryException; import de.intevation.gnv.transition.exception.TransitionException; /** @@ -44,7 +48,9 @@ private Transition parent = null; - private Collection inputData = null; + private Map inputData = null; + + private Collection descibeData = null; /** * Constructor */ @@ -140,9 +146,9 @@ InputValue inputValue = this.inputValues.get(tmpItem.getName()); if (inputValue != null){ if (this.inputData == null){ - this.inputData = new ArrayList(inputData.size()); - // TODO validate Value; - this.inputData.add(tmpItem); + this.inputData = new HashMap(inputData.size()); + // TODO validate Value; und Valueconcatenieren + this.inputData.put(tmpItem.getName(),tmpItem); } }else{ @@ -157,5 +163,60 @@ } } - + + /** + * @see de.intevation.gnv.transition.Transition#isTransitionReachable(java.lang.String) + */ + public boolean isTransitionReachable(String transitionID) { + log.debug("TransitionBase.isTransitionReachable"); + boolean returnValue = false; + Iterator transitions = reachableTransitions.iterator(); + while (transitions.hasNext()){ + if(transitions.next().equals(transitionID)){ + log.debug("Transition "+transitionID+" wird unterstützt."); + returnValue = true; + break; + } + } + return returnValue; + } + + /** + * @see de.intevation.gnv.transition.Transition#advance() + */ + public void advance() throws TransitionException { + log.debug("TransitionBase.advance"); + try { + String[] filterValues = new String[this.inputValueNames.size()]; + Iterator it = this.inputValueNames.iterator(); + int i = 0; + while (it.hasNext()){ + filterValues[i++] = this.inputData.get(it.next()).getValue(); + } + QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor(); + Collection result = queryExecutor.executeQuery(this.queryID, filterValues); + if (this.descibeData == null){ + this.descibeData = new ArrayList(); + } + this.descibeData.add(result); + } catch (QueryException e) { + log.error(e,e); + throw new TransitionException(e); + } + } + + /** + * @see de.intevation.gnv.transition.Transition#getDescibeData() + */ + public Collection getDescibeData() { + return this.descibeData; + } + + /** + * @see de.intevation.gnv.transition.Transition#setDescibeData(java.util.Collection) + */ + public void setDescibeData(Collection descibeData) { + this.descibeData = descibeData; + + } } diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCase.java --- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCase.java Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCase.java Tue Sep 08 14:07:59 2009 +0000 @@ -3,8 +3,11 @@ */ package de.intevation.gnv.artifacts; +import java.io.File; +import java.io.IOException; import java.io.StringWriter; +import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; @@ -18,6 +21,7 @@ import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import org.w3c.dom.Document; +import org.xml.sax.SAXException; import de.intevation.artifactdatabase.Config; import de.intevation.artifactdatabase.FactoryBootstrap; @@ -77,15 +81,15 @@ assertNotNull(artifact); log.debug("TimeSeries-Artifact is available"); - Document indata = this.getDocument(); - Document outData = this.createOutputDocument(); + Document outputData = artifact.describe(bootstrap.getContext()); this.writeDocument2Log(outputData); - artifact.feed(indata, bootstrap.getContext()); - artifact.advance(outData, bootstrap.getContext()); + artifact.feed(this.readDocument("src/test/ressources/timeseries/timeseries_step_01_feed.xml"), bootstrap.getContext()); + outputData = artifact.advance(this.readDocument("src/test/ressources/timeseries/timeseries_step_01_advance.xml"), bootstrap.getContext()); + this.writeDocument2Log(outputData); outputData = artifact.describe(bootstrap.getContext()); - + this.writeDocument2Log(outputData); } @@ -139,5 +143,22 @@ } } + + protected Document readDocument(String fileName){ + Document returnValue = null; + try { + DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); + returnValue = docBuilder.parse (new File(fileName)); + } catch (ParserConfigurationException e) { + log.error(e,e); + } catch (SAXException e) { + log.error(e,e); + } catch (IOException e) { + log.error(e,e); + } + return returnValue; + } + } diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/test/ressources/GNVArtifactsTestCase_Configuration.xml --- a/gnv-artifacts/src/test/ressources/GNVArtifactsTestCase_Configuration.xml Tue Sep 08 12:22:00 2009 +0000 +++ b/gnv-artifacts/src/test/ressources/GNVArtifactsTestCase_Configuration.xml Tue Sep 08 14:07:59 2009 +0000 @@ -12,17 +12,17 @@ - + mesh - timeSeries.end + timeseries.step.2 - + mesh diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/test/ressources/timeseries/timeseries_step_01_advance.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/test/ressources/timeseries/timeseries_step_01_advance.xml Tue Sep 08 14:07:59 2009 +0000 @@ -0,0 +1,8 @@ + + + + + + + diff -r f01592cd6419 -r f31343d80d53 gnv-artifacts/src/test/ressources/timeseries/timeseries_step_01_feed.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/test/ressources/timeseries/timeseries_step_01_feed.xml Tue Sep 08 14:07:59 2009 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file