# HG changeset patch # User gernotbelger # Date 1538135052 -7200 # Node ID 8b7bf26b878206a3d1c79739ffa3b7e4a353d137 # Parent 3f230fe8eb196086d918fbf1ba2b6f440c6335cf Predefined artifact for standard vegetation zones. Some minor adaptions. diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/doc/conf/meta-data.xml --- a/artifacts/doc/conf/meta-data.xml Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/doc/conf/meta-data.xml Fri Sep 28 13:44:12 2018 +0200 @@ -256,7 +256,7 @@ - + Duration curve @@ -341,8 +341,7 @@ - - + @@ -1331,14 +1330,15 @@ - - - - - - + + + + + + + - + @@ -3779,10 +3779,7 @@ - - - - + @@ -3793,8 +3790,6 @@ - - diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/model/river/MainWstValuesCalculator.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/river/MainWstValuesCalculator.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/river/MainWstValuesCalculator.java Fri Sep 28 13:44:12 2018 +0200 @@ -31,10 +31,11 @@ private final Map positions; - private static class MainValueQPosition { + static class MainValueQPosition { - private final Map gaugePositions = new HashMap<>(); - private QPosition refGaugePositions = null; + public final Map gaugePositions = new HashMap<>(); + + public QPosition refGaugePositions = null; } public static MainWstValuesCalculator forRiver(final CallContext context, final River river, final DoubleRange calcRange, final String... mainValueNames) { @@ -93,7 +94,7 @@ public boolean hasPosition(final String mainValueName) { - final MainValueQPosition position = this.positions.get(mainValueName); + final MainValueQPosition position = this.positions.get(mainValueName.toUpperCase()); if (position == null) throw new IllegalArgumentException(); diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/predefinedchannel/PredefinedChannelArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/predefinedchannel/PredefinedChannelArtifact.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/predefinedchannel/PredefinedChannelArtifact.java Fri Sep 28 13:44:12 2018 +0200 @@ -33,10 +33,11 @@ * Display of a river channel data series loaded from database * * @author Matthias Schäfer - * */ public class PredefinedChannelArtifact extends AbstractStaticStateArtifact implements FacetTypes { + private static final long serialVersionUID = 1L; + /** The log for this class. */ private static Logger log = Logger.getLogger(PredefinedChannelArtifact.class); @@ -48,7 +49,7 @@ FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE); } - public static final String STATIC_STATE_NAME = "state.predefined_channel.static"; + private static final String STATIC_STATE_NAME = "state.predefined_channel.static"; /** * Trivial Constructor. diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java Fri Sep 28 13:44:12 2018 +0200 @@ -47,6 +47,8 @@ private static final String FIELD_MODE = "calculation_mode"; + public static final String FIELD_VEGZONES = "vegzones"; + static { // Active/deactivate facets. // BEWARE: we can only define one activity for "uinfo", so we use the artifact diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/PredefinedVegetationZonesArtifact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/PredefinedVegetationZonesArtifact.java Fri Sep 28 13:44:12 2018 +0200 @@ -0,0 +1,117 @@ +/** 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.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dive4elements.artifactdatabase.state.DefaultOutput; +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifactdatabase.state.FacetActivity; +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.ArtifactFactory; +import org.dive4elements.artifacts.CallMeta; +import org.dive4elements.artifacts.common.utils.XMLUtils; +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; +import org.w3c.dom.Document; + +/** + * Display of vegetation zones loaded from database + * + * @author Gernot Belger + * + */ +public class PredefinedVegetationZonesArtifact extends AbstractStaticStateArtifact implements FacetTypes { + + private static final long serialVersionUID = 1L; + + /** 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 { + // TODO: Move to configuration. + FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE); + } + + /** The log for this class. */ + private static Logger log = Logger.getLogger(PredefinedVegetationZonesArtifact.class); + + @Override + public String getName() { + return NAME; + } + + @Override + protected void initStaticState() { + + final StaticState state = new StaticState(STATIC_STATE_NAME); + final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart"); + + final List facets = getFacets(STATIC_STATE_NAME); + output.addFacets(facets); + state.addOutput(output); + + setStaticState(state); + } + + /** + * Gets called from factory, to set things up. + */ + @Override + public void setup(final String identifier, final ArtifactFactory factory, final Object context, final CallMeta callMeta, final Document data, + final List loadFacets) { + + if (log.isDebugEnabled()) + log.debug(XMLUtils.toString(data)); + + final String vegZoneData = getDatacageIDValue(data); + + createFacets(callMeta, vegZoneData); + + super.setup(identifier, factory, context, callMeta, data, loadFacets); + } + + private void createFacets(final CallMeta callMeta, final String vegZoneData) { + if (vegZoneData == null) + return; + + 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)); + addFacets(STATIC_STATE_NAME, facets); + } + + @Override + protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) { + // do not clone facets, etc. from master artifact + + log.debug("initialize"); + importData((D4EArtifact) artifact, "river"); + importData((D4EArtifact) artifact, "ld_from"); + importData((D4EArtifact) artifact, "ld_to"); + + log.debug("ld_from " + getDataAsString("ld_from")); + log.debug("ld_to " + getDataAsString("ld_to")); + } +} \ No newline at end of file diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java Fri Sep 28 13:44:12 2018 +0200 @@ -127,5 +127,4 @@ } return null; } - } \ No newline at end of file diff -r 3f230fe8eb19 -r 8b7bf26b8782 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 Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java Fri Sep 28 13:44:12 2018 +0200 @@ -10,7 +10,6 @@ package org.dive4elements.river.artifacts.uinfo.salix; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map.Entry; import java.util.NavigableMap; @@ -43,16 +42,13 @@ private static final String MAIN_VALUE_HQ5 = "HQ5"; private static final double SALIX_DISTANCE = 2.31; - private final List rows = new ArrayList<>(); private final RiverInfoProvider riverInfoProvider; - public SalixLineCalculator(final RiverInfoProvider riverInfoProvider) { this.riverInfoProvider = riverInfoProvider; } - /** * Calculate the salix line result rows */ @@ -65,17 +61,30 @@ final WINFOArtifact winfo = new WinfoArtifactWrapper(uinfo); winfo.addStringData("ld_mode", "distance"); winfo.addStringData("ld_step", "100"); - for (final double station : new ComputationRangeAccess(winfo).getKms()) { - this.rows.add(createRow(mainWstValues, station, rangeScenarios)); + + final List rows = new ArrayList<>(); + for (final double station : new ComputationRangeAccess(winfo).getKms()) + rows.add(createRow(mainWstValues, station, rangeScenarios)); + + final SalixLineCalculationResult result = createResult(scenarioType, scenarioLabels, rangeString, additionalString, rows); + results.addResult(result, problems); + } + + private SalixLineCalculationResult createResult(final ScenarioType scenarioType, final String[] scenarioLabels, final String rangeString, + final String additionalString, final List rows) { + + switch (scenarioType) { + case REGIONAL: + return new SalixLineCalculationRegionalResult("Salix-regional", scenarioLabels, rangeString, additionalString, rows); + + case SUPRAREGIONAL: + return new SalixLineCalculationSupraRegionalResult("Salix-supra", scenarioLabels, rangeString, additionalString, rows); + + case HISTORICAL: + return new SalixLineCalculationHistoricalResult("Salix-hist", scenarioLabels, rangeString, additionalString, rows); + default: + return new SalixLineCalculationResult("Salix-simple", rows); } - if (scenarioType == ScenarioType.REGIONAL) - results.addResult(new SalixLineCalculationRegionalResult("Salix-regional", scenarioLabels, rangeString, additionalString, this.rows), problems); - else if (scenarioType == ScenarioType.SUPRAREGIONAL) - results.addResult(new SalixLineCalculationSupraRegionalResult("Salix-supra", scenarioLabels, rangeString, additionalString, this.rows), problems); - else if (scenarioType == ScenarioType.HISTORICAL) - results.addResult(new SalixLineCalculationHistoricalResult("Salix-hist", scenarioLabels, rangeString, additionalString, this.rows), problems); - else - results.addResult(new SalixLineCalculationResult("Salix-simple", this.rows), problems); } private MainWstValuesCalculator fetchGaugeMainValuePositions2(final Calculation problems) { @@ -169,14 +178,27 @@ return noScen; } - /** - * 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; - } -} + // /** + // * 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 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java Fri Sep 28 13:44:12 2018 +0200 @@ -62,7 +62,9 @@ rows.add(row2); } - final VegetationZonesCalculationResult result = new VegetationZonesCalculationResult("Ergebnis 1", rows); + final String label = String.format("%.3f - %.3f", calcRange.getMinimumDouble(), calcRange.getMaximumDouble()); + + final VegetationZonesCalculationResult result = new VegetationZonesCalculationResult(label, rows); results.addResult(result, problems); diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionFacet.java Fri Sep 28 13:44:12 2018 +0200 @@ -0,0 +1,63 @@ +/** 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.vegetationzones; + +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.model.BlackboardDataFacet; +import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.exports.CrossSectionGenerator; + +/** + * @author Gernot Belger + * + */ +public final class VegetationZonesCrossSectionFacet extends BlackboardDataFacet implements FacetTypes { + + private static final long serialVersionUID = 1L; + + public VegetationZonesCrossSectionFacet(final String name, final String description) { + super(0, name, description); + + this.metaData.put("X", CrossSectionGenerator.I18N_XAXIS_LABEL); + this.metaData.put("Y", CrossSectionGenerator.I18N_YAXIS_LABEL); + } + + /** + * Returns the data this facet requires. + * + * @param artifact + * the owner artifact. + * @param context + * the CallContext (ignored). + * + * @return + * the data as PredefinedChannelQueryCalculationResult + */ + @Override + public Object getData(final Artifact artifact, final CallContext context) { + + final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact); + return VegetationZoneServerClientXChange.parse(vAccess.getVegZones()); + } + + /** + * Create a deep copy of this Facet. + * + * @return a deep copy. + */ + @Override + public VegetationZonesCrossSectionFacet deepCopy() { + final VegetationZonesCrossSectionFacet copy = new VegetationZonesCrossSectionFacet(this.name, this.description); + copy.set(this); + return copy; + } +} \ No newline at end of file diff -r 3f230fe8eb19 -r 8b7bf26b8782 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 Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java Fri Sep 28 13:44:12 2018 +0200 @@ -19,11 +19,10 @@ import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.DataProvider; -import org.dive4elements.river.artifacts.common.AbstractCalculationResult; +import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.common.AbstractProcessor; import org.dive4elements.river.artifacts.model.CrossSectionFacetUtils; import org.dive4elements.river.artifacts.model.river.MainWstValuesCalculator; -import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; import org.dive4elements.river.exports.CrossSectionGenerator; import org.dive4elements.river.exports.DiagramGenerator; import org.dive4elements.river.jfree.StripedAreaDataset; @@ -42,7 +41,6 @@ public static final String FACET_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_vegetation_zones_cross_section"; - private static final String FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION = "uinfo_facet_vegetation_zones_cross_section.description"; private static final Set HANDLED_FACET_TYPES = new HashSet<>(); @@ -50,10 +48,9 @@ HANDLED_FACET_TYPES.add(FACET_VEGETATION_ZONES_CROSS_SECTION); } - public static Facet createVegetationZonesCrossSectionFacet(final CallContext context, final String hash, final String id, - final AbstractCalculationResult result, final int index) { - return AbstractProcessor.createFacet(context, hash, id, result, index, CrossSectionGenerator.I18N_XAXIS_LABEL, FACET_VEGETATION_ZONES_CROSS_SECTION, - FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION); + public static Facet createVegetationZonesCrossSectionFacet(final String description) { + + return new VegetationZonesCrossSectionFacet(FACET_VEGETATION_ZONES_CROSS_SECTION, description); } public static void generateSeries(final CrossSectionGenerator generator, final ArtifactAndFacet bundle, final CallContext context, @@ -70,7 +67,7 @@ final StripedAreaDataset dataset = new StripedAreaDataset(theme); final Artifact artifact = bundle.getArtifact(); - final VegetationzonesAccess vAccess = new VegetationzonesAccess((UINFOArtifact) artifact); + final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact); final River river = vAccess.getRiver(); final List zones = VegetationZoneServerClientXChange.parse(vAccess.getVegZones()); diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java Fri Sep 28 13:44:12 2018 +0200 @@ -21,6 +21,7 @@ import org.dive4elements.river.artifacts.model.EmptyFacet; import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.artifacts.model.ReportFacet; +import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.DefaultState; import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; @@ -34,6 +35,8 @@ private static final long serialVersionUID = 1L; + private static final String FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION = "uinfo_facet_vegetation_zones_cross_section.description"; + /** * From this state can only be continued trivially. */ @@ -80,7 +83,10 @@ if (!resultList.isEmpty()) { - facets.add(VegetationZonesCrossSectionProcessor.createVegetationZonesCrossSectionFacet(context, hash, this.id, resultList.get(0), 0)); + final String label = resultList.get(0).getLabel(); + final String facetDescription = Resources.getMsg(context.getMeta(), FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION, new Object[] { label }); + + facets.add(VegetationZonesCrossSectionProcessor.createVegetationZonesCrossSectionFacet(facetDescription)); 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); diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationzonesAccess.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationzonesAccess.java Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationzonesAccess.java Fri Sep 28 13:44:12 2018 +0200 @@ -10,10 +10,9 @@ package org.dive4elements.river.artifacts.uinfo.vegetationzones; +import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.access.RangeAccess; -import org.dive4elements.river.artifacts.common.EpochYearAccessHelper; import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; -import org.dive4elements.river.artifacts.uinfo.UinfoCalcMode; /** * Access to the flow depth calculation type specific SInfo artifact data. @@ -25,24 +24,16 @@ */ final class VegetationzonesAccess extends RangeAccess { - private final EpochYearAccessHelper helper; - // Fields from state: // calculation_mode (String) // ld_from, ld_to,ld_step // vegzones (String) - public VegetationzonesAccess(final UINFOArtifact uinfo) { + public VegetationzonesAccess(final D4EArtifact uinfo) { super(uinfo); - - /* assert calculation mode */ - final UinfoCalcMode calculationMode = uinfo.getCalculationMode(); - this.helper = new EpochYearAccessHelper(uinfo); - assert (calculationMode == UinfoCalcMode.uinfo_vegetation_zones); } public String getVegZones() { - return super.getString("vegzones"); + return super.getString(UINFOArtifact.FIELD_VEGZONES); } - } \ No newline at end of file diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/resources/messages.properties Fri Sep 28 13:44:12 2018 +0200 @@ -1193,7 +1193,8 @@ uinfo_facet_salix_scenario = Iota Scenario, {0} uinfo_facet_salix_scenario.filtered.description = Iota Scenario, {0} uinfo_facet_salix_scenario.raw.description = Iota Scenario, {0} (raw data) -uinfo_facet_vegetation_zones_cross_section.description = Vegetation Zones +uinfo_facet_vegetation_zones_cross_section.description = Vegetation Zones ({0}) +uinfo_facet_vegetation_default_zones_cross_section.description = Standard Vegetation Zones uinfo_salix_scenario_deltaw = \u0394MW={0} uinfo_salix_scenario_supraregional = supraregional uinfo_salix_scenario_historical = historical diff -r 3f230fe8eb19 -r 8b7bf26b8782 artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Fri Sep 28 10:16:12 2018 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Fri Sep 28 13:44:12 2018 +0200 @@ -1193,7 +1193,8 @@ uinfo_facet_salix_scenario = Iota Szenario, {0} uinfo_facet_salix_scenario.filtered.description = Iota Szenario, {0} uinfo_facet_salix_scenario.raw.description = Iota Szenario, {0} (Rohdaten) -uinfo_facet_vegetation_zones_cross_section.description = Vegetationszonen +uinfo_facet_vegetation_zones_cross_section.description = Vegetationszonen ({0}) +uinfo_facet_vegetation_default_zones_cross_section.description = Standardvegetationszonen uinfo_salix_scenario_deltaw = \u0394MW={0} uinfo_salix_scenario_supraregional = \u00fcberregional uinfo_salix_scenario_historical = historisch diff -r 3f230fe8eb19 -r 8b7bf26b8782 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Fri Sep 28 10:16:12 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Fri Sep 28 13:44:12 2018 +0200 @@ -831,7 +831,7 @@ uinfo_salix_line_export = Iota Export uinfo_vegetation_zones_export = Vegetation Zones Export uinfo_vegetation_zones_report = Vegetation Zones Report -defaultVegetationZone = Default Vegetation Zone +defaultVegetationZone = Standard Vegetation Zones vegetation_zones = Vegetation Zones uinfo_vegetation_zone_overlap = Ranges are overlapping. diff -r 3f230fe8eb19 -r 8b7bf26b8782 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Fri Sep 28 10:16:12 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Fri Sep 28 13:44:12 2018 +0200 @@ -831,7 +831,7 @@ uinfo_salix_line_export = Iota Export uinfo_vegetation_zones_export = Vegetationszonen Export uinfo_vegetation_zones_report = Vegetationszonen Bericht -defaultVegetationZone = Standardvegetationszone +defaultVegetationZone = Standardvegetationszonen vegetation_zones = Vegetationszonen uinfo_vegetation_zone_overlap = Bereiche \u00fcberlappen. diff -r 3f230fe8eb19 -r 8b7bf26b8782 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/VegetationzonesTablePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/VegetationzonesTablePanel.java Fri Sep 28 10:16:12 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/VegetationzonesTablePanel.java Fri Sep 28 13:44:12 2018 +0200 @@ -12,7 +12,6 @@ import org.dive4elements.river.client.client.ui.DatacageWidget; import org.dive4elements.river.client.client.ui.DatacageWidgetData; -import org.dive4elements.river.client.shared.model.ArtifactDescription; import org.dive4elements.river.client.shared.model.DataList; import org.dive4elements.river.client.shared.model.User; @@ -29,7 +28,7 @@ private static final long serialVersionUID = 1L; - private final static Double DELTA = 0.0000001; + // private final static Double DELTA = 0.0000001; private final User user; @@ -39,7 +38,7 @@ // private final Double vegZoneTo = null; // private final Label kmOverlapLabel = new Label(); - // TODO: in der LV steht, dass eine Warnung herausgegeben werden soll, wenn der kmBereich der ausgewählten + // REMARK:: in der LV steht, dass eine Warnung herausgegeben werden soll, wenn der kmBereich der ausgewählten // Vegetationszone NICHT überlappt. // Derzeit werden durch den XPathQuery (siehe meta-data.xml usw) solche Vegetationszonen ohnehin gefiltert (nicht // angezeigt) - so wie es bisher überall standard ist, sodass @@ -64,7 +63,6 @@ final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.user, "uinfo.inundation_duration.vegZoneSelect", "load-system:true", false); final DatacageWidget datacage = new DatacageWidget(data); - final ArtifactDescription artifact = this.artifact.getArtifactDescription(); // for (final DataList item : artifact.getOldData()) { // if (item.getState().equals("state.uinfo.inundationduration.distance_only")) { @@ -86,24 +84,7 @@ plusBtn.addClickHandler(new ClickHandler() { @Override public void onClick(final ClickEvent event) { - final List selection = datacage.getPlainSelection(); - if (selection == null || selection.isEmpty()) { - SC.say(VegetationzonesTablePanel.this.MSG.warning()); - return; - } - final String data = selection.get(0).getAttribute("data"); - // final String vegZoneFromStr = selection.get(0).getAttribute("from_km"); - // final String vegZoneToStr = selection.get(0).getAttribute("to_km"); - // if (vegZoneFromStr != null && vegZoneToStr != null) { - // VegetationzonesTablePanel.this.vegZoneFrom = Double.valueOf(vegZoneFromStr); - // VegetationzonesTablePanel.this.vegZoneTo = Double.valueOf(vegZoneToStr); - // } else { - // VegetationzonesTablePanel.this.vegZoneFrom = null; - // VegetationzonesTablePanel.this.vegZoneTo = null; - // } - createTableFromDataStr(data); - updateValidationMsgLabel(); - // updateKmOverlapValidationLabel(); + handlePlusClicked(datacage); } }); @@ -114,6 +95,37 @@ return helperLayout; } + protected void handlePlusClicked(final DatacageWidget datacage) { + final List selection = datacage.getPlainSelection(); + if (selection == null || selection.isEmpty()) { + SC.say(VegetationzonesTablePanel.this.MSG.warning()); + return; + } + + final TreeNode selectedNode = selection.get(0); + + /* + * the encoded veg-zones is either in 'data' or 'ids'. We need both, because we have the cases of stadnard vegzones and + * user-defined vegzones. + */ + final String dataAttribute = selectedNode.getAttribute("data"); + final String idsAttribute = selectedNode.getAttribute("ids"); + final String vegZoneData = (dataAttribute == null || dataAttribute.trim().length() == 0) ? idsAttribute : dataAttribute; + + // final String vegZoneFromStr = selection.get(0).getAttribute("from_km"); + // final String vegZoneToStr = selection.get(0).getAttribute("to_km"); + // if (vegZoneFromStr != null && vegZoneToStr != null) { + // VegetationzonesTablePanel.this.vegZoneFrom = Double.valueOf(vegZoneFromStr); + // VegetationzonesTablePanel.this.vegZoneTo = Double.valueOf(vegZoneToStr); + // } else { + // VegetationzonesTablePanel.this.vegZoneFrom = null; + // VegetationzonesTablePanel.this.vegZoneTo = null; + // } + createTableFromDataStr(vegZoneData); + updateValidationMsgLabel(); + // updateKmOverlapValidationLabel(); + } + // private void updateKmOverlapValidationLabel() { // this.kmOverlapLabel.setText("MÖP"); // if (this.vegZoneFrom != null && this.vegZoneTo != null) { // standardvegetationstabelle prüfung deaktiviert, da keine @@ -126,4 +138,4 @@ // } // } // } -} +} \ No newline at end of file diff -r 3f230fe8eb19 -r 8b7bf26b8782 gwt-client/src/main/webapp/WEB-INF/web.xml --- a/gwt-client/src/main/webapp/WEB-INF/web.xml Fri Sep 28 10:16:12 2018 +0200 +++ b/gwt-client/src/main/webapp/WEB-INF/web.xml Fri Sep 28 13:44:12 2018 +0200 @@ -208,7 +208,7 @@ dynamicMainvalues org.dive4elements.river.client.server.DynamicMainValuesServiceImpl - + dynamicMainvaluesTimeRangeDetermination org.dive4elements.river.client.server.DynamicMainValuesTimeRangeDeterminationServiceImpl