comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MeasurementStationInfoService.java @ 4246:cac0878b4a92

Add a service to return measurement stations of a river The new service returns an xml representation of the measurement stations on a river.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 24 Oct 2012 15:57:48 +0200
parents
children 5da024c2af62
comparison
equal deleted inserted replaced
4245:6302db90b63f 4246:cac0878b4a92
1 package de.intevation.flys.artifacts.services;
2
3 import java.math.BigDecimal;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7
8 import org.w3c.dom.Document;
9 import org.w3c.dom.Element;
10
11 import de.intevation.artifacts.CallMeta;
12 import de.intevation.artifacts.GlobalContext;
13 import de.intevation.artifacts.common.ArtifactNamespaceContext;
14 import de.intevation.artifacts.common.utils.XMLUtils;
15
16 import de.intevation.flys.artifacts.model.RiverFactory;
17 import de.intevation.flys.model.MeasurementStation;
18 import de.intevation.flys.model.Range;
19 import de.intevation.flys.model.River;
20
21 /**
22 * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a>
23 */
24 public class MeasurementStationInfoService extends FLYSService {
25
26 private static final Logger logger = Logger.getLogger(
27 GaugeOverviewInfoService.class);
28
29 public static final String RIVER_XPATH = "/art:river/text()";
30
31 @Override
32 public Document doProcess(
33 Document data,
34 GlobalContext globalContext,
35 CallMeta callMeta
36 ) {
37 logger.debug("MeasurementStationInfoService.process");
38
39 String riverstr = XMLUtils.xpathString(
40 data, RIVER_XPATH, ArtifactNamespaceContext.INSTANCE);
41
42 River river = RiverFactory.getRiver(riverstr);
43
44 Document result = XMLUtils.newDocument();
45
46 if (river == null) {
47 logger.warn("No river with name " + riverstr + " found.");
48 return result;
49 }
50
51 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
52 result,
53 ArtifactNamespaceContext.NAMESPACE_URI,
54 ArtifactNamespaceContext.NAMESPACE_PREFIX);
55
56 Element go = ec.create("masurement-station-info");
57
58 double[] minmax = river.determineMinMaxDistance();
59 double[] minmaxq = river.determineMinMaxQ();
60
61 Element r = ec.create("river");
62 ec.addAttr(r, "name", river.getName(), true);
63 ec.addAttr(r, "start", Double.toString(minmax[0]), true);
64 ec.addAttr(r, "end", Double.toString(minmax[1]), true);
65 ec.addAttr(r, "wstunit", river.getWstUnit().getName(), true);
66 ec.addAttr(r, "kmup", Boolean.toString(river.getKmUp()), true);
67 ec.addAttr(r, "minq", Double.toString(minmaxq[0]), true);
68 ec.addAttr(r, "maxq", Double.toString(minmaxq[1]), true);
69 ec.addAttr(r, "official", Long.toString(river.getOfficialNumber()),
70 true);
71
72 Element egs = ec.create("measurement-stations");
73
74 List<MeasurementStation> mstations = river.getMeasurementStations();
75
76 if (logger.isDebugEnabled()) {
77 logger.debug("Loaded stations: " + mstations);
78 }
79
80 for (MeasurementStation mstation: mstations) {
81 Element eg = ec.create("measurement-station");
82
83 String name = mstation.getName();
84 if (name != null) {
85 ec.addAttr(eg, "name", name, true);
86 }
87
88 String type = mstation.getMeasurementType();
89 if (type != null) {
90 ec.addAttr(eg, "type", type, true);
91 }
92
93 String riverside = mstation.getRiverside();
94 if (riverside != null) {
95 ec.addAttr(eg, "riverside", riverside, true);
96 }
97
98 Double station = mstation.getStation();
99 if (station != null) {
100 ec.addAttr(eg, "station", Double.toString(station), true);
101 }
102
103 Range range = mstation.getRange();
104 if (range != null) {
105 BigDecimal a = range.getA();
106 if (a != null) {
107 ec.addAttr(eg, "start", getStringValue(a), true);
108 }
109
110 BigDecimal b = range.getB();
111 if (b != null) {
112 ec.addAttr(eg, "end", getStringValue(b), true);
113 }
114 }
115
116 egs.appendChild(eg);
117 }
118
119 go.appendChild(r);
120 go.appendChild(egs);
121 result.appendChild(go);
122
123 return result;
124 }
125
126 /**
127 * Returns a Double as String from a BigDecimal value.
128 *
129 * If value is null an empty String is returned.
130 */
131 private static String getStringValue(BigDecimal value) {
132 return value != null
133 ? Double.toString(value.doubleValue()) : "";
134 }
135 }

http://dive4elements.wald.intevation.org