annotate artifacts/src/main/java/org/dive4elements/river/artifacts/services/AbstractMainValuesService.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
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.artifacts.services;
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 static org.dive4elements.river.backend.utils.EpsilonComparator.CMP;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
12
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
13 import java.util.List;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
14
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
15 import org.apache.log4j.Logger;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
16 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
17 import org.dive4elements.artifacts.common.utils.XMLUtils;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.model.RiverFactory;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.model.Gauge;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.model.MainValue;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.model.MainValueType;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.model.NamedMainValue;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.model.OfficialLine;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.model.Range;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.model.River;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
27 import org.w3c.dom.Document;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
28 import org.w3c.dom.Element;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
29
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
30 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
31 * @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
32 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
33 abstract class AbstractMainValuesService extends D4EService {
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 private static final long serialVersionUID = 1L;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
36
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
37 public static final class MainValuesServiceException extends Exception {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
38
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
39 private static final long serialVersionUID = 1L;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
40
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
41 public MainValuesServiceException(final String message) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
42 super(message);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
43 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
44 }
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 /** The log that is used by this service. */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
47 private static Logger log = Logger.getLogger(AbstractMainValuesService.class);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
48
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
49 /** XPath that points to the river definition of the incoming request. */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
50
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
51 /** XPath that points to the start definition of the incoming request. */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
52 private static final String XPATH_START = "/art:mainvalues/art:start/text()";
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
53
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
54 /** The XPath that points to the end definition of the incoming request. */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
55 private static final String XPATH_END = "/art:mainvalues/art:end/text()";
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
56
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
57 protected static final Document error(final String msg) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
58 log.debug(msg);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
59 return XMLUtils.newDocument();
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 * This method extracts the river from the incoming request. If no river
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
64 * string was found or no river is found in the database based on this
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
65 * string a NullPointerException is thrown.
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 * @param data
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
68 * The incoming request data.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
69 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
70 * @return the River object.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
71 */
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
72 protected static final River getRequestedRiver(final Document data, final String XPATH_RIVER) throws MainValuesServiceException {
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
73 log.debug("MainValuesService.getRequestedRiver");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
74
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
75 String riverStr = XMLUtils.xpathString(data, XPATH_RIVER, ArtifactNamespaceContext.INSTANCE);
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 if (riverStr != null && (riverStr = riverStr.trim()).length() > 0)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
78 return RiverFactory.getRiver(riverStr);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
79
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
80 throw new MainValuesServiceException("no river found.");
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
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
83 protected static final Gauge getRequestedGauge(final Document data, final River river) throws MainValuesServiceException {
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
84
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
85 final double[] minmax = getRequestedStartEnd(data, river);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
86 final Gauge gauge = river.determineRefGauge(minmax, CMP.compare(minmax[0], minmax[1]) != 0);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
87 if (gauge == null)
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
88 throw new MainValuesServiceException("no gauge found.");
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 return gauge;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
91 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
92
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
93 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
94 * This method extracts the start and end point from incoming request
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
95 * document and returns both values in an array.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
96 * If no start and end strings
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
97 * are found in the document, the min/max values of the <i>river</i> are
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
98 * returned.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
99 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
100 * @param data
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
101 * The incoming request data.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
102 * @param river
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
103 * The river of the request.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
104 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
105 * @return the start and end point.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
106 */
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
107 public static double[] getRequestedStartEnd(final Document data, final River river) {
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
108 log.debug("MainValuesService.getStartEnd");
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 String startStr = XMLUtils.xpathString(data, XPATH_START, ArtifactNamespaceContext.INSTANCE);
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 final String endStr = XMLUtils.xpathString(data, XPATH_END, ArtifactNamespaceContext.INSTANCE);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
113
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
114 if (startStr == null || endStr == null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
115 return river.determineMinMaxDistance();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
116 }
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 try {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
119 final double start = Double.parseDouble(startStr);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
120 final double end = Double.parseDouble(endStr);
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 if (log.isDebugEnabled()) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
123 log.debug("Found start: " + start);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
124 log.debug("Found end: " + end);
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
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
127 return new double[] { start, end };
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 catch (final NumberFormatException nfe) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
130 log.warn(nfe, nfe);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
131 return river.determineMinMaxDistance();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
132 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
133 }
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 protected final Document buildDocument(final River river, final Gauge gauge, final List<MainValue> mainValues, final Object context) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
136 log.debug("MainValuesService.buildDocument");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
137
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
138 final Document doc = XMLUtils.newDocument();
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 final ElementCreator cr = new ElementCreator(doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
141
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
142 final Element rootEl = cr.create("service");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
143 cr.addAttr(rootEl, "name", "mainvalues");
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 doc.appendChild(rootEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
146
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
147 appendMetaInformation(doc, rootEl, river, gauge, context);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
148 appendMainValues(doc, rootEl, mainValues, river.getId(), context);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
149
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
150 return doc;
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 /**
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
154 * This method appends some meta information to the result document.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
155 * Currently, the river's and gauge's names and the gauge's range are
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
156 * appended.
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 * @param root
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
159 * The root element of the result document.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
160 * @param river
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
161 * The river.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
162 * @param gauge
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
163 * The gauge.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
164 * @param context
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
165 * The context object.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
166 */
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents: 9288
diff changeset
167 static void appendMetaInformation(final Document doc, final Element root, final River river, final Gauge gauge, final Object context) {
9288
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
168 log.debug("MainValuesService.appendMetaInformation");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
169
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
170 final ElementCreator cr = new ElementCreator(doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
171
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
172 final Range range = gauge.getRange();
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 final Element riverEl = cr.create("river");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
175 cr.addAttr(riverEl, "name", river.getName());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
176
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
177 final Element gaugeEl = cr.create("gauge");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
178 cr.addAttr(gaugeEl, "name", gauge.getName());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
179 cr.addAttr(gaugeEl, "from", range.getA().toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
180 cr.addAttr(gaugeEl, "to", range.getB().toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
181
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
182 root.appendChild(riverEl);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
183 root.appendChild(gaugeEl);
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
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
186 /** Checks i a main value has an official associated, */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
187 private static boolean hasOfficialLine(final NamedMainValue nmv, final Integer riverId) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
188 for (final OfficialLine ol : nmv.getOfficialLines()) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
189 if (ol.getWstColumn().getWst().getRiver().getId().equals(riverId)) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
190 return true;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
191 }
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 return false;
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
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
196 /** Append xml representation of main values to document. */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
197 private void appendMainValues(final Document doc, final Element root, final List<MainValue> mainValues, final Integer riverId, final Object context) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
198 log.debug("MainValuesService.appendMainValues");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
199
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
200 final ElementCreator cr = new ElementCreator(doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
201
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
202 final Element list = cr.create("mainvalues");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
203
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
204 for (final MainValue mainValue : mainValues) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
205 final Element newEl = buildMainValueElement(doc, mainValue, riverId, context);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
206
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
207 if (newEl != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
208 list.appendChild(newEl);
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 }
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 root.appendChild(list);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
213 }
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 * This method builds a concrete mainvalue element. This element consists of
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
217 * three attributes: the value, its name and its type.
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 * @param doc
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
220 * The owner document.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
221 * @param mainValue
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
222 * The mainvalue.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
223 * @param context
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
224 * The context object.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
225 *
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
226 * @return a mainvalue element.
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
227 */
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
228 private Element buildMainValueElement(final Document doc, final MainValue mainValue, final Integer riverId, final Object context) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
229 final ElementCreator cr = new ElementCreator(doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX);
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
230
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
231 final NamedMainValue namedMainValue = mainValue.getMainValue();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
232 final MainValueType mainValueType = namedMainValue.getType();
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
233
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
234 final Element el = cr.create("mainvalue");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
235
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
236 cr.addAttr(el, "value", mainValue.getValue().toString());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
237 cr.addAttr(el, "name", namedMainValue.getName());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
238 cr.addAttr(el, "type", mainValueType.getName());
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
239 if (mainValue.getTimeInterval() != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
240 if (mainValue.getTimeInterval().getStartTime() != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
241 cr.addAttr(el, "starttime", Long.toString(mainValue.getTimeInterval().getStartTime().getTime()));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
242 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
243 if (mainValue.getTimeInterval().getStopTime() != null) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
244 cr.addAttr(el, "stoptime", Long.toString(mainValue.getTimeInterval().getStopTime().getTime()));
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
245 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
246 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
247
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
248 if (hasOfficialLine(namedMainValue, riverId)) {
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
249 cr.addAttr(el, "official", "true");
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
250 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
251
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
252 return el;
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
253 }
82c67b859aa7 bundu.bezugswst worklflow incl. service impl for mainValues to be calculated
gernotbelger
parents:
diff changeset
254 }

http://dive4elements.wald.intevation.org