Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQAdapted.java @ 636:58276db49b16
Generate fields for w/q input depend on flow direction.
flys-artifacts/trunk@2012 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 26 May 2011 15:55:48 +0000 |
parents | 929137ee8154 |
children | 2dbbb5be30a1 |
comparison
equal
deleted
inserted
replaced
635:acf3b49ec31f | 636:58276db49b16 |
---|---|
1 package de.intevation.flys.artifacts.states; | 1 package de.intevation.flys.artifacts.states; |
2 | 2 |
3 import java.util.ArrayList; | 3 import java.util.ArrayList; |
4 import java.util.List; | 4 import java.util.List; |
5 import java.util.Comparator; | |
6 import java.util.Collections; | |
5 | 7 |
6 import org.apache.log4j.Logger; | 8 import org.apache.log4j.Logger; |
7 | 9 |
8 import org.w3c.dom.Element; | 10 import org.w3c.dom.Element; |
9 | 11 |
36 | 38 |
37 public static final String FIELD_WQ_MODE = "wq_mode"; | 39 public static final String FIELD_WQ_MODE = "wq_mode"; |
38 | 40 |
39 public static final String FIELD_WQ_VALUES = "wq_values"; | 41 public static final String FIELD_WQ_VALUES = "wq_values"; |
40 | 42 |
43 public static final class GaugeOrder implements Comparator<Gauge> { | |
44 private int order; | |
45 | |
46 public GaugeOrder(boolean up) { | |
47 order = up ? 1 : 1; | |
48 } | |
49 | |
50 public int compare(Gauge a, Gauge b) { | |
51 return order * a.getRange().getA().compareTo(b.getRange().getA()); | |
52 } | |
53 } // class GaugeOrder | |
54 | |
55 public static final GaugeOrder GAUGE_UP = new GaugeOrder(true); | |
56 public static final GaugeOrder GAUGE_DOWN = new GaugeOrder(false); | |
41 | 57 |
42 /** | 58 /** |
43 * This method creates one element for each gauge of the selected river that | 59 * This method creates one element for each gauge of the selected river that |
44 * is intersected by the given kilometer range. Each element is a tuple of | 60 * is intersected by the given kilometer range. Each element is a tuple of |
45 * (from;to) where <i>from</i> is the lower bounds of the gauge or the lower | 61 * (from;to) where <i>from</i> is the lower bounds of the gauge or the lower |
110 return null; | 126 return null; |
111 } | 127 } |
112 | 128 |
113 Element[] elements = new Element[num]; | 129 Element[] elements = new Element[num]; |
114 | 130 |
131 double rangeFrom = dist[0]; | |
132 double rangeTo = dist[1]; | |
133 | |
115 int idx = 0; | 134 int idx = 0; |
116 | 135 |
117 for (Gauge gauge: gauges) { | 136 if (rangeFrom < rangeTo) { |
118 Range range = gauge.getRange(); | 137 Collections.sort(gauges, GAUGE_UP); |
119 double lower = range.getA().doubleValue(); | 138 for (Gauge gauge: gauges) { |
120 double upper = range.getB().doubleValue(); | 139 Range range = gauge.getRange(); |
121 | 140 double lower = range.getA().doubleValue(); |
122 double from = dist[0] < lower ? lower : dist[0]; | 141 double upper = range.getB().doubleValue(); |
123 double to = dist[1] > upper ? upper : dist[1]; | 142 |
124 | 143 double from = lower < rangeFrom ? rangeFrom : lower; |
125 String key = Double.toString(from) + ";" + Double.toString(to); | 144 double to = upper > rangeTo ? rangeTo : upper; |
126 | 145 |
127 elements[idx++] = createItem(cr, new String[] {key, ""}); | 146 elements[idx++] = createItem( |
147 cr, new String[] { from + ";" + to, ""}); | |
148 } | |
149 } | |
150 else { | |
151 Collections.sort(gauges, GAUGE_DOWN); | |
152 for (Gauge gauge: gauges) { | |
153 Range range = gauge.getRange(); | |
154 double lower = range.getA().doubleValue(); | |
155 double upper = range.getB().doubleValue(); | |
156 | |
157 double to = upper < rangeTo ? rangeTo : upper; | |
158 double from = lower > rangeFrom ? rangeFrom : lower; | |
159 | |
160 elements[idx++] = createItem( | |
161 cr, new String[] { to + ";" + from, ""}); | |
162 } | |
128 } | 163 } |
129 | 164 |
130 return elements; | 165 return elements; |
131 } | 166 } |
132 | 167 |