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 }

http://dive4elements.wald.intevation.org