view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java @ 8980:b194fa64506a

SINFO - show results themes according to spec, either raw data or floating mean values. Some improvements to error handling and handling of empty results.
author gernotbelger
date Thu, 05 Apr 2018 18:30:34 +0200
parents a4f1ac81f26d
children 0ddeeb413fae
line wrap: on
line source
/* 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.sinfo.common;

import java.util.HashSet;
import java.util.Set;

import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
import org.dive4elements.river.exports.DiagramGenerator;
import org.dive4elements.river.exports.StyledSeriesBuilder;
import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
import org.dive4elements.river.jfree.StyledXYSeries;
import org.dive4elements.river.themes.ThemeDocument;

public final class TkhProcessor extends AbstractSInfoProcessor {

    private static String FACET_TKH = "sinfo_facet_tkh";

    private static final String I18N_AXIS_LABEL = "sinfo.chart.tkh.section.yaxis.label";

    private static final String I18N_FACET_TKH_DESCRIPTION = "sinfo.facet.tkh.description";

    private static final String SINFO_CHART_TKX_YAXIS_LABEL = "sinfo.chart.tkh.yaxis.label";

    private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>();

    static {
        HANDLED_FACET_TYPES.add(FACET_TKH);
    }

    public TkhProcessor() {
        super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES);
    }

    @Override
    protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
        final CallContext context = generator.getCallContext();

        final String facetName = bundle.getFacetName();
        final AbstractTkhCalculationResult data = (AbstractTkhCalculationResult) bundle.getData(context);
        if (data == null) {
            // Check has been here before so we keep it for security reasons
            // this should never happen though.
            throw new IllegalStateException("Data is null for facet: " + facetName);
        }

        final StyledXYSeries seriesUp = new StyledXYSeries(bundle.getFacetDescription(), theme);
        final double[][] pointsUp = data.getTkhUpPoints();
        StyledSeriesBuilder.addPoints(seriesUp, pointsUp, true);

        // REMARK: we add " " because the description is misused as id, which must be unique.
        final StyledXYSeries seriesDown = new StyledXYSeries(bundle.getFacetDescription() + " ", theme);
        final double[][] pointsDown = data.getTkhDownPoints();
        StyledSeriesBuilder.addPoints(seriesDown, pointsDown, true);

        final StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme);
        area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN);
        area.addSeries(seriesUp);
        area.addSeries(seriesDown);

        generator.addAreaSeries(area, getAxisName(), visible);

        return null;
    }

    public static Facet createTkhFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
            final int index) {

        final String facetTkhDescription = Resources.getMsg(context.getMeta(), I18N_FACET_TKH_DESCRIPTION, I18N_FACET_TKH_DESCRIPTION,
                result.getLabel());
        // FIXME: doe not work yet...
        return new SInfoResultFacet(index, TkhProcessor.FACET_TKH, facetTkhDescription, TkhProcessor.SINFO_CHART_TKX_YAXIS_LABEL, ComputeType.ADVANCE, id,
                hash);
    }
}

http://dive4elements.wald.intevation.org