andre@8098: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde andre@8098: * Software engineering by Intevation GmbH andre@8098: * andre@8098: * This file is Free Software under the GNU AGPL (>=v3) andre@8098: * and comes with ABSOLUTELY NO WARRANTY! Check out the andre@8098: * documentation coming with Dive4Elements River for details. andre@8098: */ andre@8098: andre@8098: package org.dive4elements.river.artifacts.model.minfo; andre@8098: andre@8098: import gnu.trove.TDoubleArrayList; andre@8098: andre@8098: import org.dive4elements.artifactdatabase.state.Facet; andre@8098: import org.dive4elements.artifactdatabase.state.StaticFacet; andre@8098: andre@8098: import org.dive4elements.artifacts.Artifact; andre@8098: import org.dive4elements.artifacts.CallContext; andre@8098: import org.dive4elements.artifacts.CallMeta; andre@8098: andre@8098: import org.dive4elements.river.artifacts.D4EArtifact; andre@8098: import org.dive4elements.river.artifacts.access.RiverAccess; andre@8098: import org.dive4elements.river.artifacts.resources.Resources; andre@8098: andre@8098: import org.dive4elements.river.artifacts.model.DataFacet; andre@8098: import org.dive4elements.river.artifacts.model.FacetTypes; andre@8098: import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataFactory; andre@8098: import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData; andre@8098: andre@8098: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; andre@8098: andre@8098: import org.dive4elements.river.utils.RiverUtils; andre@8098: andre@8098: import java.util.ArrayList; andre@8098: import java.util.Collections; andre@8098: import java.util.List; andre@8098: import java.util.Map; andre@8098: import java.util.TreeSet; andre@8098: import java.util.TreeMap; andre@8098: andre@8098: import org.apache.log4j.Logger; andre@8098: andre@8098: import org.w3c.dom.Document; andre@8098: andre@8098: andre@8098: /** Facet to access various sediment loads. */ andre@8098: public class SedimentLoadFacet andre@8098: extends DataFacet andre@8098: implements FacetTypes, StaticFacet andre@8098: { andre@8098: private static Logger logger = Logger.getLogger(SedimentLoadFacet.class); andre@8098: andre@8098: /* Aheinecke we probably need to get the kind and split this up here andre@8098: * in some way */ andre@8098: private static final String NAME = SEDIMENT_LOAD_TA_STATIC; andre@8098: andre@8098: public SedimentLoadFacet() { andre@8098: } andre@8098: andre@8098: public SedimentLoadFacet(int idx, String name, String description, andre@8098: ComputeType type, String stateId, String hash) { andre@8098: super(idx, name, description, type, hash, stateId); andre@8098: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); andre@8098: this.metaData.put("Y", ""); andre@8098: } andre@8098: andre@8098: @Override andre@8098: public Object getData(Artifact artifact, CallContext context) { andre@8098: logger.debug("get Data"); andre@8098: D4EArtifact arti = (D4EArtifact) artifact; andre@8098: andre@8098: RiverAccess access = new RiverAccess(arti); andre@8098: String idStr = arti.getDataAsString("load_id"); andre@8098: int id = Integer.valueOf(idStr); andre@8098: andre@8098: /* Get all the data from the river. This will be nicely cached. */ andre@8098: SedimentLoadData allLoadData = SedimentLoadDataFactory.INSTANCE.getSedimentLoadData( andre@8098: access.getRiverName()); andre@8098: andre@8098: /* Now lets get what we want */ andre@8098: TDoubleArrayList xPos = new TDoubleArrayList(); andre@8098: TDoubleArrayList yPos = new TDoubleArrayList(); andre@8098: andre@8098: for (SedimentLoadData.Station sta: allLoadData.getStations()) { andre@8098: double value = sta.findValueByLoadId(id); andre@8098: if (Double.isNaN(value)) { andre@8098: continue; andre@8098: } andre@8098: xPos.add(sta.getStation()); andre@8098: yPos.add(value); andre@8098: } andre@8098: andre@8098: return new double[][] {xPos.toNativeArray(), yPos.toNativeArray()}; andre@8098: } andre@8098: andre@8098: @Override andre@8098: public void setup(Artifact artifact, Document data, CallMeta callMeta) { andre@8098: logger.debug("setup"); andre@8098: String code = D4EArtifact.getDatacageIDValue(data); andre@8098: String[] split = code.split(";"); andre@8098: String idStr = split[0]; andre@8098: String desc = ""; andre@8098: if (split.length >= 2) { andre@8098: desc = split[1]; andre@8098: } andre@8098: andre@8098: name = NAME; andre@8098: description = Resources.getMsg( andre@8098: callMeta, andre@8098: "facet.sedimentload", andre@8098: "Sedimentload", andre@8098: new Object[] { desc }); andre@8098: ((D4EArtifact)artifact).addStringData("load_id", idStr); andre@8098: } andre@8098: andre@8098: andre@8098: /** Copy deeply. */ andre@8098: @Override andre@8098: public Facet deepCopy() { andre@8098: SedimentLoadFacet copy = new SedimentLoadFacet(); andre@8098: copy.set(this); andre@8098: copy.type = type; andre@8098: copy.hash = hash; andre@8098: copy.stateId = stateId; andre@8098: return copy; andre@8098: } andre@8098: } andre@8098: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :