annotate artifacts/src/main/java/org/dive4elements/river/artifacts/services/AbstractDynamicMainValuesService.java @ 9404:bc9a45d2b1fa

common time range for gauges incl. error messages
author gernotbelger
date Wed, 15 Aug 2018 13:59:09 +0200
parents
children
rev   line source
9404
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
3 *
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
7 */
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
8
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.artifacts.services;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
10
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
11 import java.util.Date;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
12 import java.util.List;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
13
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
14 import org.dive4elements.artifacts.CallMeta;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
15 import org.dive4elements.artifacts.GlobalContext;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
16 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
17 import org.dive4elements.artifacts.common.utils.XMLUtils;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.model.Gauge;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.model.MainValue;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.model.River;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
21 import org.w3c.dom.Document;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
22
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
23 /**
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
24 * This service returns the main values of a river's gauge based on the start
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
25 * and end point of the river.
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
26 *
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
27 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
28 */
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
29 abstract public class AbstractDynamicMainValuesService extends AbstractMainValuesService {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
30
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
31 private static final long serialVersionUID = 1L;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
32
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
33 @Override
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
34 public Document doProcess(final Document data, final GlobalContext context, final CallMeta callMeta) {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
35 try {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
36
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
37 final River river = getRequestedRiver(data, "/art:mainvalues/art:river/text()");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
38 final Gauge gauge = getRequestedGauge(data, river);
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
39 final Date startTime = getRequestedStartDate(data, "/art:mainvalues/art:startDate/text()");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
40 final Date endTime = getRequestedEndDate(data, "/art:mainvalues/art:endDate/text()");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
41
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
42 final List<MainValue> mainValues = getMainValues(river, gauge, startTime, endTime);
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
43
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
44 return buildDocument(river, gauge, mainValues, context);
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
45 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
46 catch (final MainValuesServiceException e) {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
47 // e.printStackTrace();
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
48 return error(e.getMessage());
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
49 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
50 catch (final Exception e) {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
51 e.printStackTrace();
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
52 return error(e.getMessage());
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
53 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
54 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
55
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
56 public static final Date getRequestedStartDate(final Document data, final String XPATH_END_YEAR) throws MainValuesServiceException {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
57
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
58 final String startStr = XMLUtils.xpathString(data, XPATH_END_YEAR, ArtifactNamespaceContext.INSTANCE);
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
59
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
60 if (startStr == null)
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
61 throw new MainValuesServiceException("no start date");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
62
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
63 try {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
64 return new Date(Long.parseLong(startStr));
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
65 // FIXME: timezone? probably must match timezone of database
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
66 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
67 catch (final NumberFormatException e) {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
68 e.printStackTrace();
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
69 throw new MainValuesServiceException("invalid start date");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
70 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
71 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
72
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
73 public static final Date getRequestedEndDate(final Document data, final String XPATH_END_DATE) throws MainValuesServiceException {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
74
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
75 final String endStr = XMLUtils.xpathString(data, XPATH_END_DATE, ArtifactNamespaceContext.INSTANCE);
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
76
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
77 if (endStr == null)
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
78 throw new MainValuesServiceException("no end date");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
79
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
80 try {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
81 return new Date(Long.parseLong(endStr));
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
82 // FIXME: timezone? probably must match timezone of database
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
83 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
84 catch (final NumberFormatException e) {
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
85 e.printStackTrace();
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
86 throw new MainValuesServiceException("invalid end date");
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
87 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
88 }
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
89
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
90 /**
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
91 * Computes a gauge's main values for a period of time based on its daily discharges stored in the database
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
92 */
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
93 protected abstract List<MainValue> getMainValues(final River river, final Gauge gauge, final Date startTime, final Date endTime)
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
94 throws MainValuesServiceException;
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
95
bc9a45d2b1fa common time range for gauges incl. error messages
gernotbelger
parents:
diff changeset
96 }

http://dive4elements.wald.intevation.org