gernotbelger@8961: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@8961: * Software engineering by Intevation GmbH gernotbelger@8961: * gernotbelger@8961: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8961: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8961: * documentation coming with Dive4Elements River for details. gernotbelger@8961: */ gernotbelger@8961: gernotbelger@8961: package org.dive4elements.river.artifacts.model.minfo; gernotbelger@8961: gernotbelger@8961: import java.util.List; gernotbelger@8961: gernotbelger@8961: import org.dive4elements.artifacts.Artifact; gernotbelger@8961: import org.dive4elements.artifacts.CallContext; gernotbelger@8961: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@8961: import org.dive4elements.river.artifacts.access.BedHeightAccess; gernotbelger@8961: import org.dive4elements.river.artifacts.model.BlackboardDataFacet; gernotbelger@8961: import org.dive4elements.river.artifacts.model.FacetTypes; gernotbelger@8961: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@8961: import org.dive4elements.river.model.BedHeight; gernotbelger@8961: import org.dive4elements.river.model.BedHeightValue; gernotbelger@8964: import org.dive4elements.river.model.BedHeightValueType; gernotbelger@8961: gernotbelger@8961: import gnu.trove.TDoubleArrayList; gernotbelger@8961: gernotbelger@8961: /** gernotbelger@8961: * More or less the same as {@link BedHeightFacet}, but was necessary to copy because else we break the old gernotbelger@8961: * serialization. gernotbelger@8961: * gernotbelger@8961: * @author Gernot Belger gernotbelger@8961: */ gernotbelger@8961: public class BedHeightMinMaxFacet extends BlackboardDataFacet implements FacetTypes { gernotbelger@8961: gernotbelger@8961: private static final long serialVersionUID = 1L; gernotbelger@8961: gernotbelger@8961: private final BedHeightValueType valueType; gernotbelger@8961: gernotbelger@8961: public BedHeightMinMaxFacet(final String name, final String description, final BedHeightValueType valueType) { gernotbelger@8961: super(0, name, description); gernotbelger@8961: gernotbelger@8961: this.valueType = valueType; gernotbelger@8961: gernotbelger@8961: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); gernotbelger@8961: this.metaData.put("Y", "chart.bedheight_middle.section.yaxis.label"); gernotbelger@8961: } gernotbelger@8961: gernotbelger@8961: /** gernotbelger@8961: * Returns the data this facet requires. gernotbelger@8961: * gernotbelger@8961: * @param artifact gernotbelger@8961: * the owner artifact. gernotbelger@8961: * @param context gernotbelger@8961: * the CallContext (ignored). gernotbelger@8961: * gernotbelger@8961: * @return the data. gernotbelger@8961: */ gernotbelger@8961: @Override gernotbelger@8961: public Object getData(final Artifact artifact, final CallContext context) { gernotbelger@8961: gernotbelger@8961: final BedHeightAccess access = new BedHeightAccess((D4EArtifact) artifact); gernotbelger@8961: gernotbelger@8961: final BedHeight single = BedHeight.getBedHeightById(access.getHeightId()); gernotbelger@8961: gernotbelger@8961: final List bedheightValues = BedHeightValue.getBedHeightValues(single, access.getFrom(true), access.getTo(true)); gernotbelger@8961: gernotbelger@8961: final TDoubleArrayList stations = new TDoubleArrayList(bedheightValues.size()); gernotbelger@8961: final TDoubleArrayList values = new TDoubleArrayList(bedheightValues.size()); gernotbelger@8961: gernotbelger@8961: for (final BedHeightValue bedheightValue : bedheightValues) { gernotbelger@8961: gernotbelger@8961: final Double station = bedheightValue.getStation(); gernotbelger@8961: final Double value = this.valueType.getValue(bedheightValue); gernotbelger@8961: gernotbelger@8961: if (station != null && value != null) { gernotbelger@8961: stations.add(station); gernotbelger@8961: values.add(value); gernotbelger@8961: } gernotbelger@8961: } gernotbelger@8961: gernotbelger@8961: this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.cur.elevation"), single.getCurElevationModel().getName()); gernotbelger@8961: gernotbelger@8961: if (single.getOldElevationModel() != null) gernotbelger@8961: this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.old.elevation"), single.getOldElevationModel().getName()); gernotbelger@8961: gernotbelger@8961: this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.river.elevation"), access.getRiver().getWstUnit().getName()); gernotbelger@8961: gernotbelger@8961: return new double[][] { stations.toNativeArray(), values.toNativeArray() }; gernotbelger@8961: } gernotbelger@8961: gernotbelger@8961: /** gernotbelger@8961: * Create a deep copy of this Facet. gernotbelger@8961: * gernotbelger@8961: * @return a deep copy. gernotbelger@8961: */ gernotbelger@8961: @Override gernotbelger@8961: public BedHeightMinMaxFacet deepCopy() { gernotbelger@8961: final BedHeightMinMaxFacet copy = new BedHeightMinMaxFacet(this.name, this.description, this.valueType); gernotbelger@8961: copy.set(this); gernotbelger@8961: return copy; gernotbelger@8961: } gernotbelger@8961: }