mschaefer@9016: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9016: * Software engineering by mschaefer@9016: * Björnsen Beratende Ingenieure GmbH mschaefer@9016: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt mschaefer@9016: * mschaefer@9016: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9016: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9016: * documentation coming with Dive4Elements River for details. mschaefer@9016: */ mschaefer@9016: mschaefer@9016: package org.dive4elements.river.artifacts.sinfo.common; mschaefer@9016: mschaefer@9016: import java.util.HashSet; mschaefer@9016: import java.util.Set; mschaefer@9016: mschaefer@9016: import org.apache.log4j.Logger; mschaefer@9016: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; mschaefer@9016: import org.dive4elements.artifacts.CallContext; mschaefer@9016: import org.dive4elements.river.exports.DiagramGenerator; mschaefer@9016: import org.dive4elements.river.exports.StyledSeriesBuilder; mschaefer@9016: import org.dive4elements.river.jfree.StyledAreaSeriesCollection; mschaefer@9016: import org.dive4elements.river.jfree.StyledXYSeries; mschaefer@9016: import org.dive4elements.river.themes.ThemeDocument; mschaefer@9016: mschaefer@9016: /** mschaefer@9016: * Processor to generate a data series for tkh data loaded from the database mschaefer@9016: * mschaefer@9016: * @author Matthias Schäfer mschaefer@9016: * mschaefer@9016: */ mschaefer@9016: public class PredefinedTkhProcessor extends AbstractSInfoProcessor { mschaefer@9016: mschaefer@9016: private final static Logger log = Logger.getLogger(PredefinedTkhProcessor.class); mschaefer@9016: mschaefer@9016: public static final String FACET_PREDEFINED_TKH = "sinfo_facet_predefined_tkh"; mschaefer@9016: mschaefer@9016: private static final String I18N_AXIS_LABEL = "sinfo.chart.tkh.section.yaxis.label"; mschaefer@9016: mschaefer@9016: private static final Set HANDLED_FACET_TYPES = new HashSet<>(); mschaefer@9016: mschaefer@9016: static { mschaefer@9016: HANDLED_FACET_TYPES.add(FACET_PREDEFINED_TKH); mschaefer@9016: } mschaefer@9016: mschaefer@9016: public PredefinedTkhProcessor() { mschaefer@9016: super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); mschaefer@9016: } mschaefer@9016: mschaefer@9016: @Override mschaefer@9016: protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { mschaefer@9016: final CallContext context = generator.getCallContext(); mschaefer@9016: mschaefer@9016: final String facetName = bundle.getFacetName(); mschaefer@9016: final AbstractTkhCalculationResult data = (AbstractTkhCalculationResult) bundle.getData(context); mschaefer@9016: if (data == null) { mschaefer@9016: // Check has been here before so we keep it for security reasons mschaefer@9016: // this should never happen though. mschaefer@9016: throw new IllegalStateException("Data is null for facet: " + facetName); mschaefer@9016: } mschaefer@9016: mschaefer@9016: final StyledXYSeries seriesUp = new StyledXYSeries(bundle.getFacetDescription(), theme); mschaefer@9016: final double[][] pointsUp = data.getTkhUpPoints(); mschaefer@9016: StyledSeriesBuilder.addPoints(seriesUp, pointsUp, true); mschaefer@9016: mschaefer@9016: // REMARK: we add " " because the description is misused as id, which must be unique. mschaefer@9016: final StyledXYSeries seriesDown = new StyledXYSeries(bundle.getFacetDescription() + " ", theme); mschaefer@9016: final double[][] pointsDown = data.getTkhDownPoints(); mschaefer@9016: StyledSeriesBuilder.addPoints(seriesDown, pointsDown, true); mschaefer@9016: mschaefer@9016: final StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme); mschaefer@9016: area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); mschaefer@9016: area.addSeries(seriesUp); mschaefer@9016: area.addSeries(seriesDown); mschaefer@9016: mschaefer@9016: generator.addAreaSeries(area, getAxisName(), visible); mschaefer@9016: mschaefer@9016: return null; mschaefer@9016: } mschaefer@9016: }