comparison flys-artifacts/src/main/java/org/dive4elements/river/artifacts/services/DischargeInfoService.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java@5b8919ef601d
children
comparison
equal deleted inserted replaced
5830:160f53ee0870 5831:bd047b71ab37
1 package org.dive4elements.river.artifacts.services;
2
3 import java.util.Collections;
4 import java.util.List;
5 import java.util.Date;
6
7 import org.apache.log4j.Logger;
8
9 import org.w3c.dom.Document;
10 import org.w3c.dom.Element;
11
12 import org.dive4elements.artifacts.CallMeta;
13 import org.dive4elements.artifacts.GlobalContext;
14
15 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
16 import org.dive4elements.artifacts.common.utils.XMLUtils;
17
18 import org.dive4elements.river.artifacts.model.DischargeTables;
19 import org.dive4elements.river.model.Gauge;
20 import org.dive4elements.river.model.DischargeTable;
21 import org.dive4elements.river.model.TimeInterval;
22
23 /**
24 * This service provides information about discharges at a defined gauge.
25 *
26 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
27 */
28 public class DischargeInfoService extends FLYSService {
29
30 /** The logger used in this service. */
31 private static Logger logger = Logger.getLogger(DischargeInfoService.class);
32
33 public static final String GAUGE_XPATH = "/art:gauge/text()";
34
35 public DischargeInfoService() {
36 }
37
38
39 @Override
40 public Document doProcess(
41 Document data,
42 GlobalContext globalContext,
43 CallMeta callMeta
44 ) {
45 logger.debug("DischargeInfoService.process");
46 logger.debug(XMLUtils.toString(data));
47
48 String gaugeNumber = XMLUtils.xpathString(
49 data, GAUGE_XPATH, ArtifactNamespaceContext.INSTANCE);
50
51 if(gaugeNumber == null ||
52 (gaugeNumber = gaugeNumber.trim()).length() == 0) {
53 logger.warn("No gauge specified. Cannot return discharge info.");
54 return XMLUtils.newDocument();
55 }
56
57 logger.debug("Getting discharge for gauge: " + gaugeNumber);
58
59 long gn;
60 try {
61 gn = Long.parseLong(gaugeNumber);
62 }
63 catch (NumberFormatException nfe) {
64 logger.warn("Invalid gauge number. Cannot return discharg info.");
65 return XMLUtils.newDocument();
66 }
67
68 Gauge gauge = Gauge.getGaugeByOfficialNumber(gn);
69
70 logger.debug("Found gauge: " + gauge.getName());
71
72 return buildDocument(gauge);
73 }
74
75
76 protected Document buildDocument(Gauge gauge) {
77 Document result = XMLUtils.newDocument();
78
79 List<DischargeTable> tables =gauge.getDischargeTables();
80 Collections.sort(tables);
81
82 Element all = result.createElement("discharges");
83 for (DischargeTable dt: tables) {
84 Element discharge = result.createElement("discharge");
85 discharge.setAttribute("description", dt.getDescription());
86
87 // Get time interval.
88 TimeInterval ti = dt.getTimeInterval();
89
90 if (ti == null) {
91 logger.warn("DischargeTable has no TimeInterval set!");
92 continue;
93 }
94
95 Date startTime = ti.getStartTime();
96 Date stopTime = ti.getStopTime();
97
98 if (startTime != null) {
99 discharge.setAttribute("start", String.valueOf(startTime.getTime()));
100 }
101 else {
102 continue;
103 }
104
105 if (stopTime != null && dt.getKind() != DischargeTables.MASTER) {
106 discharge.setAttribute("end", String.valueOf(stopTime.getTime()));
107 }
108 else if (dt.getKind() == DischargeTables.MASTER) {
109 long now = System.currentTimeMillis();
110 discharge.setAttribute("end", String.valueOf(now));
111 }
112 else {
113 continue;
114 }
115
116 all.appendChild(discharge);
117 }
118 result.appendChild(all);
119 return result;
120 }
121 }
122 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org