Mercurial > dive4elements > river
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 : |