# HG changeset patch
# User gernotbelger
# Date 1538391822 -7200
# Node ID ee6508687e3f6d8bac6cf29ba2b83430c53fc73b
# Parent 1722727803f71a18ccd5aecc4ba759df83c3066a
Added default vegetation zones tzo iota result map.
diff -r 1722727803f7 -r ee6508687e3f artifacts/doc/conf/artifacts/uinfo.xml
--- a/artifacts/doc/conf/artifacts/uinfo.xml Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/doc/conf/artifacts/uinfo.xml Mon Oct 01 13:03:42 2018 +0200
@@ -156,6 +156,7 @@
+
diff -r 1722727803f7 -r ee6508687e3f artifacts/doc/conf/themes.xml
--- a/artifacts/doc/conf/themes.xml Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/doc/conf/themes.xml Mon Oct 01 13:03:42 2018 +0200
@@ -494,6 +494,7 @@
+
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Mon Oct 01 13:03:42 2018 +0200
@@ -112,14 +112,12 @@
@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 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);
+ return ((SalixLineCalculationResults) data).getCrossSectionLine(currentKm, waterLineIndex, nextKm, prevKm);
throw new IllegalStateException("Cross section stuff should only happen for salix line");
}
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/PredefinedVegetationZonesArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/PredefinedVegetationZonesArtifact.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/PredefinedVegetationZonesArtifact.java Mon Oct 01 13:03:42 2018 +0200
@@ -23,7 +23,6 @@
import org.dive4elements.river.artifacts.AbstractStaticStateArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.FacetTypes;
-import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.StaticState;
import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
import org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZonesCrossSectionProcessor;
@@ -42,8 +41,6 @@
/** Artifact name. */
private static final String NAME = "predefined_vegetation_zones";
- private static final String DEFAULT_VEGZONES_DESCRIPTION = "uinfo_facet_vegetation_default_zones_cross_section.description";
-
private static final String STATIC_STATE_NAME = "state.predefined_vegetation_zones.static";
static {
@@ -95,10 +92,8 @@
addStringData(UINFOArtifact.FIELD_VEGZONES, vegZoneData);
- final String seriesName = Resources.getMsg(callMeta, DEFAULT_VEGZONES_DESCRIPTION);
-
final List facets = new ArrayList<>(1);
- facets.add(VegetationZonesCrossSectionProcessor.createVegetationZonesCrossSectionFacet(seriesName));
+ facets.add(VegetationZonesCrossSectionProcessor.createDefaultVegetationZonesCrossSectionFacet(callMeta));
addFacets(STATIC_STATE_NAME, facets);
}
diff -r 1722727803f7 -r ee6508687e3f 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 Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java Mon Oct 01 13:03:42 2018 +0200
@@ -12,7 +12,6 @@
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;
@@ -27,10 +26,9 @@
super(calcModeLabel, user, river, calcRange);
}
- public double getCrossSectionLine(final double currentKm, final Serializable waterLineIndex, final double nextKm, final double prevKm,
- final CallContext context) {
+ public double getCrossSectionLine(final double currentKm, final Serializable waterLineIndex, final double nextKm, final double prevKm) {
final SalixLineCrossSectionIndexData indexData = (SalixLineCrossSectionIndexData) waterLineIndex;
- return indexData.getCrossSectionLine(this, currentKm, nextKm, prevKm, context);
+ return indexData.getCrossSectionLine(this, currentKm, nextKm, prevKm);
}
}
\ No newline at end of file
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java Mon Oct 01 13:03:42 2018 +0200
@@ -177,28 +177,4 @@
noScen.add(null);
return noScen;
}
-
- // /**
- // * Find and return a height (iota, w main value) of a station in a previously calculated result
- // */
- // public double fetchStationHeight(final double station, final AbstractResultType resultType,
- // final SalixLineCalculationResult result) {
- //
- // // Search the station in the previously calculated result rows
- // final ResultRow stationRow = searchStation(station, result.getRows());
- // if (stationRow != null)
- // return stationRow.getDoubleValue(resultType);
- // return Double.NaN;
- // }
-
- // /**
- // * Searches the row of a station in a result rows collection
- // */
- // private ResultRow searchStation(final double station, final Collection rows) {
- // for (final ResultRow row : rows) {
- // if (row.getDoubleValue(GeneralResultType.station) > station + 0.0001)
- // return row;
- // }
- // return null;
- // }
}
\ No newline at end of file
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java Mon Oct 01 13:03:42 2018 +0200
@@ -11,8 +11,6 @@
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.
*
@@ -68,8 +66,7 @@
this.waterlevel = waterlevel;
}
- public double getCrossSectionLine(final SalixLineCalculationResults results, final double currentKm, final double nextKm, final double prevKm,
- final CallContext context) {
+ public double getCrossSectionLine(final SalixLineCalculationResults results, final double currentKm, final double nextKm, final double prevKm) {
final SalixLineCalculationResult result = results.getResults().get(this.resultIndex);
diff -r 1722727803f7 -r ee6508687e3f 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 Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java Mon Oct 01 13:03:42 2018 +0200
@@ -25,6 +25,7 @@
import org.dive4elements.river.artifacts.states.DefaultState;
import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
import org.dive4elements.river.artifacts.uinfo.salix.SalixLineCrossSectionIndexData.SalixWaterlevel;
+import org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZonesCrossSectionProcessor;
/**
* @author Domenico Nardi Tironi
@@ -84,6 +85,10 @@
int facetIndex = 0;
if (!resultList.isEmpty()) {
+
+ /* we know there is exactly one result */
+ final SalixLineCalculationResult result = resultList.get(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));
@@ -91,15 +96,12 @@
facets.add(SalixLineProcessor.createSalixRankFacet(context, hash, stateId, facetIndex++, 0));
facets.add(SalixLineProcessor.createSalixCrossSectionFacet(context, type, hash, stateId, facetIndex++));
-
- final SalixLineCalculationResult result = resultList.get(0);
+ facets.add(VegetationZonesCrossSectionProcessor.createDefaultVegetationZonesCrossSectionFacet(context.getMeta()));
for (int i = 0; i <= result.getScenarioCount() - 1; i++) {
final String scenarioLabel = result.getScenarioLabel(i);
final String sublabel = Resources.getMsg(context.getMeta(), "uinfo_salix_scenario_deltaw", "uinfo_salix_scenario_deltaw", scenarioLabel);
- // 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, stateId, i, 0, facetIndex++, sublabel));
facets.add(SalixLineProcessor.createSalixScenarioRawFacet(context, hash, stateId, i, 0, facetIndex++, sublabel));
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java Mon Oct 01 13:03:42 2018 +0200
@@ -18,13 +18,14 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
import org.dive4elements.artifacts.DataProvider;
import org.dive4elements.river.artifacts.D4EArtifact;
-import org.dive4elements.river.artifacts.common.AbstractProcessor;
+import org.dive4elements.river.artifacts.access.RiverAccess;
import org.dive4elements.river.artifacts.model.CrossSectionFacetUtils;
import org.dive4elements.river.artifacts.model.river.MainWstValuesCalculator;
+import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.exports.CrossSectionGenerator;
-import org.dive4elements.river.exports.DiagramGenerator;
import org.dive4elements.river.jfree.StripedAreaDataset;
import org.dive4elements.river.jfree.StripedAreaDataset.Stripe;
import org.dive4elements.river.model.FastCrossSectionLine;
@@ -35,17 +36,25 @@
* @author Domenico Nardi Tironi
*
*/
-public class VegetationZonesCrossSectionProcessor extends AbstractProcessor {
+public final class VegetationZonesCrossSectionProcessor {
private static final String MAIN_VALUE_MQ = "mq";
- public static final String FACET_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_vegetation_zones_cross_section";
+ private static final String FACET_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_vegetation_zones_cross_section";
+ private static final String FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_default_vegetation_zones_cross_section";
+
+ private static final String DEFAULT_VEGZONES_DESCRIPTION = "uinfo_facet_vegetation_default_zones_cross_section.description";
private static final Set HANDLED_FACET_TYPES = new HashSet<>();
static {
HANDLED_FACET_TYPES.add(FACET_VEGETATION_ZONES_CROSS_SECTION);
+ HANDLED_FACET_TYPES.add(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION);
+ }
+
+ public static final boolean canHandle(final String facettype) {
+ return HANDLED_FACET_TYPES.contains(facettype);
}
public static Facet createVegetationZonesCrossSectionFacet(final String description) {
@@ -53,6 +62,13 @@
return new VegetationZonesCrossSectionFacet(FACET_VEGETATION_ZONES_CROSS_SECTION, description);
}
+ public static Facet createDefaultVegetationZonesCrossSectionFacet(final CallMeta callMeta) {
+
+ final String description = Resources.getMsg(callMeta, DEFAULT_VEGZONES_DESCRIPTION);
+
+ return new VegetationZonesCrossSectionFacet(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION, description);
+ }
+
public static void generateSeries(final CrossSectionGenerator generator, final ArtifactAndFacet bundle, final CallContext context,
final ThemeDocument theme, final boolean visible) {
@@ -62,27 +78,39 @@
return;
final double currentStation = crossSection.getKm();
+ final RiverAccess rAccess = new RiverAccess((D4EArtifact) bundle.getArtifact());
+ final River river = rAccess.getRiver();
+
+ final List zones = findZonesData(bundle, context, river);
+
+ final StripedAreaDataset dataset = new StripedAreaDataset(theme);
+
+ for (final VegetationZoneServerClientXChange zone : zones) {
+
+ final double lower = uefdToHeight(context, river, currentStation, zone.getLowerFromTo());
+ final double upper = uefdToHeight(context, river, currentStation, zone.getUpperFromTo());
+
+ final Color color = Color.decode(zone.getHexColor());
+ final String label = String.format("%s (%dd-%dd)", zone.getZoneName(), zone.getLowerFromTo(), zone.getUpperFromTo());
+ dataset.addStripe(new Stripe(label, color, lower, upper));
+ }
+
+ generator.addAxisDataset(dataset, 0, visible);
+ return;
+ }
+
+ private static List findZonesData(final ArtifactAndFacet bundle, final CallContext context, final River river) {
+
if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) {
- final StripedAreaDataset dataset = new StripedAreaDataset(theme);
-
final Artifact artifact = bundle.getArtifact();
final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact);
- final River river = vAccess.getRiver();
- final List zones = VegetationZoneServerClientXChange.parse(vAccess.getVegZones());
-
- for (final VegetationZoneServerClientXChange zone : zones) {
+ return VegetationZoneServerClientXChange.parse(vAccess.getVegZones());
+ }
- final double lower = uefdToHeight(context, river, currentStation, zone.getLowerFromTo());
- final double upper = uefdToHeight(context, river, currentStation, zone.getUpperFromTo());
+ if (bundle.getFacetName().equals(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION)) {
- final Color color = Color.decode(zone.getHexColor());
- final String label = String.format("%s (%dd-%dd)", zone.getZoneName(), zone.getLowerFromTo(), zone.getUpperFromTo());
- dataset.addStripe(new Stripe(label, color, lower, upper));
- }
-
- generator.addAxisDataset(dataset, 0, visible);
- return;
+ return VegetationZoneServerClientXChange.getStandardList(river, context);
}
throw new UnsupportedOperationException();
@@ -90,6 +118,7 @@
private static double uefdToHeight(final CallContext context, final River river, final double station, final int uefd) {
+ // FIXME: cache me
final MainWstValuesCalculator mainWstValues = MainWstValuesCalculator.forRiver(context, river, null, MAIN_VALUE_MQ);
final double mw = mainWstValues.interpolateW(station, MAIN_VALUE_MQ);
@@ -101,16 +130,4 @@
final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5;
return dgm;
}
-
- public VegetationZonesCrossSectionProcessor() {
- super(CrossSectionGenerator.I18N_YAXIS_LABEL, HANDLED_FACET_TYPES);
-
- throw new UnsupportedOperationException();
- }
-
- @Override
- protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
- throw new UnsupportedOperationException();
- }
-
}
\ No newline at end of file
diff -r 1722727803f7 -r ee6508687e3f artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java Mon Oct 01 13:01:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/CrossSectionGenerator.java Mon Oct 01 13:03:42 2018 +0200
@@ -308,7 +308,7 @@
attr,
visible);
}
- else if (name.equals(VegetationZonesCrossSectionProcessor.FACET_VEGETATION_ZONES_CROSS_SECTION)) {
+ else if (VegetationZonesCrossSectionProcessor.canHandle(name)) {
VegetationZonesCrossSectionProcessor.generateSeries(this, artifactFacet, context, attr, visible);
}
else if (FacetTypes.IS.MANUALLINE(name)) {