gernotbelger@8854: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8915: * Software engineering by gernotbelger@8915: * Björnsen Beratende Ingenieure GmbH gernotbelger@8854: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8854: * gernotbelger@8854: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8854: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8854: * documentation coming with Dive4Elements River for details. gernotbelger@8854: */ gernotbelger@8854: gernotbelger@8854: package org.dive4elements.river.artifacts.sinfo.flowdepth; gernotbelger@8854: gernotbelger@8854: import java.util.ArrayList; gernotbelger@8854: import java.util.Collection; gernotbelger@8854: import java.util.Collections; gernotbelger@8854: gernotbelger@8915: import org.apache.commons.lang.math.DoubleRange; gernotbelger@8854: import org.dive4elements.river.artifacts.access.RangeAccess; gernotbelger@8854: import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; gernotbelger@8854: import org.dive4elements.river.artifacts.sinfo.SinfoCalcMode; gernotbelger@8854: import org.dive4elements.river.backend.utils.StringUtil; gernotbelger@8854: gernotbelger@8854: /** gernotbelger@8854: * Access to the flow depth calculation type specific SInfo artifact data. gernotbelger@8915: * REMARK: this class is NOT intended to be hold in the results (or anywhere else), in order to avoid a permanent gernotbelger@8915: * reference to the artifact instance. gernotbelger@8854: * Hence we do NOT cache any data. gernotbelger@8915: * gernotbelger@8854: * @author Gernot Belger gernotbelger@8854: */ gernotbelger@8915: final class FlowDepthAccess extends RangeAccess { gernotbelger@8915: public static class DifferencesPair { gernotbelger@8915: private final String wstId; gernotbelger@8915: private final String soundingId; gernotbelger@8854: gernotbelger@8915: public DifferencesPair(final String wstId, final String soundingId) { gernotbelger@8915: this.wstId = wstId; gernotbelger@8915: this.soundingId = soundingId; gernotbelger@8915: } gernotbelger@8854: gernotbelger@8915: public String getWstId() { gernotbelger@8915: return this.wstId; gernotbelger@8915: } gernotbelger@8854: gernotbelger@8915: public String getSoundingId() { gernotbelger@8915: return this.soundingId; gernotbelger@8915: } gernotbelger@8915: } gernotbelger@8854: gernotbelger@8915: private static final String FIELD_USE_TKH = "use_transport_bodies"; //$NON-NLS-1$ gernotbelger@8854: gernotbelger@8915: public FlowDepthAccess(final SINFOArtifact artifact) { gernotbelger@8915: super(artifact); gernotbelger@8915: gernotbelger@8915: /* assert calculation mode */ gernotbelger@8915: final SinfoCalcMode calculationMode = artifact.getCalculationMode(); gernotbelger@8915: assert (calculationMode == SinfoCalcMode.sinfo_calc_flow_depth); gernotbelger@8915: } gernotbelger@8915: gernotbelger@8915: public DoubleRange getRange() { gernotbelger@8915: final double from = getFrom(); gernotbelger@8915: final double to = getTo(); gernotbelger@8915: return new DoubleRange(from, to); gernotbelger@8915: } gernotbelger@8915: gernotbelger@8915: public boolean isUseTransportBodies() { gernotbelger@8915: final Boolean useTkh = this.artifact.getDataAsBoolean(FIELD_USE_TKH); gernotbelger@8915: return useTkh == null ? false : useTkh; gernotbelger@8915: } gernotbelger@8915: gernotbelger@8915: public Collection getDifferencePairs() { gernotbelger@8915: gernotbelger@8915: final Collection diffPairs = new ArrayList<>(); gernotbelger@8915: gernotbelger@8915: final String diffids = super.getString("diffids"); gernotbelger@8915: if (diffids == null) { gernotbelger@8915: // Should never happen as this is handled by the ui gernotbelger@8915: return Collections.emptyList(); gernotbelger@8915: } gernotbelger@8915: gernotbelger@8915: // FIXME: this way of parsing the datacage-ids is repeated all over flys! gernotbelger@8915: final String datas[] = diffids.split("#"); gernotbelger@8915: for (int i = 0; i < datas.length; i += 2) { gernotbelger@8915: final String leftId = StringUtil.unbracket(datas[i]); gernotbelger@8915: final String rightId = StringUtil.unbracket(datas[i + 1]); gernotbelger@8915: gernotbelger@8915: diffPairs.add(new DifferencesPair(leftId, rightId)); gernotbelger@8915: } gernotbelger@8915: gernotbelger@8915: return Collections.unmodifiableCollection(diffPairs); gernotbelger@8915: } gernotbelger@8854: }