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: andre@8098: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; 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 tom@8148: implements StaticFacet andre@8098: { teichmann@8202: private static Logger log = Logger.getLogger(SedimentLoadFacet.class); andre@8098: tom@8204: private static final String NAME = "sedimentload.ta"; 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) { teichmann@8202: log.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) { teichmann@8202: log.debug("setup"); andre@8098: String code = D4EArtifact.getDatacageIDValue(data); andre@8098: String[] split = code.split(";"); andre@8098: String idStr = split[0]; tom@8113: tom@8113: String fraction = split.length >= 2 ? split[1] : ""; tom@8142: String years = split.length >= 3 ? split[2] : ""; andre@8098: tom@8204: // Name has the pattern sedimentload.ta. tom@8117: name = NAME + "." + fraction; teichmann@8202: log.debug("Created facet: " + name); tom@8113: andre@8098: description = Resources.getMsg( andre@8098: callMeta, tom@8113: "facet.sedimentload." + fraction, tom@8142: new Object[] { years, "t/a" }); tom@8113: 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 :