comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/MeasurementState.java @ 785:e764cab8c885

Save the relation between selected measurement and the parameter it belongs to (issue210). TODO: Adapt sql statements. gnv-artifacts/trunk@867 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 30 Mar 2010 14:05:22 +0000
parents c4156275c1e1
children a5526908f92f
comparison
equal deleted inserted replaced
784:7b81d563c8c0 785:e764cab8c885
1 package de.intevation.gnv.state; 1 package de.intevation.gnv.state;
2 2
3 import de.intevation.artifactdatabase.XMLUtils; 3 import de.intevation.artifactdatabase.XMLUtils;
4 4
5 import de.intevation.artifacts.CallContext;
5 import de.intevation.artifacts.CallMeta; 6 import de.intevation.artifacts.CallMeta;
6 7
7 import de.intevation.gnv.artifacts.ressource.RessourceFactory; 8 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
8 9
9 import de.intevation.gnv.geobackend.base.Result; 10 import de.intevation.gnv.geobackend.base.Result;
12 import de.intevation.gnv.state.describedata.ExtendedKeyValueData; 13 import de.intevation.gnv.state.describedata.ExtendedKeyValueData;
13 import de.intevation.gnv.state.describedata.KeyValueDescibeData; 14 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
14 import de.intevation.gnv.state.describedata.NamedArrayList; 15 import de.intevation.gnv.state.describedata.NamedArrayList;
15 import de.intevation.gnv.state.describedata.NamedCollection; 16 import de.intevation.gnv.state.describedata.NamedCollection;
16 17
18 import de.intevation.gnv.state.exception.StateException;
19
20 import de.intevation.gnv.utils.InputValidator;
21
17 import java.util.ArrayList; 22 import java.util.ArrayList;
18 import java.util.Arrays; 23 import java.util.Arrays;
19 import java.util.Collection; 24 import java.util.Collection;
25 import java.util.HashMap;
20 import java.util.Iterator; 26 import java.util.Iterator;
21 import java.util.List; 27 import java.util.List;
28 import java.util.Locale;
22 29
23 import org.apache.log4j.Logger; 30 import org.apache.log4j.Logger;
24 31
25 import org.w3c.dom.Document; 32 import org.w3c.dom.Document;
26 import org.w3c.dom.Element; 33 import org.w3c.dom.Element;
34 { 41 {
35 private static Logger logger = Logger.getLogger(MeasurementState.class); 42 private static Logger logger = Logger.getLogger(MeasurementState.class);
36 43
37 public static final String SQL_KEY_PARAMETERID = "PARAMETERID"; 44 public static final String SQL_KEY_PARAMETERID = "PARAMETERID";
38 45
46 public static final String SEPARATOR = ";";
47
39 48
40 private class ParameterMatrix { 49 private class ParameterMatrix {
41 private final Logger logger = 50 private final Logger logger =
42 Logger.getLogger(ParameterMatrix.class); 51 Logger.getLogger(ParameterMatrix.class);
43 52
93 } 102 }
94 } 103 }
95 } 104 }
96 105
97 private void initParameters(String[] parameter) { 106 private void initParameters(String[] parameter) {
98 int count = parameter.length; 107 for (String param: parameter) {
99 for (int i = 0; i < count; i++) { 108 parameters.add(param);
100 parameters.add(parameter[i]);
101 } 109 }
102 } 110 }
103 111
104 public int measurementSize() { 112 public int measurementSize() {
105 if (measurements != null) 113 if (measurements != null)
218 int measurements = matrix.measurementSize(); 226 int measurements = matrix.measurementSize();
219 int parameters = matrix.parameterSize(); 227 int parameters = matrix.parameterSize();
220 228
221 for (int i = 0; i < parameters; i++) { 229 for (int i = 0; i < parameters; i++) {
222 Element select = creator.create("select"); 230 Element select = creator.create("select");
223 creator.addAttr(select, "label", inputParam.getDescription(matrix.getParameter(i))); 231 String param = matrix.getParameter(i);
232 creator.addAttr(select, "label", inputParam.getDescription(param));
224 creator.addAttr(select, "ref", name); 233 creator.addAttr(select, "ref", name);
225 234
226 for (int j = 0; j < measurements; j++) { 235 for (int j = 0; j < measurements; j++) {
227 Element item = creator.create("item"); 236 Element item = creator.create("item");
228 Element label = creator.create("label"); 237 Element label = creator.create("label");
239 } 248 }
240 else { 249 else {
241 creator.addAttr(item, "disabled", "false"); 250 creator.addAttr(item, "disabled", "false");
242 } 251 }
243 252
253 String tmpValue = matrix.getMeasurement(j) + ";" + param;
244 label.setTextContent(matrix.getMDescription(j)); 254 label.setTextContent(matrix.getMDescription(j));
245 value.setTextContent(matrix.getMeasurement(j)); 255 value.setTextContent(tmpValue);
246 256
247 item.appendChild(label); 257 item.appendChild(label);
248 item.appendChild(value); 258 item.appendChild(value);
249 select.appendChild(item); 259 select.appendChild(item);
250 } 260 }
252 matrixNode.appendChild(select); 262 matrixNode.appendChild(select);
253 } 263 }
254 264
255 dynamicNode.appendChild(matrixNode); 265 dynamicNode.appendChild(matrixNode);
256 } 266 }
267
268
269 @Override
270 public Document feed(
271 CallContext context,
272 Collection<InputData> input,
273 String uuid)
274 throws StateException
275 {
276 RessourceFactory resFactory = RessourceFactory.getInstance();
277 Locale[] serverLocales = resFactory.getLocales();
278 Locale locale = context.getMeta().getPreferredLocale(
279 serverLocales);
280
281 if (input == null) {
282 String msg = resFactory.getRessource(
283 locale,
284 EXCEPTION_NO_INPUT,
285 EXCEPTION_NO_INPUT);
286 logger.warn(msg);
287 return feedFailure(msg);
288 }
289
290 for(InputData item: input) {
291 String name = item.getName();
292 InputValue inputValue = inputValues.get(name);
293
294 String[] tupel = extractValuesAndParams(item.getValue());
295 String type = inputValue.getType();
296
297 if (inputValue == null) {
298 String msg = resFactory.getRessource(
299 locale,
300 EXCEPTION_INVALID_INPUT,
301 EXCEPTION_INVALID_INPUT);
302 logger.warn(msg);
303 return feedFailure(msg);
304 }
305
306 if (!InputValidator.isInputValid(tupel[0], type)) {
307 String msg = resFactory.getRessource(
308 locale,
309 EXCEPTION_INVALID_INPUT,
310 EXCEPTION_INVALID_INPUT);
311 logger.warn(msg);
312 return feedFailure(msg);
313 }
314
315 if (inputData == null) {
316 inputData = new HashMap<String, InputData>();
317 }
318
319 ExtendedInputData extended = new ExtendedInputData(
320 name,
321 tupel[0],
322 item.getObject(),
323 tupel[1]);
324
325 if (name.equals(dataName)) {
326 String[] desc = getDescriptionForInputData(extended, uuid);
327 extended.setDescription(desc);
328 }
329
330 inputData.put(name, extended);
331 }
332
333 return feedSuccess();
334 }
335
336
337 protected String[] extractValuesAndParams(String tmp) {
338 String[] array = tmp.split(DefaultInputData.VALUE_SEPARATOR);
339
340 String[] extracted = new String[2];
341 for (String item: array) {
342 String[] tupel = item.split(ExtendedInputData.SEPARATOR);
343
344 if (extracted[0] == null) {
345 extracted[0] = tupel[0];
346 }
347 else {
348 extracted[0] +=
349 DefaultInputData.VALUE_SEPARATOR + tupel[0];
350 }
351
352 if (extracted[1] == null) {
353 extracted[1] = tupel[1];
354 }
355 else {
356 extracted[1] += DefaultInputData.VALUE_SEPARATOR + tupel[1];
357 }
358 }
359
360 logger.debug("VALUES RESULT: " + extracted[0]);
361 logger.debug("PARAMS RESULT: " + extracted[1]);
362
363 return extracted;
364 }
257 } 365 }
258 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: 366 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org