comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MiddleBedHeightCalculation.java @ 2713:b60751cfdd6c

Start MINFO middle bed height calculation in the relevant state and creates facets for chart and csv. flys-artifacts/trunk@4437 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 18 May 2012 09:18:39 +0000
parents
children 250a370c377d
comparison
equal deleted inserted replaced
2712:ed612b85fb6d 2713:b60751cfdd6c
1 package de.intevation.flys.artifacts.model;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7
8 import de.intevation.artifacts.common.utils.DateUtils;
9
10 import de.intevation.flys.model.BedHeightEpoch;
11 import de.intevation.flys.model.BedHeightEpochValue;
12 import de.intevation.flys.model.BedHeightSingle;
13 import de.intevation.flys.model.BedHeightSingleValue;
14 import de.intevation.flys.model.TimeInterval;
15
16 import de.intevation.flys.artifacts.MINFOArtifact;
17 import de.intevation.flys.artifacts.model.MiddleBedHeightData;
18
19
20 public class MiddleBedHeightCalculation extends Calculation {
21
22 private static final Logger logger =
23 Logger.getLogger(MiddleBedHeightCalculation.class);
24
25
26 public CalculationResult calculate(MINFOArtifact artifact) {
27 logger.info("MiddleBedHeightCalculation.calculate");
28
29 int[] singleIds = artifact.getBedHeightSingleIDs();
30 int[] epochIds = artifact.getBedHeightEpochIDs();
31
32 if (logger.isDebugEnabled()) {
33 logger.debug("Artifact '" + artifact.identifier() + "' contains:");
34 if (singleIds != null) {
35 logger.debug(" " + singleIds.length + " single bedheight ids");
36 }
37
38 if (epochIds != null) {
39 logger.debug(" " + epochIds.length + " epoch bedheight ids");
40 }
41 }
42
43 List<BedHeightSingle> singles = getSingles(artifact, singleIds);
44 List<BedHeightEpoch> epochs = getEpochs(artifact, epochIds);
45
46 return buildCalculationResult(artifact, singles, epochs);
47 }
48
49
50 protected List<BedHeightSingle> getSingles(MINFOArtifact minfo, int[] ids) {
51 List<BedHeightSingle> singles = new ArrayList<BedHeightSingle>();
52
53 for (int id: ids) {
54 BedHeightSingle s = BedHeightSingle.getBedHeightSingleById(id);
55
56 if (s != null) {
57 singles.add(s);
58 }
59 else {
60 logger.warn("Cannot find Sngle by id: " + id);
61 // TODO ADD WARNING
62 }
63 }
64
65 return singles;
66 }
67
68
69 protected List<BedHeightEpoch> getEpochs(MINFOArtifact minfo, int[] ids) {
70 List<BedHeightEpoch> epochs = new ArrayList<BedHeightEpoch>();
71
72 for (int id: ids) {
73 BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(id);
74
75 if (e != null) {
76 epochs.add(e);
77 }
78 else {
79 logger.warn("Cannot find Epoch by id: " + id);
80 // TODO ADD WARNING
81 }
82 }
83
84 return epochs;
85 }
86
87
88 protected CalculationResult buildCalculationResult(
89 MINFOArtifact artifact,
90 List<BedHeightSingle> singles,
91 List<BedHeightEpoch> epochs
92 ) {
93 logger.info("MiddleBedHeightCalculation.buildCalculationResult");
94
95 int size = singles.size() + epochs.size();
96
97 List<MiddleBedHeightData> data = new ArrayList<MiddleBedHeightData>();
98
99 for (BedHeightSingle single: singles) {
100 MiddleBedHeightData d = prepareSingleData(single);
101
102 if (d != null) {
103 data.add(d);
104 }
105 }
106
107 for (BedHeightEpoch epoch: epochs) {
108 MiddleBedHeightData d = prepareEpochData(epoch);
109
110 if (d != null) {
111 data.add(d);
112 }
113 }
114
115 logger.debug("Calculation results in " + data.size() + " data objects.");
116
117 return new CalculationResult((MiddleBedHeightData[])
118 data.toArray(new MiddleBedHeightData[data.size()]), this);
119 }
120
121
122 protected MiddleBedHeightData prepareSingleData(BedHeightSingle single) {
123 logger.debug("Prepare data for single: " + single.getDescription());
124
125 List<BedHeightSingleValue> values = single.getValues();
126
127 MiddleBedHeightData data = new MiddleBedHeightData(
128 single.getYear(),
129 single.getYear(),
130 single.getEvaluationBy(),
131 single.getDescription());
132
133 for (BedHeightSingleValue value: values) {
134 data.addKM(value.getStation().doubleValue());
135 data.addMiddleHeight(value.getHeight().doubleValue());
136 data.addUncertainty(value.getUncertainty().doubleValue());
137 data.addSoundingWidth(value.getSoundingWidth().doubleValue());
138 data.addDataGap(value.getDataGap().doubleValue());
139 data.addWidth(value.getWidth().doubleValue());
140 }
141
142 logger.debug("Single contains " + values.size() + " values");
143
144 return data;
145 }
146
147
148 protected MiddleBedHeightData prepareEpochData(BedHeightEpoch epoch) {
149 logger.debug("Prepare data for epoch: " + epoch.getDescription());
150
151 TimeInterval ti = epoch.getTimeInterval();
152
153 List<BedHeightEpochValue> values = epoch.getValues();
154
155 MiddleBedHeightData data = new MiddleBedHeightData(
156 DateUtils.getYearFromDate(ti.getStartTime()),
157 DateUtils.getYearFromDate(ti.getStopTime()),
158 epoch.getEvaluationBy(),
159 epoch.getDescription()
160 );
161
162 for (BedHeightEpochValue value: values) {
163 data.addKM(value.getStation().doubleValue());
164 data.addMiddleHeight(value.getHeight().doubleValue());
165 }
166
167 logger.debug("Epoch contains " + values.size() + " values");
168
169 return data;
170 }
171 }
172 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org