comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java @ 6250:267119b38779

Added container and facet for bed diameter measurements.
author Raimund Renkert <rrenkert@intevation.de>
date Mon, 10 Jun 2013 16:22:23 +0200
parents
children 06ee8e2f8b0b
comparison
equal deleted inserted replaced
6249:8eb0e5c8db3f 6250:267119b38779
1 package org.dive4elements.river.artifacts.model.minfo;
2
3 import gnu.trove.TDoubleArrayList;
4
5 import org.apache.log4j.Logger;
6 import org.dive4elements.artifactdatabase.state.Facet;
7 import org.dive4elements.artifacts.Artifact;
8 import org.dive4elements.artifacts.CallContext;
9 import org.dive4elements.river.artifacts.D4EArtifact;
10 import org.dive4elements.river.artifacts.access.BedQualityAccess;
11 import org.dive4elements.river.artifacts.model.DataFacet;
12 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
13
14 public class BedDiameterDataFacet
15 extends DataFacet
16 {
17 private static final Logger logger = Logger.getLogger(BedDiameterDataFacet.class);
18
19 private String diameter;
20 private boolean subCap;
21
22 public BedDiameterDataFacet() {
23 }
24
25 public BedDiameterDataFacet(
26 int ndx,
27 String name,
28 String description,
29 ComputeType type,
30 String stateId,
31 String hash
32 ) {
33 super(ndx, name, description, type, hash, stateId);
34 }
35
36 public Object getData(Artifact artifact, CallContext context) {
37 D4EArtifact d4e = (D4EArtifact) artifact;
38 BedQualityAccess access = new BedQualityAccess(d4e, context);
39 int ndx = getIndex() & 7;
40 int top = (getIndex() >> 3) & 1;
41 int diam = (getIndex() >> 4);
42 String diameter = "";
43 switch (diam) {
44 case 1: diameter = "d10"; break;
45 case 2: diameter = "d16"; break;
46 case 3: diameter = "d20"; break;
47 case 4: diameter = "d25"; break;
48 case 5: diameter = "d30"; break;
49 case 6: diameter = "d40"; break;
50 case 7: diameter = "d50"; break;
51 case 8: diameter = "d60"; break;
52 case 9: diameter = "d70"; break;
53 case 10: diameter = "d75"; break;
54 case 11: diameter = "d80"; break;
55 case 12: diameter = "d84"; break;
56 case 13: diameter = "d90"; break;
57 case 14: diameter = "dmin"; break;
58 case 15: diameter = "dmax"; break;
59 case 16: diameter = "dm"; break;
60 default: return null;
61 }
62
63 QualityMeasurements measurements =
64 QualityMeasurementFactory.getBedMeasurements(
65 access.getRiver(),
66 access.getFrom(),
67 access.getTo(),
68 access.getDateRanges().get(ndx).getFrom(),
69 access.getDateRanges().get(ndx).getTo());
70 TDoubleArrayList kms = new TDoubleArrayList();
71 TDoubleArrayList data = new TDoubleArrayList();
72 for (QualityMeasurement m : measurements.getMeasurements()) {
73 if (top == 1 && m.getDepth1() == 0d && m.getDepth2() <= 0.3) {
74 kms.add(m.getKm());
75 data.add(m.getDiameter(diameter)*1000);
76 }
77 else if (top == 0 && m.getDepth1() > 0d && m.getDepth2() <= 0.5){
78 kms.add(m.getKm());
79 data.add(m.getDiameter(diameter)* 1000);
80 }
81 }
82 BedDiameterData bdd = new BedDiameterData(diameter, kms, data);
83 return bdd;
84 }
85
86 /** Copy deeply. */
87 @Override
88 public Facet deepCopy() {
89 BedDiameterDataFacet copy = new BedDiameterDataFacet();
90 copy.set(this);
91 copy.type = type;
92 copy.hash = hash;
93 copy.stateId = stateId;
94 copy.diameter = diameter;
95 return copy;
96 }
97 }

http://dive4elements.wald.intevation.org