annotate gwt-client/src/main/java/org/dive4elements/river/client/server/AbstractMainValuesServiceImpl.java @ 9288:82c67b859aa7

bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
author gernotbelger
date Tue, 24 Jul 2018 10:39:03 +0200
parents
children bc9a45d2b1fa
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
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
69 protected final Document createInput(final String river, final double from, final double to, final Integer startYear, final Integer endYear) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
70
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
71 final Document input = XMLUtils.newDocument();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
72
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
73 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
74 ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
75
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
76 final Element mainvalues = ec.create("mainvalues");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
77
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
78 final Element riverEl = ec.create("river");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
79 riverEl.setTextContent(river);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
80 mainvalues.appendChild(riverEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
81
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
82 final Element startEl = ec.create("start");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
83 startEl.setTextContent(Double.valueOf(from).toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
84 mainvalues.appendChild(startEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
85
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
86 final Element endEl = ec.create("end");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
87 endEl.setTextContent(Double.valueOf(to).toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
88 mainvalues.appendChild(endEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
89
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
90 if (startYear != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
91 final Element startYearElement = ec.create("startYear");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
92 startYearElement.setTextContent(Integer.toString(startYear));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
93 mainvalues.appendChild(startYearElement);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
94 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
95
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
96 if (endYear != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
97 final Element endYearElement = ec.create("endYear");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
98 endYearElement.setTextContent(Integer.toString(endYear));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
99 mainvalues.appendChild(endYearElement);
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