Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/predefinedtkh/PredefinedTkhFacet.java @ 9016:6e5ff436febe
Added datacage select and chart display for TKH series loaded from database
author | mschaefer |
---|---|
date | Mon, 23 Apr 2018 15:18:48 +0200 |
parents | |
children | 384eee4b4135 |
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.predefinedtkh; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.common.GeneralResultType; import org.dive4elements.river.artifacts.common.ResultRow; import org.dive4elements.river.artifacts.model.BlackboardDataFacet; import org.dive4elements.river.artifacts.model.Calculation; import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind; import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKindKmValueFinder; import org.dive4elements.river.model.sinfo.TkhColumn; import org.dive4elements.river.model.sinfo.TkhValue; /** * Facet for a tkh value series loaded from the database * * @author Matthias Schäfer */ public class PredefinedTkhFacet extends BlackboardDataFacet implements FacetTypes { private static final long serialVersionUID = 5508868967789155306L; public PredefinedTkhFacet(final String name, final String description) { super(0, name, description); this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); this.metaData.put("Y", "chart.tkh.section.yaxis.label"); } /** * Returns the data this facet requires. * * @param artifact * the owner artifact. * @param context * the CallContext (ignored). * * @return * the data as PredefinedTkhQueryCalculationResult */ @Override public Object getData(final Artifact artifact, final CallContext context) { final PredefinedTkhColumnAccess access = new PredefinedTkhColumnAccess((D4EArtifact) artifact); final TkhColumn series = TkhColumn.getTkhColumnById(access.getColumnId()); final List<TkhValue> tkhValues = TkhValue.getTkhValues(series, access.getFrom(true), access.getTo(true)); final Calculation problems = new Calculation(); final SoilKindKmValueFinder soilKindFinder = SoilKindKmValueFinder.loadValues(problems, access.getRiver(), access.getRange()); final Collection<ResultRow> rows = new ArrayList<>(); SoilKind bedMobility = SoilKind.mobil; for (final TkhValue tkhValue : tkhValues) { final ResultRow row = ResultRow.create(); row.putValue(GeneralResultType.station, tkhValue.getStation().doubleValue()); if (soilKindFinder != null) bedMobility = soilKindFinder.findSoilKind(tkhValue.getStation().doubleValue()); row.putValue(SInfoResultType.soilkind, bedMobility); final double tkh = tkhValue(tkhValue.getTkheight()) * 100; row.putValue(SInfoResultType.tkh, tkh); switch (bedMobility) { case starr: row.putValue(SInfoResultType.tkhup, tkh); row.putValue(SInfoResultType.tkhdown, 0.0); break; case mobil: default: row.putValue(SInfoResultType.tkhup, tkh / 2); row.putValue(SInfoResultType.tkhdown, -tkh / 2); break; } rows.add(row); } return new PredefinedTkhQueryCalculationResult(series.getName(), rows); } private double tkhValue(final Double value) { if (value != null) return value.doubleValue(); else return Double.NaN; } /** * Create a deep copy of this Facet. * * @return a deep copy. */ @Override public PredefinedTkhFacet deepCopy() { final PredefinedTkhFacet copy = new PredefinedTkhFacet(this.name, this.description); copy.set(this); return copy; } }