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

http://dive4elements.wald.intevation.org