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