d@9617: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde d@9617: * Software engineering by d@9617: * Björnsen Beratende Ingenieure GmbH d@9617: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt d@9617: * d@9617: * This file is Free Software under the GNU AGPL (>=v3) d@9617: * and comes with ABSOLUTELY NO WARRANTY! Check out the d@9617: * documentation coming with Dive4Elements River for details. d@9617: */ d@9617: d@9617: package org.dive4elements.river.artifacts.sinfo.common; d@9617: d@9617: import java.util.HashSet; d@9617: import java.util.Set; d@9617: d@9617: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; d@9617: import org.dive4elements.artifactdatabase.state.Facet; d@9617: import org.dive4elements.artifacts.CallContext; d@9617: import org.dive4elements.artifacts.CallMeta; d@9617: import org.dive4elements.river.artifacts.common.AbstractCalculationResult; d@9617: import org.dive4elements.river.artifacts.common.AbstractProcessor; d@9617: import org.dive4elements.river.artifacts.resources.Resources; d@9617: import org.dive4elements.river.exports.DiagramGenerator; d@9617: import org.dive4elements.river.themes.ThemeDocument; d@9617: d@9617: public final class FlowDepthWaterlevelProcessor extends AbstractProcessor { d@9617: d@9707: /* waterlevel */ d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT_MIN = "sinfo_facet_flow_depth_bedheight_min"; d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT_MAX = "sinfo_facet_flow_depth_bedheight_max"; d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT = "sinfo_facet_flow_depth_bedheight"; d@9707: public static final String FACET_FLOW_DEPTH_WATER_LEVEL = "sinfo_facet_flow_depth_waterlevel"; d@9707: private static final String FACET_FLOW_DEPTH_WATER_LEVEL_Y_AXIS_LABEL = "chart.longitudinal.section.yaxis.label"; d@9707: private static final String FACET_BEDHEIGHT_Y_AXIS_LABEL = "chart.bedheight_middle.section.yaxis.label"; d@9617: d@9707: public static final String FACET_FLOW_DEPTH_WATER_LEVEL_DESCRIPTION = "facet.flow_depth.waterlevel"; d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION = "facet.flow_depth.bedheight"; d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION_MIN = "facet.flow_depth.bedheight.min"; d@9707: public static final String FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION_MAX = "facet.flow_depth.bedheight.max"; d@9617: d@9707: private static final Set HANDLED_FACET_TYPES = new HashSet<>(); d@9617: d@9707: static { d@9707: HANDLED_FACET_TYPES.add(FACET_FLOW_DEPTH_WATER_LEVEL); d@9707: HANDLED_FACET_TYPES.add(FACET_FLOW_DEPTH_BEDHEIGHT); d@9707: HANDLED_FACET_TYPES.add(FACET_FLOW_DEPTH_BEDHEIGHT_MIN); d@9707: HANDLED_FACET_TYPES.add(FACET_FLOW_DEPTH_BEDHEIGHT_MAX); d@9707: } d@9617: d@9707: public FlowDepthWaterlevelProcessor() { d@9707: super(FACET_FLOW_DEPTH_WATER_LEVEL_Y_AXIS_LABEL, HANDLED_FACET_TYPES); d@9707: } d@9617: d@9707: protected SInfoResultType doGetType(final String facetName) { d@9707: d@9707: if (FACET_FLOW_DEPTH_WATER_LEVEL.contentEquals(facetName)) d@9707: return SInfoResultType.waterlevel; d@9707: if (FACET_FLOW_DEPTH_BEDHEIGHT.contentEquals(facetName)) d@9707: return SInfoResultType.meanBedHeight; d@9707: if (FACET_FLOW_DEPTH_BEDHEIGHT_MIN.contentEquals(facetName)) d@9707: return SInfoResultType.minBedHeight; d@9707: if (FACET_FLOW_DEPTH_BEDHEIGHT_MAX.contentEquals(facetName)) d@9707: return SInfoResultType.maxBedHeight; d@9707: d@9707: final String error = String.format("Unknown facet name: %s", facetName); d@9707: throw new UnsupportedOperationException(error); d@9707: } d@9707: d@9707: private static Facet createFlowDepthBedheightFacet(final CallContext context, final String hash, final String id, d@9707: final AbstractCalculationResult result, final int index, final String unit, final String facetLabel, d@9707: final String facetName, final String description) { d@9707: final CallMeta meta = context.getMeta(); d@9707: final String yAxisLabel = Resources.getMsg(meta, FACET_BEDHEIGHT_Y_AXIS_LABEL, d@9707: FACET_BEDHEIGHT_Y_AXIS_LABEL, unit); d@9707: d@9707: return AbstractProcessor.createFacet(context, hash, id, result, index, yAxisLabel, facetName, description, d@9707: facetLabel); d@9707: } d@9707: d@9707: public static Facet createFlowDepthMeanBedheightFacet(final CallContext context, final String hash, final String id, d@9707: final AbstractCalculationResult result, final int index, final String unit, final String facetLabel) { d@9707: return FlowDepthWaterlevelProcessor.createFlowDepthBedheightFacet(context, hash, id, result, index, unit, d@9707: facetLabel, FACET_FLOW_DEPTH_BEDHEIGHT, FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION); d@9707: } d@9707: d@9707: public static Facet createFlowDepthMinBedheightFacet(final CallContext context, final String hash, final String id, d@9707: final AbstractCalculationResult result, final int index, final String unit, final String facetLabel) { d@9707: return FlowDepthWaterlevelProcessor.createFlowDepthBedheightFacet(context, hash, id, result, index, unit, d@9707: facetLabel, FACET_FLOW_DEPTH_BEDHEIGHT_MIN, FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION_MIN); d@9707: } d@9707: d@9707: public static Facet createFlowDepthMaxBedheightFacet(final CallContext context, final String hash, final String id, d@9707: final AbstractCalculationResult result, final int index, final String unit, final String facetLabel) { d@9707: return FlowDepthWaterlevelProcessor.createFlowDepthBedheightFacet(context, hash, id, result, index, unit, d@9707: facetLabel, FACET_FLOW_DEPTH_BEDHEIGHT_MAX, FACET_FLOW_DEPTH_BEDHEIGHT_DESCRIPTION_MAX); d@9707: } d@9707: d@9707: public static Facet createFlowDepthWaterlevelFacet(final CallContext context, final String hash, final String id, d@9707: final AbstractCalculationResult result, final int index, final String unit, final String wstLabel) { d@9707: final CallMeta meta = context.getMeta(); d@9707: final String yAxisLabel = Resources.getMsg(meta, FACET_FLOW_DEPTH_WATER_LEVEL_Y_AXIS_LABEL, d@9707: FACET_FLOW_DEPTH_WATER_LEVEL_Y_AXIS_LABEL, unit); d@9707: return AbstractProcessor.createFacet(context, hash, id, result, index, yAxisLabel, FACET_FLOW_DEPTH_WATER_LEVEL, d@9707: FACET_FLOW_DEPTH_WATER_LEVEL_DESCRIPTION, wstLabel); d@9707: } d@9707: d@9707: @Override d@9707: protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, d@9707: final ThemeDocument theme, final boolean visible) { d@9707: d@9707: return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), GAP_DISTANCE); d@9707: } d@9617: }