# HG changeset patch # User Sascha L. Teichmann # Date 1308738987 0 # Node ID 4800230fba8a53f4b381cc0411d3942edbbf282b # Parent 7298d58a1f5aa32a301a0158b96a2e420ba0c306 Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet. flys-artifacts/trunk@2200 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/ChangeLog Wed Jun 22 10:36:27 2011 +0000 @@ -1,3 +1,24 @@ +2011-06-21 Sascha L. Teichmann + + Improved situtation on rendering "Abflusskurve am Pegel". Not + fully working, yet. + + * doc/conf/artifacts/winfo.xml: Generate facets for the location path, too. + + * src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java: Misspelled + the facet which prevented the facets from being to the outputs. + + * src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java: + Extended to store the hash and the state id of the producing artifact/state + else it results in NPEs because the data is calculated on later (wrong) states. + + * src/main/java/de/intevation/flys/artifacts/states/LocationDistanceSelect.java: + Store the state id and the hash in the facet, too. + + * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: Add two + method to do calculations for a state the artifact is currently not in + and fetching the current state id. + 2011-06-21 Sascha L. Teichmann * doc/conf/artifacts/winfo.xml: Generate facets for "Abflusskurven am Pegel" diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/doc/conf/artifacts/winfo.xml --- a/flys-artifacts/doc/conf/artifacts/winfo.xml Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/doc/conf/artifacts/winfo.xml Wed Jun 22 10:36:27 2011 +0000 @@ -45,8 +45,7 @@ - - + diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Wed Jun 22 10:36:27 2011 +0000 @@ -280,7 +280,7 @@ * * @return the identifier of the current state. */ - protected String getCurrentStateId() { + public String getCurrentStateId() { return currentStateId; } @@ -321,6 +321,13 @@ return engine.getState(getCurrentStateId()); } + protected State getState(Object context, String stateID) { + FLYSContext flysContext = getFlysContext(context); + StateEngine engine = (StateEngine) flysContext.get( + FLYSContext.STATE_ENGINE_KEY); + return engine.getState(stateID); + } + /** * Returns the vector of previous state identifiers. @@ -1035,7 +1042,7 @@ Object value = entry.getValue().getValue(); hash ^= ((long)key.hashCode() << shift) - | ((long)value.hashCode() << (shift + shift)); + | ((long)value.hashCode() << (shift + 3)); shift += 2; } @@ -1077,13 +1084,27 @@ boolean generateFacets ) { DefaultState current = (DefaultState) getCurrentState(context); + return compute(context, hash, current, type, generateFacets); + } - logger.debug("Create ComputeCallback for state: " + current.getID()); + public Object compute( + CallContext context, + String stateID, + String hash, + ComputeType type, + boolean generateFacets + ) { + DefaultState current = stateID == null + ? (DefaultState)getCurrentState(context) + : (DefaultState)getState(context, stateID); + + if (hash == null) { + hash = hash(); + } return compute(context, hash, current, type, generateFacets); } - public Object compute( CallContext context, String key, diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Wed Jun 22 10:36:27 2011 +0000 @@ -11,7 +11,7 @@ String COMPUTED_DISCHARGE_Q = "computed_discharge_curve.q"; - String DISCHARGE_CURVE = "computed_discharge_curve.curve"; + String DISCHARGE_CURVE = "discharge_curve.curve"; String DURATION_W = "duration_curve.w"; String DURATION_Q = "duration_curve.q"; diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java Wed Jun 22 10:36:27 2011 +0000 @@ -15,11 +15,28 @@ private static Logger logger = Logger.getLogger(WaterlevelFacet.class); + protected ComputeType type; + protected String stateID; + protected String hash; public WaterlevelFacet(int index, String name, String description) { - super(index, name, description); + this(index, name, description, ComputeType.ADVANCE, null, null); } + public WaterlevelFacet( + int index, + String name, + String description, + ComputeType type, + String stateID, + String hash + + ) { + super(index, name, description); + this.type = type; + this.stateID = stateID; + this.hash = hash; + } public Object getData(Artifact artifact, CallContext context) { logger.debug("Get data for waterlevels at index: " + index); @@ -27,7 +44,7 @@ WINFOArtifact winfo = (WINFOArtifact)artifact; CalculationResult res = (CalculationResult) - winfo.compute(context, ComputeType.ADVANCE, false); + winfo.compute(context, stateID, hash, type, false); WQKms [] wqkms = (WQKms [])res.getData(); diff -r 7298d58a1f5a -r 4800230fba8a flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/LocationDistanceSelect.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/LocationDistanceSelect.java Wed Jun 22 09:19:16 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/LocationDistanceSelect.java Wed Jun 22 10:36:27 2011 +0000 @@ -313,6 +313,8 @@ List facets, Object old ) { + logger.debug("computeFeed"); + WINFOArtifact winfo = (WINFOArtifact)artifact; CalculationResult res = old instanceof CalculationResult @@ -320,14 +322,20 @@ : winfo.getDischargeCurveData(); if (facets == null) { + logger.debug("generate no facets"); return res; } WQKms [] wqkms = (WQKms [])res.getData(); + logger.debug("generate " + wqkms.length + " facets."); + + String stateID = winfo.getCurrentStateId(); + for (int i = 0; i < wqkms.length; ++i) { String name = wqkms[i].getName(); - facets.add(new WaterlevelFacet(i, DISCHARGE_CURVE, name)); + facets.add(new WaterlevelFacet( + i, DISCHARGE_CURVE, name, ComputeType.FEED, stateID, hash)); }