mschaefer@9631: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9631: * Software engineering by mschaefer@9631: * Björnsen Beratende Ingenieure GmbH mschaefer@9631: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt mschaefer@9631: * mschaefer@9631: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9631: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9631: * documentation coming with Dive4Elements River for details. mschaefer@9631: */ mschaefer@9631: mschaefer@9631: package org.dive4elements.river.artifacts.sinfo.flood_duration; mschaefer@9631: mschaefer@9631: import java.util.HashSet; mschaefer@9631: import java.util.Set; mschaefer@9631: mschaefer@9631: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; mschaefer@9631: import org.dive4elements.artifactdatabase.state.Facet; mschaefer@9631: import org.dive4elements.artifacts.CallContext; mschaefer@9631: import org.dive4elements.river.artifacts.common.AbstractCalculationResult; mschaefer@9631: import org.dive4elements.river.artifacts.common.AbstractProcessor; mschaefer@9631: import org.dive4elements.river.artifacts.resources.Resources; mschaefer@9631: import org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationCalculationResult.ValueGetter; mschaefer@9631: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; mschaefer@9631: import org.dive4elements.river.exports.DiagramGenerator; mschaefer@9631: import org.dive4elements.river.exports.process.QOutProcessor; mschaefer@9631: import org.dive4elements.river.themes.ThemeDocument; mschaefer@9631: mschaefer@9631: /** mschaefer@9631: * Processor to generate the facet and data series of mainvalue discharges mschaefer@9631: * mschaefer@9631: * @author Matthias Schäfer mschaefer@9631: * mschaefer@9631: */ mschaefer@9631: public final class FloodQProcessor extends AbstractProcessor { mschaefer@9631: mschaefer@9631: private static final String FACET_MAIN_VALUE_Q_DESCRIPTION = "mainvalue.q.description"; mschaefer@9631: mschaefer@9631: public static final String FACET_MAIN_VALUE_Q = "mainvalue.q"; mschaefer@9631: mschaefer@9631: private static final String I18N_AXIS_LABEL = QOutProcessor.I18N_LONGITUDINAL_LABEL; mschaefer@9631: mschaefer@9631: private static final Set HANDLED_FACET_TYPES = new HashSet<>(); mschaefer@9631: mschaefer@9631: static { mschaefer@9631: HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_Q); mschaefer@9631: } mschaefer@9631: mschaefer@9631: public FloodQProcessor() { mschaefer@9631: super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); mschaefer@9631: } mschaefer@9631: mschaefer@9631: public static Facet createMainValueQFacet(final CallContext context, final String hash, final String id, final FloodDurationCalculationResult result, mschaefer@9631: final int facetIndex, final int resultIndex, final int dataIndex) { mschaefer@9631: final String description = Resources.getMsg(context.getMeta(), FACET_MAIN_VALUE_Q_DESCRIPTION, FACET_MAIN_VALUE_Q_DESCRIPTION, mschaefer@9631: result.getWaterlevelLabel(dataIndex)); mschaefer@9631: mschaefer@9631: return new FloodDurationFacet(facetIndex, resultIndex, dataIndex, FACET_MAIN_VALUE_Q, description, ComputeType.ADVANCE, I18N_AXIS_LABEL, hash, id); mschaefer@9631: } mschaefer@9631: mschaefer@9631: @Override mschaefer@9631: protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { mschaefer@9631: mschaefer@9631: final String facetName = bundle.getFacetName(); mschaefer@9631: if (FACET_MAIN_VALUE_Q.contentEquals(facetName)) { mschaefer@9631: mschaefer@9631: final AbstractCalculationResult data = getResult(generator, bundle); mschaefer@9631: mschaefer@9631: final FloodDurationFacet facet = (FloodDurationFacet) bundle.getFacet(); mschaefer@9631: final int index = facet.getWaterlevelIndex(); mschaefer@9631: mschaefer@9631: if (data instanceof FloodDurationCalculationResult) { mschaefer@9631: final FloodDurationCalculationResult.ValueGetter valuegetter = new ValueGetter() { mschaefer@9631: @Override mschaefer@9631: public double getValue(final DurationWaterlevel waterlevel) { mschaefer@9631: return waterlevel.getDischarge(); mschaefer@9631: } mschaefer@9631: }; mschaefer@9631: final double[][] points = ((FloodDurationCalculationResult) data).getMainValueDurationPoints(valuegetter, index); d@9632: d@9632: return buildStepLineSeriesForType(points, generator, bundle, theme, visible); mschaefer@9631: } mschaefer@9631: } mschaefer@9631: mschaefer@9631: final String error = String.format("Unknown facet name: %s", facetName); mschaefer@9631: throw new UnsupportedOperationException(error); mschaefer@9631: } mschaefer@9631: }