mschaefer@9157: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9157: * Software engineering by mschaefer@9157: * Björnsen Beratende Ingenieure GmbH mschaefer@9157: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt mschaefer@9157: * mschaefer@9157: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9157: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9157: * documentation coming with Dive4Elements River for details. mschaefer@9157: */ mschaefer@9157: gernotbelger@9215: package org.dive4elements.river.artifacts.sinfo.collision; mschaefer@9157: mschaefer@9157: import java.util.HashSet; mschaefer@9157: import java.util.Set; mschaefer@9157: mschaefer@9157: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; mschaefer@9157: import org.dive4elements.artifactdatabase.state.Facet; mschaefer@9157: import org.dive4elements.artifacts.CallContext; mschaefer@9157: import org.dive4elements.river.artifacts.common.AbstractCalculationResult; gernotbelger@9347: import org.dive4elements.river.artifacts.common.AbstractProcessor; mschaefer@9157: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9215: import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; mschaefer@9157: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; mschaefer@9157: import org.dive4elements.river.exports.DiagramGenerator; mschaefer@9157: import org.dive4elements.river.themes.ThemeDocument; mschaefer@9157: mschaefer@9157: /** mschaefer@9157: * Processor to generate the facet and data series of calculated bed collision counts mschaefer@9157: * mschaefer@9157: * @author Matthias Schäfer mschaefer@9157: * mschaefer@9157: */ gernotbelger@9347: public final class CollisionCalcProcessor extends AbstractProcessor { mschaefer@9157: mschaefer@9157: public static final String FACET_COLLISION_CALC_COUNT = "sinfo_facet_collision_calc_count"; mschaefer@9157: mschaefer@9204: public static final String FACET_COLLISION_CALC_COUNT_2 = "sinfo_facet_collision_calc_count.2"; mschaefer@9204: mschaefer@9204: public static final String FACET_COLLISION_CALC_COUNT_3 = "sinfo_facet_collision_calc_count.3"; mschaefer@9204: gernotbelger@9205: private static final String[] COLLISION_FACETS = new String[] { FACET_COLLISION_CALC_COUNT, FACET_COLLISION_CALC_COUNT_2, FACET_COLLISION_CALC_COUNT_3 }; gernotbelger@9205: mschaefer@9157: private static final String I18N_AXIS_LABEL = "chart.collision_count.section.yaxis.label"; mschaefer@9157: mschaefer@9157: private static final String I18N_SERIES_NAME_PATTERN = "collision.count.title"; mschaefer@9157: mschaefer@9157: private static final Set HANDLED_FACET_TYPES = new HashSet<>(); mschaefer@9157: mschaefer@9157: static { mschaefer@9157: HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT); mschaefer@9204: HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT_2); mschaefer@9204: HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT_3); mschaefer@9157: } mschaefer@9157: mschaefer@9157: public CollisionCalcProcessor() { mschaefer@9157: super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); mschaefer@9157: } mschaefer@9157: mschaefer@9157: @Override mschaefer@9157: protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { mschaefer@9157: gernotbelger@9215: final CollisionCalcFacet facet = (CollisionCalcFacet) bundle.getFacet(); gernotbelger@9205: gernotbelger@9205: final CollisionCalcOverviewResult result = (CollisionCalcOverviewResult) getResult(generator, bundle); gernotbelger@9205: mschaefer@9487: final double[][] points = result.getStationPointsByYear(SInfoResultType.collisionCount, facet.getYears()); gernotbelger@9205: gernotbelger@9347: return buildSeriesForPoints(points, generator, bundle, theme, visible, null); mschaefer@9157: } mschaefer@9157: mschaefer@9157: public static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, gernotbelger@9205: final int resultIndex, final int year, final int themeCount) { gernotbelger@9205: gernotbelger@9205: // REMARK: we are using themeCount as facet index, because we get several lines (with the same facet name) for the same gernotbelger@9205: // result index; however name and index are used on client side as unique id. mschaefer@9204: mschaefer@9204: final CollisionCalcOverviewResult ccoResult = (CollisionCalcOverviewResult) result; mschaefer@9487: final String years = CollisionCalculation.yearsToString(ccoResult.getIsEpochs(), ccoResult.getYears().get(themeCount)); mschaefer@9487: final String facetDescription = Resources.getMsg(context.getMeta(), I18N_SERIES_NAME_PATTERN, I18N_SERIES_NAME_PATTERN, years); mschaefer@9487: return new CollisionCalcFacet(themeCount, resultIndex, years, COLLISION_FACETS[themeCount % 3], facetDescription, I18N_AXIS_LABEL, mschaefer@9487: ComputeType.ADVANCE, hash, id); mschaefer@9157: } mschaefer@9157: }