# HG changeset patch
# User gernotbelger
# Date 1534512676 -7200
# Node ID b6e595f1696f746f3ca4b187c956fdcd45d5a22d
# Parent 3f49835a00c37cc6ca7136fcdbd5610f1abf159e
Activated cross section output mode for salix line and implemented some themes preliminary.
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/doc/conf/artifacts/uinfo.xml
--- a/artifacts/doc/conf/artifacts/uinfo.xml Fri Aug 17 15:31:02 2018 +0200
+++ b/artifacts/doc/conf/artifacts/uinfo.xml Fri Aug 17 15:31:16 2018 +0200
@@ -3,119 +3,114 @@
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -123,8 +118,8 @@
-
-
+
+
@@ -133,131 +128,133 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
+
-
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
@@ -265,148 +262,92 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
+
+
+
+
-
+
-
-
-
-
+
+
+
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Fri Aug 17 15:31:02 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Fri Aug 17 15:31:16 2018 +0200
@@ -9,11 +9,18 @@
*/
package org.dive4elements.river.artifacts.uinfo;
+import java.io.Serializable;
+
import org.apache.commons.lang.StringUtils;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifactdatabase.state.FacetActivity;
import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.WaterLineArtifact;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.dive4elements.river.artifacts.uinfo.salix.SalixLineCalculationResults;
import org.dive4elements.river.artifacts.uinfo.salix.SalixLineProcessor;
/**
@@ -21,7 +28,7 @@
*
* @author Gernot Belger
*/
-public class UINFOArtifact extends D4EArtifact {
+public class UINFOArtifact extends D4EArtifact implements WaterLineArtifact {
private static final long serialVersionUID = 1L;
@@ -100,4 +107,18 @@
public String getRiver() {
return getDataAsString(FIELD_RIVER);
}
+
+ @Override
+ public double getWaterLevel(final ComputeType type, final String hash, final String stateId, final double currentKm, final Serializable waterLineIndex,
+ final double nextKm,
+ final double prevKm,
+ final CallContext context) {
+
+ final CalculationResult res = (CalculationResult) this.compute(context, hash, stateId, type, false);
+ final Object data = res.getData();
+ if (data instanceof SalixLineCalculationResults)
+ return ((SalixLineCalculationResults) data).getCrossSectionLine(currentKm, waterLineIndex, nextKm, prevKm, context);
+
+ throw new IllegalStateException("Cross section stuff should only happen for salix line");
+ }
}
\ No newline at end of file
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java Fri Aug 17 15:31:02 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java Fri Aug 17 15:31:16 2018 +0200
@@ -33,8 +33,11 @@
class SalixLineCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+
private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
+ private static final double STATION_TOLERANCE = 0.1d;
+
private final String[] scenarioLabels;
private final String partialRangeString;
@@ -176,4 +179,36 @@
return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
}
+
+ public final double getSalixValue(final double currentKm, final double nextKm, final double prevKm) {
+
+ final ResultRow row = getRowForStation(currentKm, STATION_TOLERANCE);
+ if (row == null)
+ return Double.NaN;
+
+ // FIXME: hier wird die geodätische Höhe der SalixLinie benötigt; ggf schon in die Ergebnistzeilen einbauen
+ return 84.0;
+ // return row.getDoubleValue(UInfoResultType.salixline);
+ }
+
+ public final double getSalixScenarioValue(final double currentKm, final double nextKm, final double prevKm, final int scenarioIndex) {
+ final ResultRow row = getRowForStation(currentKm, STATION_TOLERANCE);
+ if (row == null)
+ return Double.NaN;
+
+ final List scenarios = (List) row.getValue(UInfoResultType.customMultiRowColSalixScenarios);
+ final SalixScenario salixScenario = scenarios.get(scenarioIndex);
+ if (salixScenario == null)
+ return Double.NaN;
+
+ // FIXME: hier wird die geodätische Höhe der SalixLinie benötigt; ggf schon als weiteres Feld an SalixScenario dranbauen
+ return 85;
+ // return salixScenario.getSalixValue();
+ }
+
+ public final double getWaterlevelValue(final double currentKm, final double nextKm, final double prevKm, final String waterlevelName) {
+ final ResultRow row = getRowForStation(currentKm, STATION_TOLERANCE);
+ // TODO implement
+ return Double.NaN;
+ }
}
\ No newline at end of file
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java Fri Aug 17 15:31:02 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java Fri Aug 17 15:31:16 2018 +0200
@@ -9,19 +9,28 @@
*/
package org.dive4elements.river.artifacts.uinfo.salix;
+import java.io.Serializable;
+
import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Domenico Nardi Tironi
- *
*/
-final class SalixLineCalculationResults extends AbstractCalculationResults {
+public final class SalixLineCalculationResults extends AbstractCalculationResults {
private static final long serialVersionUID = 1L;
public SalixLineCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
super(calcModeLabel, user, river, calcRange);
}
+
+ public double getCrossSectionLine(final double currentKm, final Serializable waterLineIndex, final double nextKm, final double prevKm,
+ final CallContext context) {
+
+ final SalixLineCrossSectionIndexData indexData = (SalixLineCrossSectionIndexData) waterLineIndex;
+ return indexData.getCrossSectionLine(this, currentKm, nextKm, prevKm, context);
+ }
}
\ No newline at end of file
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java Fri Aug 17 15:31:16 2018 +0200
@@ -0,0 +1,81 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.uinfo.salix;
+
+import java.io.Serializable;
+
+import org.dive4elements.artifacts.CallContext;
+
+/**
+ * The 'index' that tells the cross section facet which of my result are to be fetched as a cross section line.
+ *
+ * @author Gernot Belger
+ */
+public final class SalixLineCrossSectionIndexData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private static final SalixLineCrossSectionIndexData SALIX_LINE = new SalixLineCrossSectionIndexData(null, null);
+
+ // REMARK: we know at the moment there is exactly one result
+ private final int resultIndex = 0;
+
+ private final Integer scenarioIndex;
+
+ private final String waterlevelName;
+
+ /**
+ * Creates an instance of this class that represants the salix line.
+ */
+ public static final SalixLineCrossSectionIndexData salixLine() {
+ return SALIX_LINE;
+ }
+
+ /**
+ * Creates an instance of this class that represants the salix line.
+ */
+ public static final SalixLineCrossSectionIndexData scenario(final int scenarioIndex) {
+ return new SalixLineCrossSectionIndexData(scenarioIndex, null);
+ }
+
+ /**
+ * Creates an instance of this class that represants the salix line.
+ */
+ // FIXME: gemeint sind die einzublendenden 'MNW, MW, MHW, HW5' mir nicht klar wo diese Daten herkommen, ggf. aus der
+ // Rechnung?
+ // FIXME: statt 'name' vielleicht eine enum oder irgend etwas anderes was diese dinger eindeutig referenzieet?
+ public static final SalixLineCrossSectionIndexData waterlevel(final String name) {
+ assert name != null;
+ return new SalixLineCrossSectionIndexData(null, name);
+ }
+
+ private SalixLineCrossSectionIndexData(final Integer scenarioIndex, final String waterlevelName) {
+ this.scenarioIndex = scenarioIndex;
+ this.waterlevelName = waterlevelName;
+ }
+
+ public double getCrossSectionLine(final SalixLineCalculationResults results, final double currentKm, final double nextKm,
+ final double prevKm, final CallContext context) {
+
+ final SalixLineCalculationResult result = results.getResults().get(this.resultIndex);
+
+ if (this.scenarioIndex != null) {
+ // fetch scenario result data = salix line value at km
+ return result.getSalixScenarioValue(currentKm, nextKm, prevKm, this.scenarioIndex);
+ }
+
+ if (this.waterlevelName != null) {
+ // fetch waterlevel result data = salix line value at km
+ return result.getWaterlevelValue(currentKm, nextKm, prevKm, this.waterlevelName);
+ }
+
+ // fetch normal result data = salix line value at km
+ return result.getSalixValue(currentKm, nextKm, prevKm);
+ }
+}
\ No newline at end of file
diff -r 3f49835a00c3 -r b6e595f1696f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java Fri Aug 17 15:31:02 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java Fri Aug 17 15:31:16 2018 +0200
@@ -17,6 +17,7 @@
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.CrossSectionWaterLineFacet;
import org.dive4elements.river.artifacts.model.DataFacet;
import org.dive4elements.river.artifacts.model.EmptyFacet;
import org.dive4elements.river.artifacts.model.FacetTypes;
@@ -48,7 +49,7 @@
return null;
}
- return compute((UINFOArtifact) artifact, context, hash, facets, old);
+ return compute((UINFOArtifact) artifact, context, ComputeType.FEED, hash, facets, old);
}
@Override
@@ -57,7 +58,7 @@
facets.add(new EmptyFacet());
return null;
}
- return compute((UINFOArtifact) artifact, context, hash, facets, old);
+ return compute((UINFOArtifact) artifact, context, ComputeType.ADVANCE, hash, facets, old);
}
/**
@@ -66,7 +67,8 @@
* @param old
* Object that was cached.
*/
- private Object compute(final UINFOArtifact uinfo, final CallContext context, final String hash, final List facets, final Object old) {
+ private Object compute(final UINFOArtifact uinfo, final CallContext context, final ComputeType type, final String hash, final List facets,
+ final Object old) {
final CalculationResult res = doCompute(uinfo, context, old);
@@ -77,14 +79,18 @@
final List resultList = results.getResults();
+ final String stateId = getID();
+
int facetIndex = 0;
if (!resultList.isEmpty()) {
- facets.add(SalixLineProcessor.createSalixLineFilteredFacet(context, hash, this.id, facetIndex++, 0));
- facets.add(SalixLineProcessor.createSalixLineRawFacet(context, hash, this.id, facetIndex++, 0));
- facets.add(SalixLineProcessor.createSalixMnwMwFilteredFacet(context, hash, this.id, facetIndex++, 0));
- facets.add(SalixLineProcessor.createSalixMnwMwRawFacet(context, hash, this.id, facetIndex++, 0));
- facets.add(SalixLineProcessor.createSalixRankFacet(context, hash, this.id, facetIndex++, 0));
+ facets.add(SalixLineProcessor.createSalixLineFilteredFacet(context, hash, stateId, facetIndex++, 0));
+ facets.add(SalixLineProcessor.createSalixLineRawFacet(context, hash, stateId, facetIndex++, 0));
+ facets.add(SalixLineProcessor.createSalixMnwMwFilteredFacet(context, hash, stateId, facetIndex++, 0));
+ facets.add(SalixLineProcessor.createSalixMnwMwRawFacet(context, hash, stateId, facetIndex++, 0));
+ facets.add(SalixLineProcessor.createSalixRankFacet(context, hash, stateId, facetIndex++, 0));
+
+ facets.add(new CrossSectionWaterLineFacet(facetIndex++, "Salix Linie (!I10N!)", type, hash, stateId, SalixLineCrossSectionIndexData.salixLine()));
final SalixLineCalculationResult result = resultList.get(0);
@@ -93,12 +99,17 @@
result.getScenarioLabel(i));
// REMARK: using data index as facetIndex, as we know there is only one result of this type. Else we should just
// increment
- facets.add(SalixLineProcessor.createSalixScenarioFilteredFacet(context, hash, this.id, i, 0, facetIndex++, sublabel));
- facets.add(SalixLineProcessor.createSalixScenarioRawFacet(context, hash, this.id, i, 0, facetIndex++, sublabel));
+ facets.add(SalixLineProcessor.createSalixScenarioFilteredFacet(context, hash, stateId, i, 0, facetIndex++, sublabel));
+ facets.add(SalixLineProcessor.createSalixScenarioRawFacet(context, hash, stateId, i, 0, facetIndex++, sublabel));
+
+ facets.add(new CrossSectionWaterLineFacet(facetIndex++, "Salix Linie Scenario (!I10N! )" + i, type, hash, stateId,
+ SalixLineCrossSectionIndexData.scenario(i)));
}
- final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
- final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
+ // FIXME: add cross section wst lines (MW, MMHW, ...)
+
+ final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, stateId);
+ final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, stateId);
facets.add(csv);
facets.add(pdf);
@@ -107,7 +118,7 @@
final Calculation report = res.getReport();
if (report.hasProblems())
- facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
+ facets.add(new ReportFacet(ComputeType.ADVANCE, hash, stateId));
return res;
}