annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java @ 8098:09725b65955a

Add new and simplyfied SedimentLoadFacet The SedimentLoadFacet is intended to work with the Measurement stations. It uses the same mechanismn to access the Mesurement station values as the calculation does. SedimentLoadLS values need a different facet that will come soon.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 15 Aug 2014 18:27:19 +0200
parents
children 4bcc0c8425d2
rev   line source
8098
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
3 *
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
7 */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
8
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
10
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
11 import gnu.trove.TDoubleArrayList;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
12
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
14 import org.dive4elements.artifactdatabase.state.StaticFacet;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
15
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
16 import org.dive4elements.artifacts.Artifact;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
17 import org.dive4elements.artifacts.CallContext;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
18 import org.dive4elements.artifacts.CallMeta;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
19
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
20 import org.dive4elements.river.artifacts.D4EArtifact;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
21 import org.dive4elements.river.artifacts.access.RiverAccess;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
22 import org.dive4elements.river.artifacts.resources.Resources;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
23
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
24 import org.dive4elements.river.artifacts.model.DataFacet;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
25 import org.dive4elements.river.artifacts.model.FacetTypes;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
26 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataFactory;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
27 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
28
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
29 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
30
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
31 import org.dive4elements.river.utils.RiverUtils;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
32
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
33 import java.util.ArrayList;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
34 import java.util.Collections;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
35 import java.util.List;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
36 import java.util.Map;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
37 import java.util.TreeSet;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
38 import java.util.TreeMap;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
39
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
40 import org.apache.log4j.Logger;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
41
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
42 import org.w3c.dom.Document;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
43
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
44
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
45 /** Facet to access various sediment loads. */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
46 public class SedimentLoadFacet
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
47 extends DataFacet
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
48 implements FacetTypes, StaticFacet
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
49 {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
50 private static Logger logger = Logger.getLogger(SedimentLoadFacet.class);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
51
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
52 /* Aheinecke we probably need to get the kind and split this up here
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
53 * in some way */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
54 private static final String NAME = SEDIMENT_LOAD_TA_STATIC;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
55
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
56 public SedimentLoadFacet() {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
57 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
58
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
59 public SedimentLoadFacet(int idx, String name, String description,
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
60 ComputeType type, String stateId, String hash) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
61 super(idx, name, description, type, hash, stateId);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
62 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
63 this.metaData.put("Y", "");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
64 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
65
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
66 @Override
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
67 public Object getData(Artifact artifact, CallContext context) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
68 logger.debug("get Data");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
69 D4EArtifact arti = (D4EArtifact) artifact;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
70
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
71 RiverAccess access = new RiverAccess(arti);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
72 String idStr = arti.getDataAsString("load_id");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
73 int id = Integer.valueOf(idStr);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
74
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
75 /* Get all the data from the river. This will be nicely cached. */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
76 SedimentLoadData allLoadData = SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
77 access.getRiverName());
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
78
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
79 /* Now lets get what we want */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
80 TDoubleArrayList xPos = new TDoubleArrayList();
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
81 TDoubleArrayList yPos = new TDoubleArrayList();
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
82
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
83 for (SedimentLoadData.Station sta: allLoadData.getStations()) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
84 double value = sta.findValueByLoadId(id);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
85 if (Double.isNaN(value)) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
86 continue;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
87 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
88 xPos.add(sta.getStation());
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
89 yPos.add(value);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
90 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
91
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
92 return new double[][] {xPos.toNativeArray(), yPos.toNativeArray()};
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
93 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
94
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
95 @Override
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
96 public void setup(Artifact artifact, Document data, CallMeta callMeta) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
97 logger.debug("setup");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
98 String code = D4EArtifact.getDatacageIDValue(data);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
99 String[] split = code.split(";");
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
100 String idStr = split[0];
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
101 String desc = "";
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
102 if (split.length >= 2) {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
103 desc = split[1];
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
104 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
105
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
106 logger.debug("Create for id: " + idStr + " with desc: " + desc);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
107
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
108 name = NAME;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
109 description = Resources.getMsg(
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
110 callMeta,
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
111 "facet.sedimentload",
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
112 "Sedimentload",
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
113 new Object[] { desc });
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
114 ((D4EArtifact)artifact).addStringData("load_id", idStr);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
115 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
116
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
117
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
118 /** Copy deeply. */
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
119 @Override
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
120 public Facet deepCopy() {
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
121 SedimentLoadFacet copy = new SedimentLoadFacet();
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
122 copy.set(this);
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
123 copy.type = type;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
124 copy.hash = hash;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
125 copy.stateId = stateId;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
126 return copy;
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
127 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
128 }
09725b65955a Add new and simplyfied SedimentLoadFacet
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
129 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org