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 :

http://dive4elements.wald.intevation.org