comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/RiverInfoService.java @ 4247:5da024c2af62

Refactor GaugeOverviewInfoService and MeasurementStationInfoService Refactor RiverInfoService out of GaugeOverviewInfoService and MeasurementStationInfoService to share common code of both classes in a base class.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 24 Oct 2012 16:36:59 +0200
parents
children
comparison
equal deleted inserted replaced
4246:cac0878b4a92 4247:5da024c2af62
1 package de.intevation.flys.artifacts.services;
2
3 import java.math.BigDecimal;
4
5 import org.apache.log4j.Logger;
6
7 import org.w3c.dom.Document;
8 import org.w3c.dom.Element;
9
10 import de.intevation.artifacts.CallMeta;
11 import de.intevation.artifacts.GlobalContext;
12 import de.intevation.artifacts.common.ArtifactNamespaceContext;
13 import de.intevation.artifacts.common.utils.XMLUtils;
14
15 import de.intevation.flys.artifacts.model.RiverFactory;
16 import de.intevation.flys.model.River;
17
18 /**
19 * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a>
20 */
21 public class RiverInfoService extends FLYSService {
22
23 private static final Logger logger = Logger.getLogger(
24 RiverInfoService.class);
25
26 protected static final String RIVER_XPATH = "/art:river/text()";
27
28 protected XMLUtils.ElementCreator ec;
29 protected River river;
30 protected Element riverele;
31
32 protected Document doProcess(
33 Document data,
34 GlobalContext globalContext,
35 CallMeta callMeta
36 ) {
37 String rivername = XMLUtils.xpathString(
38 data, RIVER_XPATH, ArtifactNamespaceContext.INSTANCE);
39
40 river = RiverFactory.getRiver(rivername);
41
42 Document result = XMLUtils.newDocument();
43
44 if (river == null) {
45 logger.warn("No river with name " + rivername + " found.");
46 return null;
47 }
48
49 ec = new XMLUtils.ElementCreator(
50 result,
51 ArtifactNamespaceContext.NAMESPACE_URI,
52 ArtifactNamespaceContext.NAMESPACE_PREFIX);
53
54 riverele = ec.create("river-info");
55
56 double[] minmax = river.determineMinMaxDistance();
57 double[] minmaxq = river.determineMinMaxQ();
58
59 Element r = ec.create("river");
60 ec.addAttr(r, "name", river.getName(), true);
61 ec.addAttr(r, "start", Double.toString(minmax[0]), true);
62 ec.addAttr(r, "end", Double.toString(minmax[1]), true);
63 ec.addAttr(r, "wstunit", river.getWstUnit().getName(), true);
64 ec.addAttr(r, "kmup", Boolean.toString(river.getKmUp()), true);
65 ec.addAttr(r, "minq", Double.toString(minmaxq[0]), true);
66 ec.addAttr(r, "maxq", Double.toString(minmaxq[1]), true);
67 ec.addAttr(r, "official", Long.toString(river.getOfficialNumber()),
68 true);
69
70 riverele.appendChild(r);
71 result.appendChild(riverele);
72
73 return result;
74 }
75
76 /**
77 * Returns a Double as String from a BigDecimal value.
78 *
79 * If value is null an empty String is returned.
80 */
81 protected static String getStringValue(BigDecimal value) {
82 return value != null
83 ? Double.toString(value.doubleValue()) : "";
84 }
85 }

http://dive4elements.wald.intevation.org