comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java @ 3318:dbe2f85bf160

merged flys-artifacts/2.8
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:14:35 +0200
parents 4bd3d8bbb60c
children 0cc2c3d89a9d
comparison
equal deleted inserted replaced
2987:98c7a46ec5ae 3318:dbe2f85bf160
1 package de.intevation.flys.artifacts.services;
2
3 import java.util.List;
4 import java.util.Date;
5 import java.util.Calendar;
6 import java.util.GregorianCalendar;
7
8 import org.apache.log4j.Logger;
9
10 import org.w3c.dom.Document;
11 import org.w3c.dom.Element;
12
13 import de.intevation.artifacts.CallMeta;
14 import de.intevation.artifacts.GlobalContext;
15
16 import de.intevation.artifacts.common.ArtifactNamespaceContext;
17 import de.intevation.artifacts.common.utils.XMLUtils;
18
19 import de.intevation.flys.model.Gauge;
20 import de.intevation.flys.model.DischargeTable;
21 import de.intevation.flys.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
47 String gaugeNumber = XMLUtils.xpathString(
48 data, GAUGE_XPATH, ArtifactNamespaceContext.INSTANCE);
49
50 if(gaugeNumber == null ||
51 (gaugeNumber = gaugeNumber.trim()).length() == 0) {
52 logger.warn("No gauge specified. Cannot return discharge info.");
53 return XMLUtils.newDocument();
54 }
55
56 logger.debug("Getting discharge for gauge: " + gaugeNumber);
57
58 long gn;
59 try {
60 gn = Long.parseLong(gaugeNumber);
61 }
62 catch (NumberFormatException nfe) {
63 logger.warn("Invalid gauge number. Cannot return discharg info.");
64 return XMLUtils.newDocument();
65 }
66
67 Gauge gauge = Gauge.getGaugeByOfficialNumber(gn);
68
69 logger.debug("Found gauge: " + gauge.getName());
70
71 return buildDocument(gauge);
72 }
73
74
75 protected Document buildDocument(Gauge gauge) {
76 Document result = XMLUtils.newDocument();
77
78 List<DischargeTable> tables =gauge.getDischargeTables();
79
80 Element all = result.createElement("discharges");
81 for (DischargeTable dt: tables) {
82 if (dt.getKind() == Gauge.MASTER_DISCHARGE_TABLE) {
83 continue;
84 }
85
86 Element discharge = result.createElement("discharge");
87 discharge.setAttribute("description", dt.getDescription());
88
89 // Get time interval.
90 TimeInterval ti = dt.getTimeInterval();
91
92 if (ti == null) {
93 logger.warn("DischargeTable has no TimeInterval set!");
94 continue;
95 }
96
97 Date startTime = ti.getStartTime();
98 Date stopTime = ti.getStopTime();
99
100 // Get the year for start end end date.
101 int startYear;
102 int stopYear;
103 Calendar c = new GregorianCalendar();
104 if (startTime != null) {
105 c.setTime(startTime);
106 startYear = c.get(Calendar.YEAR);
107 }
108 else {
109 startYear = -1;
110 }
111 if (stopTime != null) {
112 c.setTime(stopTime);
113 stopYear = c.get(Calendar.YEAR);
114 }
115 else {
116 stopYear = -1;
117 }
118
119 discharge.setAttribute("start", String.valueOf(startYear));
120 discharge.setAttribute("end", String.valueOf(stopYear));
121
122 all.appendChild(discharge);
123 }
124 result.appendChild(all);
125 return result;
126 }
127 }
128 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org