Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java @ 4297:6d44914b2dd4
Added serverside service for sediment load info.
The service presents an overview for sediment loads.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Mon, 29 Oct 2012 13:09:16 +0100 |
parents | |
children | b195fede1c3b |
comparison
equal
deleted
inserted
replaced
4296:3051bc28ac43 | 4297:6d44914b2dd4 |
---|---|
1 package de.intevation.flys.artifacts.services; | |
2 | |
3 import java.util.Calendar; | |
4 | |
5 import org.apache.log4j.Logger; | |
6 import org.w3c.dom.Document; | |
7 import org.w3c.dom.Element; | |
8 | |
9 import de.intevation.artifacts.ArtifactNamespaceContext; | |
10 import de.intevation.artifacts.CallMeta; | |
11 import de.intevation.artifacts.GlobalContext; | |
12 import de.intevation.artifacts.common.utils.XMLUtils; | |
13 import de.intevation.flys.artifacts.model.minfo.SedimentLoad; | |
14 import de.intevation.flys.artifacts.model.minfo.SedimentLoadFactory; | |
15 | |
16 | |
17 public class SedimentLoadInfoService | |
18 extends FLYSService | |
19 { | |
20 /** The logger used in this service. */ | |
21 private static Logger logger = Logger.getLogger(SedimentLoadInfoService.class); | |
22 | |
23 public static final String RIVER_XPATH = "/art:river/text()"; | |
24 public static final String TYPE_XPATH = "/art:river/art:type/text()"; | |
25 public static final String FROM_XPATH = "/art:river/art:location/art:from/text()"; | |
26 public static final String TO_XPATH = "/art:river/art:location/art:to/text()"; | |
27 | |
28 @Override | |
29 protected Document doProcess( | |
30 Document data, | |
31 GlobalContext globalContext, | |
32 CallMeta callMeta) { | |
33 String river = XMLUtils.xpathString( | |
34 data, | |
35 RIVER_XPATH, | |
36 ArtifactNamespaceContext.INSTANCE); | |
37 String type = XMLUtils.xpathString( | |
38 data, | |
39 TYPE_XPATH, | |
40 ArtifactNamespaceContext.INSTANCE); | |
41 String from = XMLUtils.xpathString( | |
42 data, | |
43 FROM_XPATH, | |
44 ArtifactNamespaceContext.INSTANCE); | |
45 String to = XMLUtils.xpathString( | |
46 data, | |
47 TO_XPATH, | |
48 ArtifactNamespaceContext.INSTANCE); | |
49 double f, t; | |
50 try { | |
51 f = Double.parseDouble(from); | |
52 t = Double.parseDouble(to); | |
53 } | |
54 catch (NumberFormatException nfe) { | |
55 logger.warn("Invalid locations. Cannot return sediment loads."); | |
56 return XMLUtils.newDocument(); | |
57 } | |
58 | |
59 SedimentLoad[] loads = SedimentLoadFactory.getLoads(river, type, f, t); | |
60 return buildDocument(loads); | |
61 } | |
62 | |
63 protected Document buildDocument(SedimentLoad[] loads) { | |
64 Document result = XMLUtils.newDocument(); | |
65 Element all = result.createElement("sedimentloads"); | |
66 for (SedimentLoad sl : loads) { | |
67 Element load = result.createElement("sedimentload"); | |
68 load.setAttribute("description", sl.getDescription()); | |
69 if (sl.isEpoch()) { | |
70 Calendar calendarS = Calendar.getInstance(); | |
71 calendarS.setTime(sl.getStart()); | |
72 Calendar calendarE = Calendar.getInstance(); | |
73 calendarE.setTime(sl.getEnd()); | |
74 load.setAttribute( | |
75 "date", | |
76 calendarS.get(Calendar.YEAR) + | |
77 " - " + | |
78 calendarE.get(Calendar.YEAR)); | |
79 } | |
80 else { | |
81 Calendar calendar = Calendar.getInstance(); | |
82 calendar.setTime(sl.getStart()); | |
83 load.setAttribute( | |
84 "date", | |
85 String.valueOf(calendar.get(Calendar.YEAR))); | |
86 } | |
87 all.appendChild(load); | |
88 } | |
89 result.appendChild(all); | |
90 return result; | |
91 } | |
92 } |