mschaefer@9125: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9125: * Software engineering by mschaefer@9125: * Björnsen Beratende Ingenieure GmbH mschaefer@9125: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt mschaefer@9125: * mschaefer@9125: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9125: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9125: * documentation coming with Dive4Elements River for details. mschaefer@9125: */ mschaefer@9125: mschaefer@9377: package org.dive4elements.river.artifacts.sinfo.predefinedcollision; mschaefer@9125: mschaefer@9125: import java.util.ArrayList; mschaefer@9125: import java.util.Collection; mschaefer@9125: import java.util.List; mschaefer@9125: mschaefer@9125: import org.dive4elements.artifacts.Artifact; mschaefer@9125: import org.dive4elements.artifacts.CallContext; mschaefer@9125: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9200: import org.dive4elements.river.artifacts.common.DefaultCalculationResult; mschaefer@9125: import org.dive4elements.river.artifacts.common.GeneralResultType; mschaefer@9125: import org.dive4elements.river.artifacts.common.ResultRow; mschaefer@9125: import org.dive4elements.river.artifacts.model.BlackboardDataFacet; mschaefer@9125: import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; mschaefer@9125: import org.dive4elements.river.model.sinfo.Collision; mschaefer@9125: import org.dive4elements.river.model.sinfo.CollisionAggregateValue; mschaefer@9125: mschaefer@9125: /** mschaefer@9125: * Facet for a river bed collision value series loaded from the database mschaefer@9125: * mschaefer@9125: * @author Matthias Schäfer mschaefer@9125: */ mschaefer@9377: public class PredefinedCollisionFacet extends BlackboardDataFacet { mschaefer@9125: mschaefer@9125: private static final long serialVersionUID = 1; mschaefer@9125: mschaefer@9377: public PredefinedCollisionFacet(final int facetIndex, final String name, final String description, final String yAxisLabel) { gernotbelger@9215: super(facetIndex, name, description); mschaefer@9125: mschaefer@9125: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); mschaefer@9125: this.metaData.put("Y", yAxisLabel); mschaefer@9125: } mschaefer@9125: mschaefer@9125: /** mschaefer@9125: * Returns the data this facet requires. mschaefer@9125: * mschaefer@9125: * @param artifact mschaefer@9125: * the owner artifact. mschaefer@9125: * @param context mschaefer@9125: * the CallContext (ignored). mschaefer@9125: * mschaefer@9125: * @return mschaefer@9125: * the data as CollisionQueryCalculationResult mschaefer@9125: */ mschaefer@9125: @Override mschaefer@9125: public Object getData(final Artifact artifact, final CallContext context) { mschaefer@9125: mschaefer@9377: final PredefinedCollisionAccess access = new PredefinedCollisionAccess((D4EArtifact) artifact); mschaefer@9125: final Collision series = Collision.getSeries(access.getId()); mschaefer@9125: final List values = CollisionAggregateValue.getValuesByKm(series, access.getFrom(true), access.getTo(true)); mschaefer@9125: final Collection rows = new ArrayList<>(); mschaefer@9125: for (final CollisionAggregateValue value : values) { gernotbelger@9215: gernotbelger@9215: final ResultRow row = ResultRow.create(); gernotbelger@9215: gernotbelger@9215: row.putValue(GeneralResultType.station, value.getStation()); gernotbelger@9215: // Not needed: row.putValue(SInfoResultType.years, series.getYear()); gernotbelger@9215: row.putValue(SInfoResultType.collisionCount, value.getCount()); gernotbelger@9215: row.putValue(SInfoResultType.collisionGaugeW, value.getGaugeW()); gernotbelger@9215: gernotbelger@9215: rows.add(row); mschaefer@9125: } gernotbelger@9200: return new DefaultCalculationResult(series.getFilename(), rows); mschaefer@9125: } mschaefer@9125: mschaefer@9125: /** mschaefer@9125: * Create a deep copy of this Facet. mschaefer@9125: * mschaefer@9125: * @return a deep copy. mschaefer@9125: */ mschaefer@9125: @Override mschaefer@9377: public PredefinedCollisionFacet deepCopy() { mschaefer@9377: final PredefinedCollisionFacet copy = new PredefinedCollisionFacet(this.index, this.name, this.description, this.metaData.get("Y")); mschaefer@9125: copy.set(this); mschaefer@9125: return copy; mschaefer@9125: } mschaefer@9125: }