annotate gwt-client/src/main/java/org/dive4elements/river/client/server/AbstractMainValuesServiceImpl.java @ 9404:bc9a45d2b1fa

common time range for gauges incl. error messages
author gernotbelger
date Wed, 15 Aug 2018 13:59:09 +0200
parents 82c67b859aa7
children 38201f5b0dd9
rev   line source
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
3 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
7 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
8
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.client.server;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
10
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
11 import java.util.ArrayList;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
12 import java.util.Arrays;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
13 import java.util.Calendar;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
14 import java.util.Comparator;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
15 import java.util.List;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
16
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
17 import javax.xml.xpath.XPathConstants;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
18
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
19 import org.apache.log4j.Logger;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
20 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
21 import org.dive4elements.artifacts.common.utils.XMLUtils;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
22 import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
23 import org.dive4elements.artifacts.httpclient.http.HttpClient;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
24 import org.dive4elements.artifacts.httpclient.http.HttpClientImpl;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.client.shared.exceptions.ServerException;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.client.shared.model.WQInfoObject;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
27 import org.dive4elements.river.client.shared.model.WQInfoObjectImpl;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
28 import org.w3c.dom.Document;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
29 import org.w3c.dom.Element;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
30 import org.w3c.dom.Node;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
31 import org.w3c.dom.NodeList;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
32
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
33 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
34
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
35 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
36 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
37 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
38 abstract class AbstractMainValuesServiceImpl extends RemoteServiceServlet {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
39
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
40 private static final Logger log = Logger.getLogger(DynamicMainValuesServiceImpl.class);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
41
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
42 private static final Comparator<WQInfoObject> WQ_INFO_OBJECT_CMP = new Comparator<WQInfoObject>() {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
43 @Override
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
44 public int compare(final WQInfoObject a, final WQInfoObject b) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
45
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
46 // Descending by type: Qs before Ds
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
47 final int cmp = a.getType().compareTo(b.getType());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
48 if (cmp < 0)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
49 return +1;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
50 if (cmp > 0)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
51 return -1;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
52
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
53 // Ascending by value
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
54 final double diff = a.getValue() - b.getValue();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
55 if (diff < 0d)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
56 return -1;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
57 if (diff > 0d)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
58 return +1;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
59 return 0;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
60 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
61 };
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
62
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
63 private static final String ERROR_NO_WQINFO_FOUND = "error_no_wqinfo_found";
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
64
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
65 private static final String XPATH_WQS = "art:service/art:mainvalues/art:mainvalue";
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
66
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
67 private static final long serialVersionUID = 1L;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
68
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
69 public static final Document createInput(final String river, final double from, final double to, final java.util.Date startDate,
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
70 final java.util.Date endDate) {
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
71
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
72 final Document input = XMLUtils.newDocument();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
73
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
74 final XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(input, ArtifactNamespaceContext.NAMESPACE_URI,
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
75 ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
76
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
77 final Element mainvalues = ec.create("mainvalues");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
78
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
79 final Element riverEl = ec.create("river");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
80 riverEl.setTextContent(river);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
81 mainvalues.appendChild(riverEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
82
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
83 final Element startEl = ec.create("start");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
84 startEl.setTextContent(Double.valueOf(from).toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
85 mainvalues.appendChild(startEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
86
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
87 final Element endEl = ec.create("end");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
88 endEl.setTextContent(Double.valueOf(to).toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
89 mainvalues.appendChild(endEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
90
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
91 if (startDate != null) { // IMPORTANT, MainValueService and DynamicMainValueService share this method. MainvalueService does not have Dates
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
92 final Element startDateElement = ec.create("startDate");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
93 startDateElement.setTextContent(String.valueOf(startDate.getTime()));
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
94 mainvalues.appendChild(startDateElement);
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
95 }
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
96 if (endDate != null) {// IMPORTANT, MainValueService and DynamicMainValueService share this method. MainvalueService does not have Dates
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
97 final Element endDateElement = ec.create("endDate");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
98 endDateElement.setTextContent(String.valueOf(endDate.getTime()));
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
99 mainvalues.appendChild(endDateElement);
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
100 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
101
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
102 input.appendChild(mainvalues);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
103
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
104 return input;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
105 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
106
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
107 protected final WQInfoObject[] callService(final String serviceName, final Document input, final String locale) throws ServerException {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
108 final String url = getServletContext().getInitParameter("server-url");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
109
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
110 final HttpClient client = new HttpClientImpl(url, locale);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
111
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
112 try {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
113 final Document result = client.callService(url, serviceName, input);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
114
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
115 log.debug("Extract wq info objects now.");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
116 final WQInfoObject[] objects = extractWQInfoObjects(result);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
117
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
118 if (objects.length > 0) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
119 return objects;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
120 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
121 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
122 catch (final ConnectionException ce) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
123 log.error(ce, ce);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
124 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
125
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
126 throw new ServerException(ERROR_NO_WQINFO_FOUND);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
127 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
128
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
129 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
130 * Extracts all wq info objects from <i>result</i> document.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
131 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
132 * @param result
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
133 * The document retrieved by the server.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
134 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
135 * @return a list of WQInfoObjects.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
136 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
137 private WQInfoObject[] extractWQInfoObjects(final Document result) throws ServerException {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
138 final NodeList list = (NodeList) XMLUtils.xpath(result, XPATH_WQS, XPathConstants.NODESET, ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
139
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
140 if (list == null || list.getLength() == 0) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
141 log.warn("No wq info found.");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
142
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
143 throw new ServerException(ERROR_NO_WQINFO_FOUND);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
144 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
145
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
146 final boolean debug = log.isDebugEnabled();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
147
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
148 final int num = list.getLength();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
149 if (debug) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
150 log.debug("Response contains " + num + " objects.");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
151 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
152
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
153 final List<WQInfoObject> objects = new ArrayList<WQInfoObject>(num);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
154
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
155 for (int i = 0; i < num; i++) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
156 final WQInfoObject obj = buildWQInfoObject(list.item(i));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
157
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
158 if (obj != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
159 objects.add(obj);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
160 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
161 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
162
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
163 if (debug) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
164 log.debug("Retrieved " + objects.size() + " wq values");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
165 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
166
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
167 final WQInfoObject[] array = objects.toArray(new WQInfoObject[objects.size()]);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
168
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
169 Arrays.sort(array, WQ_INFO_OBJECT_CMP);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
170
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
171 return array;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
172 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
173
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
174 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
175 * Extracts information for a single wq info object and intializes an
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
176 * WQInfoObject with them.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
177 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
178 * @param node
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
179 * The node that contains the information.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
180 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
181 * @return a valid WQInfoObject.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
182 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
183 private static WQInfoObject buildWQInfoObject(final Node node) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
184
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
185 final String name = XMLUtils.xpathString(node, "@name", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
186
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
187 final String type = XMLUtils.xpathString(node, "@type", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
188
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
189 final String value = XMLUtils.xpathString(node, "@value", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
190
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
191 final String official = XMLUtils.xpathString(node, "@official", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
192
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
193 final String starttime = XMLUtils.xpathString(node, "@starttime", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
194
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
195 final String stoptime = XMLUtils.xpathString(node, "@stoptime", ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
196
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
197 if (name != null && type != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
198 try {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
199 final Calendar cal = Calendar.getInstance();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
200 java.util.Date start = null;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
201 java.util.Date stop = null;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
202 if (!starttime.equals("")) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
203 cal.setTimeInMillis(Long.parseLong(starttime));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
204 start = cal.getTime();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
205 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
206 if (!stoptime.equals("")) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
207 cal.setTimeInMillis(Long.parseLong(stoptime));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
208 stop = cal.getTime();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
209 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
210 return new WQInfoObjectImpl(name, type, new Double(value), official != null && official.equalsIgnoreCase("true"), start, stop);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
211 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
212 catch (final NumberFormatException nfe) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
213 log.warn(nfe.getLocalizedMessage());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
214 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
215 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
216
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
217 log.warn("Invalid wq info object found.");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
218
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
219 return null;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
220 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
221 }

http://dive4elements.wald.intevation.org