Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 3434:1a636be7612b
FixA: Moved more common calculation code into base class.
flys-artifacts/trunk@5097 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 22 Jul 2012 09:49:56 +0000 |
parents | da7cf0e3ccaa |
children | 262e7d7e58fe |
comparison
equal
deleted
inserted
replaced
3433:c3fb41e73ffb | 3434:1a636be7612b |
---|---|
1 package de.intevation.flys.artifacts.model.fixings; | 1 package de.intevation.flys.artifacts.model.fixings; |
2 | 2 |
3 import de.intevation.flys.artifacts.access.FixAccess; | 3 import de.intevation.flys.artifacts.access.FixAccess; |
4 | 4 |
5 import de.intevation.flys.artifacts.model.Calculation; | 5 import de.intevation.flys.artifacts.model.Calculation; |
6 import de.intevation.flys.artifacts.model.FixingsColumn; | |
7 import de.intevation.flys.artifacts.model.FixingsColumnFactory; | |
8 | |
9 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter; | |
10 | |
11 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing; | |
12 import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter; | |
13 | |
14 import de.intevation.flys.artifacts.model.FixingsOverview; | |
15 | |
16 import java.util.ArrayList; | |
17 import java.util.Date; | |
18 import java.util.HashMap; | |
19 import java.util.List; | |
20 import java.util.Map; | |
6 | 21 |
7 import org.apache.log4j.Logger; | 22 import org.apache.log4j.Logger; |
8 | 23 |
9 public class FixCalculation | 24 public class FixCalculation |
10 extends Calculation | 25 extends Calculation |
11 { | 26 { |
12 private static Logger log = Logger.getLogger(FixCalculation.class); | 27 private static Logger log = Logger.getLogger(FixCalculation.class); |
28 | |
29 /** Helper class to bundle the meta information of a column | |
30 * and the real data. | |
31 */ | |
32 protected static class Column { | |
33 | |
34 protected Fixing.Column meta; | |
35 protected FixingsColumn data; | |
36 | |
37 public Column() { | |
38 } | |
39 | |
40 public Column(Fixing.Column meta, FixingsColumn data) { | |
41 this.meta = meta; | |
42 this.data = data; | |
43 } | |
44 | |
45 public Date getDate() { | |
46 return meta.getStartTime(); | |
47 } | |
48 | |
49 public String getDescription() { | |
50 return meta.getDescription(); | |
51 } | |
52 | |
53 public boolean getQW( | |
54 double km, | |
55 double [] qs, | |
56 double [] ws, | |
57 int index | |
58 ) { | |
59 qs[index] = data.getQ(km); | |
60 return data.getW(km, ws, index); | |
61 } | |
62 | |
63 public boolean getQW(double km, double [] wq) { | |
64 data.getW(km, wq, 0); | |
65 if (Double.isNaN(wq[0])) return false; | |
66 wq[1] = data.getQ(km); | |
67 return !Double.isNaN(wq[1]); | |
68 } | |
69 } // class Column | |
70 | |
71 /** | |
72 * Helper class to find the data belonging to meta info more quickly. | |
73 */ | |
74 protected static class ColumnCache { | |
75 | |
76 protected Map<Integer, Column> columns; | |
77 | |
78 public ColumnCache() { | |
79 columns = new HashMap<Integer, Column>(); | |
80 } | |
81 | |
82 public Column getColumn(Fixing.Column meta) { | |
83 Integer key = meta.getId(); | |
84 Column column = columns.get(key); | |
85 if (column == null) { | |
86 FixingsColumn data = FixingsColumnFactory | |
87 .getInstance() | |
88 .getColumnData(meta); | |
89 if (data != null) { | |
90 column = new Column(meta, data); | |
91 columns.put(key, column); | |
92 } | |
93 } | |
94 return column; | |
95 } | |
96 } // class ColumnCache | |
97 | |
13 | 98 |
14 protected String river; | 99 protected String river; |
15 protected double from; | 100 protected double from; |
16 protected double to; | 101 protected double to; |
17 protected double step; | 102 protected double step; |
80 this.events = events; | 165 this.events = events; |
81 this.qSectorStart = qSectorStart; | 166 this.qSectorStart = qSectorStart; |
82 this.qSectorEnd = qSectorEnd; | 167 this.qSectorEnd = qSectorEnd; |
83 this.preprocessing = preprocessing; | 168 this.preprocessing = preprocessing; |
84 } | 169 } |
85 | 170 } |
171 | |
172 protected static String toString( | |
173 String [] parameterNames, | |
174 double [] values | |
175 ) { | |
176 StringBuilder sb = new StringBuilder(); | |
177 for (int i = 0; i < parameterNames.length; ++i) { | |
178 if (i > 0) sb.append(", "); | |
179 sb.append(parameterNames[i]).append(": ").append(values[i]); | |
180 } | |
181 return sb.toString(); | |
182 } | |
183 | |
184 protected Filter createFilter() { | |
185 return new IdsFilter(events); | |
186 } | |
187 | |
188 protected List<Column> getEventColumns(FixingsOverview overview) { | |
189 | |
190 FixingsColumnFactory fcf = FixingsColumnFactory.getInstance(); | |
191 | |
192 Filter filter = createFilter(); | |
193 | |
194 List<Fixing.Column> metas = overview.filter(null, filter); | |
195 | |
196 List<Column> columns = new ArrayList<Column>(metas.size()); | |
197 | |
198 for (Fixing.Column meta: metas) { | |
199 | |
200 FixingsColumn data = fcf.getColumnData(meta); | |
201 if (data == null) { | |
202 addProblem("fix.cannot.load.data"); | |
203 } | |
204 else { | |
205 columns.add(new Column(meta, data)); | |
206 } | |
207 } | |
208 | |
209 return columns; | |
86 } | 210 } |
87 } | 211 } |
88 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 212 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |