mschaefer@9033: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9033: * Software engineering by mschaefer@9033: * Björnsen Beratende Ingenieure GmbH mschaefer@9033: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt mschaefer@9033: * mschaefer@9033: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9033: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9033: * documentation coming with Dive4Elements River for details. mschaefer@9033: */ mschaefer@9033: mschaefer@9033: package org.dive4elements.river.artifacts.sinfo.common; mschaefer@9033: mschaefer@9033: import java.util.HashSet; mschaefer@9033: import java.util.Map; mschaefer@9033: import java.util.Set; mschaefer@9033: mschaefer@9033: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; mschaefer@9033: import org.dive4elements.artifactdatabase.state.Facet; mschaefer@9033: import org.dive4elements.artifacts.Artifact; mschaefer@9033: import org.dive4elements.artifacts.CallContext; mschaefer@9033: import org.dive4elements.artifacts.CallMeta; mschaefer@9033: import org.dive4elements.river.artifacts.resources.Resources; mschaefer@9033: import org.dive4elements.river.artifacts.sinfo.predefineddepthevol.PredefinedDepthEvolFacet; mschaefer@9033: import org.dive4elements.river.artifacts.sinfo.predefineddepthevol.PredefinedDepthEvolQueryCalculationResult; mschaefer@9033: import org.dive4elements.river.exports.DiagramGenerator; mschaefer@9033: import org.dive4elements.river.exports.StyledSeriesBuilder; mschaefer@9033: import org.dive4elements.river.jfree.StyledXYSeries; mschaefer@9033: import org.dive4elements.river.themes.ThemeDocument; mschaefer@9033: mschaefer@9033: /** mschaefer@9033: * Processor to generate a data series for depth evolution per year data loaded from the database mschaefer@9033: * mschaefer@9033: * @author Matthias Schäfer mschaefer@9033: * mschaefer@9033: */ mschaefer@9033: public class PredefinedDepthEvolPerYearProcessor extends AbstractSInfoProcessor { mschaefer@9033: mschaefer@9033: // private final static Logger log = Logger.getLogger(PredefinedDepthEvolPerYearProcessor.class); mschaefer@9033: mschaefer@9033: public static final String FACET_PREDEFINED_DEPTHEVOL_PER_YEAR = "sinfo_facet_predefined_depthevol_per_year"; mschaefer@9033: mschaefer@9033: private static final String I18N_AXIS_LABEL = "sinfo.chart.flow_depth_development_per_year.section.yaxis.label"; mschaefer@9033: mschaefer@9033: private static final String I18N_SERIES_NAME_PATTERN = "predefineddepthevol.peryear.title"; mschaefer@9033: mschaefer@9033: private static final Set HANDLED_FACET_TYPES = new HashSet<>(); mschaefer@9033: mschaefer@9033: static { mschaefer@9033: HANDLED_FACET_TYPES.add(FACET_PREDEFINED_DEPTHEVOL_PER_YEAR); mschaefer@9033: } mschaefer@9033: mschaefer@9033: public PredefinedDepthEvolPerYearProcessor() { mschaefer@9033: super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); mschaefer@9033: } mschaefer@9033: mschaefer@9033: @Override mschaefer@9033: protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { mschaefer@9033: mschaefer@9033: final CallContext context = generator.getCallContext(); mschaefer@9033: final Map metaData = bundle.getFacet().getMetaData(); mschaefer@9033: mschaefer@9033: final Artifact artifact = bundle.getArtifact(); mschaefer@9033: mschaefer@9033: final StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme); mschaefer@9033: series.putMetaData(metaData, artifact, context); mschaefer@9033: mschaefer@9033: final String facetName = bundle.getFacetName(); mschaefer@9033: final PredefinedDepthEvolQueryCalculationResult data = (PredefinedDepthEvolQueryCalculationResult) bundle.getData(context); mschaefer@9033: if (data == null) { mschaefer@9033: // Check has been here before so we keep it for security reasons mschaefer@9033: // this should never happen though. mschaefer@9033: throw new IllegalStateException("Data is null for facet: " + facetName); mschaefer@9033: } mschaefer@9033: mschaefer@9033: final double[][] points = data.getStationPoints(SInfoResultType.flowdepthDevelopmentPerYear); mschaefer@9033: mschaefer@9033: StyledSeriesBuilder.addPoints(series, points, true); mschaefer@9033: generator.addAxisSeries(series, getAxisName(), visible); mschaefer@9033: mschaefer@9033: return metaData.get("Y"); mschaefer@9033: } mschaefer@9033: mschaefer@9033: public static Facet createFacet(final CallMeta callMeta, final String seriesName) { mschaefer@9033: return new PredefinedDepthEvolFacet(FACET_PREDEFINED_DEPTHEVOL_PER_YEAR, mschaefer@9033: Resources.getMsg(callMeta, I18N_SERIES_NAME_PATTERN, I18N_SERIES_NAME_PATTERN, seriesName), I18N_AXIS_LABEL); mschaefer@9033: } mschaefer@9033: }