Mercurial > dive4elements > river
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 : |