comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java @ 9390:f575ff573cbb

"Name der Peilung" columname minfo.
author gernotbelger
date Thu, 09 Aug 2018 15:22:31 +0200
parents 5e38e2924c07
children 2da486c7c05f
comparison
equal deleted inserted replaced
9389:63c086139391 9390:f575ff573cbb
16 import org.dive4elements.artifacts.Artifact; 16 import org.dive4elements.artifacts.Artifact;
17 import org.dive4elements.artifacts.CallContext; 17 import org.dive4elements.artifacts.CallContext;
18 import org.dive4elements.artifacts.common.model.KVP; 18 import org.dive4elements.artifacts.common.model.KVP;
19 import org.dive4elements.artifacts.common.utils.XMLUtils; 19 import org.dive4elements.artifacts.common.utils.XMLUtils;
20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; 20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
21 import org.dive4elements.river.artifacts.D4EArtifact;
22 import org.dive4elements.river.artifacts.resources.Resources;
21 import org.dive4elements.river.model.BedHeight; 23 import org.dive4elements.river.model.BedHeight;
22 import org.dive4elements.river.model.River; 24 import org.dive4elements.river.model.River;
23 import org.dive4elements.river.artifacts.D4EArtifact;
24 import org.dive4elements.river.artifacts.resources.Resources;
25 import org.dive4elements.river.utils.Formatter; 25 import org.dive4elements.river.utils.Formatter;
26 import org.dive4elements.river.utils.RiverUtils; 26 import org.dive4elements.river.utils.RiverUtils;
27 import org.w3c.dom.Element; 27 import org.w3c.dom.Element;
28
29 28
30 public class SoundingsSelect extends DefaultState { 29 public class SoundingsSelect extends DefaultState {
31 30
32 public static final String SOUNDINGS = "soundings"; 31 public static final String SOUNDINGS = "soundings";
33 32
34 public static final String PREFIX_SINGLE = "single-"; 33 public static final String PREFIX_SINGLE = "single-";
35 34
36 /** Private log. */ 35 /** Private log. */
37 private static final Logger log = Logger.getLogger(SoundingsSelect.class); 36 private static final Logger log = Logger.getLogger(SoundingsSelect.class);
38 37
39
40 @Override 38 @Override
41 public String getUIProvider() { 39 public String getUIProvider() {
42 return "parameter-matrix"; 40 return "parameter-matrix-sounding";
43 } 41 }
44 42
45 @Override 43 @Override
46 protected void appendItems( 44 protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) {
47 Artifact artifact,
48 ElementCreator creator,
49 String name,
50 CallContext context,
51 Element select
52 ) {
53 try { 45 try {
54 creator.addAttr(select, "type", "multiattribute", true); 46 creator.addAttr(select, "type", "multiattribute", true);
55 47
56 appendMeta(creator, select); 48 appendMeta(creator, select);
57 49
58 getOptions(artifact, name, context, creator, select); 50 getOptions(artifact, name, context, creator, select);
59 } 51 }
60 catch (IllegalArgumentException iae) { 52 catch (final IllegalArgumentException iae) {
61 log.warn("Illegal argument", iae); 53 log.warn("Illegal argument", iae);
62 } 54 }
63 } 55 }
64 56
65 private static Element order( 57 private static Element order(final ElementCreator creator, final String name, final String order) {
66 ElementCreator creator, 58 final Element element = creator.create(name);
67 String name,
68 String order
69 ) {
70 Element element = creator.create(name);
71 creator.addAttr(element, "order", order, false); 59 creator.addAttr(element, "order", order, false);
72 return element; 60 return element;
73 } 61 }
74 62
75 private void appendMeta(ElementCreator creator, Element select) { 63 private void appendMeta(final ElementCreator creator, final Element select) {
76 64
77 Element meta = creator.create("meta"); 65 final Element meta = creator.create("meta");
78 66 meta.appendChild(order(creator, "year", "0"));
79 meta.appendChild(order(creator, "year", "0")); 67 meta.appendChild(order(creator, "value", "1"));
80 meta.appendChild(order(creator, "value", "1"));
81 meta.appendChild(order(creator, "analyzed_range", "2")); 68 meta.appendChild(order(creator, "analyzed_range", "2"));
82 meta.appendChild(order(creator, "label", "3")); 69 meta.appendChild(order(creator, "label", "3"));
83 meta.appendChild(order(creator, "minfo_type", "4")); 70 meta.appendChild(order(creator, "minfo_type", "4"));
84 71
85 select.appendChild(meta); 72 select.appendChild(meta);
86 73
87 } 74 }
88 75
89 protected KVP<String, String>[] getOptions( 76 protected KVP<String, String>[] getOptions(final Artifact artifact, final String parameterName, final CallContext context, final ElementCreator creator,
90 Artifact artifact, 77 final Element select) throws IllegalArgumentException {
91 String parameterName,
92 CallContext context,
93 ElementCreator creator,
94 Element select
95 )
96 throws IllegalArgumentException
97 {
98 log.debug("Get options for parameter: '" + parameterName + "'"); 78 log.debug("Get options for parameter: '" + parameterName + "'");
99 79
100 if (!testParameterName(parameterName)) { 80 if (!testParameterName(parameterName)) {
101 throw new IllegalArgumentException( 81 throw new IllegalArgumentException("Invalid parameter for state: '" + parameterName + "'");
102 "Invalid parameter for state: '" + parameterName + "'");
103 } 82 }
104 83
105 River river = RiverUtils.getRiver((D4EArtifact) artifact); 84 final River river = RiverUtils.getRiver((D4EArtifact) artifact);
106 double lo = ((D4EArtifact) artifact).getDataAsDouble("ld_from"); 85 final double lo = ((D4EArtifact) artifact).getDataAsDouble("ld_from");
107 double hi = ((D4EArtifact) artifact).getDataAsDouble("ld_to"); 86 final double hi = ((D4EArtifact) artifact).getDataAsDouble("ld_to");
108 87
109 double kmLo = Math.min(lo, hi); 88 final double kmLo = Math.min(lo, hi);
110 double kmHi = Math.max(lo, hi); 89 final double kmHi = Math.max(lo, hi);
111 90
112 appendSingles(river, kmLo, kmHi, creator, select, context); 91 appendSingles(river, kmLo, kmHi, creator, select, context);
113 92
114 List<KVP<String, String>> kvp = 93 final List<KVP<String, String>> kvp = Collections.<KVP<String, String>>emptyList();
115 Collections.<KVP<String, String>>emptyList();
116 return kvp.toArray(new KVP[kvp.size()]); 94 return kvp.toArray(new KVP[kvp.size()]);
117 } 95 }
118 96
119 97 protected void appendSingles(final River river, final double kmLo, final double kmHi, final ElementCreator creator, final Element select,
120 protected void appendSingles( 98 final CallContext context) {
121 River river, 99 final List<BedHeight> singles = BedHeight.getBedHeights(river, kmLo, kmHi);
122 double kmLo,
123 double kmHi,
124 ElementCreator creator,
125 Element select,
126 CallContext context
127 ) {
128 List<BedHeight> singles =
129 BedHeight.getBedHeights(river, kmLo, kmHi);
130 100
131 if (singles != null) { 101 if (singles != null) {
132 int size = singles.size(); 102 final int size = singles.size();
133 103
134 log.debug("Found " + size + " singles."); 104 log.debug("Found " + size + " singles.");
135 105
136 NumberFormat nf = Formatter.getCalculationKm(context.getMeta()); 106 final NumberFormat nf = Formatter.getCalculationKm(context.getMeta());
137 for (int i = 0; i < size; i++) { 107 for (int i = 0; i < size; i++) {
138 BedHeight s = singles.get(i); 108 final BedHeight s = singles.get(i);
139 109
140 String id = PREFIX_SINGLE + s.getId(); 110 final String id = PREFIX_SINGLE + s.getId();
141 String value = s.getDescription(); 111 final String value = s.getDescription();
142 112
143 Integer year = s.getYear(); 113 final Integer year = s.getYear();
144 Element item = creator.create("item"); 114 final Element item = creator.create("item");
145 creator.addAttr(item, "label", value, true); 115 creator.addAttr(item, "label", value, true);
146 creator.addAttr(item, "value", id, true); 116 creator.addAttr(item, "value", id, true);
147 creator.addAttr(item, "analyzed_range", 117 creator.addAttr(item, "analyzed_range", nf.format(s.getRange().getA()) + " - " + nf.format(s.getRange().getB()));
148 nf.format(s.getRange().getA()) + 118 creator.addAttr(item, "year", year != null ? s.getYear().toString() : "");
149 " - " +
150 nf.format(s.getRange().getB()));
151 creator.addAttr(item, "year",
152 year != null ? s.getYear().toString() : "");
153 creator.addAttr(item, "minfo_type", s.getType().getName()); 119 creator.addAttr(item, "minfo_type", s.getType().getName());
154 select.appendChild(item); 120 select.appendChild(item);
155 } 121 }
156 } 122 }
157 if (log.isDebugEnabled()) { 123 if (log.isDebugEnabled()) {
159 log.debug(XMLUtils.toString(select)); 125 log.debug(XMLUtils.toString(select));
160 } 126 }
161 } 127 }
162 128
163 @Override 129 @Override
164 protected Element createStaticData( 130 protected Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value,
165 D4EArtifact flys, 131 final String type) {
166 ElementCreator creator, 132 final Element data = creator.create("data");
167 CallContext cc, 133 creator.addAttr(data, "name", name, true);
168 String name, 134 creator.addAttr(data, "type", type, true);
169 String value, 135 creator.addAttr(data, "label", Resources.getMsg(cc.getMeta(), name, name), true);
170 String type
171 ) {
172 Element data = creator.create("data");
173 creator.addAttr(data, "name", name, true);
174 creator.addAttr(data, "type", type, true);
175 creator.addAttr(data, "label",
176 Resources.getMsg(cc.getMeta(), name, name), true);
177 136
178 String[] values = value.split(";"); 137 final String[] values = value.split(";");
179 138
180 for (String val: values) { 139 for (final String val : values) {
181 Element item = creator.create("item"); 140 final Element item = creator.create("item");
182 creator.addAttr(item, "value", val, true); 141 creator.addAttr(item, "value", val, true);
183 creator.addAttr(item, "label", getLabelFor(cc, name, val), true); 142 creator.addAttr(item, "label", getLabelFor(cc, name, val), true);
184 143
185 data.appendChild(item); 144 data.appendChild(item);
186 } 145 }
187 146
188 return data; 147 return data;
189 } 148 }
190 149
191 protected String getLabelFor( 150 protected String getLabelFor(final CallContext cc, final String parameterName, final String value) throws IllegalArgumentException {
192 CallContext cc,
193 String parameterName,
194 String value
195 ) throws IllegalArgumentException
196 {
197 if (!testParameterName(parameterName)) { 151 if (!testParameterName(parameterName)) {
198 throw new IllegalArgumentException( 152 throw new IllegalArgumentException("Invalid parameter for state: '" + parameterName + "'");
199 "Invalid parameter for state: '" + parameterName + "'");
200 } 153 }
201 154
202 if (value.indexOf(PREFIX_SINGLE) >= 0) { 155 if (value.indexOf(PREFIX_SINGLE) >= 0) {
203 return getLabelForSingle(cc, value); 156 return getLabelForSingle(cc, value);
204 } 157 }
205 return value; 158 return value;
206 } 159 }
207 160
208 161 protected String getLabelForSingle(final CallContext cc, final String value) {
209 protected String getLabelForSingle(CallContext cc, String value) { 162 final String id = value.replace(PREFIX_SINGLE, "");
210 String id = value.replace(PREFIX_SINGLE, "");
211 try { 163 try {
212 BedHeight s = BedHeight.getBedHeightById( 164 final BedHeight s = BedHeight.getBedHeightById(Integer.parseInt(id));
213 Integer.parseInt(id));
214 165
215 if (s != null) { 166 if (s != null) {
216 return s.getDescription(); 167 return s.getDescription();
217 } 168 } else {
218 else {
219 return "no value for '" + id + "'"; 169 return "no value for '" + id + "'";
220 } 170 }
221 } 171 }
222 catch (NumberFormatException nfe) { 172 catch (final NumberFormatException nfe) {
223 log.warn("Could not parse id from string '" + id + "'", nfe); 173 log.warn("Could not parse id from string '" + id + "'", nfe);
224 } 174 }
225 175
226 return "n.A."; 176 return "n.A.";
227 } 177 }
228 178
229
230 /** 179 /**
231 * This method might be used to test, if a parameter name 180 * This method might be used to test, if a parameter name
232 * is handled by this state. 181 * is handled by this state.
233 * 182 *
234 * @param parameterName The name of a parameter. 183 * @param parameterName
184 * The name of a parameter.
235 * 185 *
236 * @return true, if parameterName is one of <i>MAIN_CHANNEL</i> or 186 * @return true, if parameterName is one of <i>MAIN_CHANNEL</i> or
237 * <i>TOTAL_CHANNEL</i>. Otherwise false. 187 * <i>TOTAL_CHANNEL</i>. Otherwise false.
238 */ 188 */
239 protected boolean testParameterName(String parameterName) { 189 protected boolean testParameterName(final String parameterName) {
240 if (parameterName == null || parameterName.length() == 0) { 190 if (parameterName == null || parameterName.length() == 0) {
241 return false; 191 return false;
242 } 192 } else if (parameterName.equals(SOUNDINGS)) {
243 else if (parameterName.equals(SOUNDINGS)) {
244 return true; 193 return true;
245 } 194 } else {
246 else {
247 return false; 195 return false;
248 } 196 }
249 } 197 }
250 } 198 }
251 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 199 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org