Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java Mon Oct 29 13:09:16 2012 +0100 @@ -0,0 +1,92 @@ +package de.intevation.flys.artifacts.services; + +import java.util.Calendar; + +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.artifacts.model.minfo.SedimentLoad; +import de.intevation.flys.artifacts.model.minfo.SedimentLoadFactory; + + +public class SedimentLoadInfoService +extends FLYSService +{ + /** The logger used in this service. */ + private static Logger logger = Logger.getLogger(SedimentLoadInfoService.class); + + public static final String RIVER_XPATH = "/art:river/text()"; + public static final String TYPE_XPATH = "/art:river/art:type/text()"; + public static final String FROM_XPATH = "/art:river/art:location/art:from/text()"; + public static final String TO_XPATH = "/art:river/art:location/art:to/text()"; + + @Override + protected Document doProcess( + Document data, + GlobalContext globalContext, + CallMeta callMeta) { + String river = XMLUtils.xpathString( + data, + RIVER_XPATH, + ArtifactNamespaceContext.INSTANCE); + String type = XMLUtils.xpathString( + data, + TYPE_XPATH, + ArtifactNamespaceContext.INSTANCE); + String from = XMLUtils.xpathString( + data, + FROM_XPATH, + ArtifactNamespaceContext.INSTANCE); + String to = XMLUtils.xpathString( + data, + TO_XPATH, + ArtifactNamespaceContext.INSTANCE); + double f, t; + try { + f = Double.parseDouble(from); + t = Double.parseDouble(to); + } + catch (NumberFormatException nfe) { + logger.warn("Invalid locations. Cannot return sediment loads."); + return XMLUtils.newDocument(); + } + + SedimentLoad[] loads = SedimentLoadFactory.getLoads(river, type, f, t); + return buildDocument(loads); + } + + protected Document buildDocument(SedimentLoad[] loads) { + Document result = XMLUtils.newDocument(); + Element all = result.createElement("sedimentloads"); + for (SedimentLoad sl : loads) { + Element load = result.createElement("sedimentload"); + load.setAttribute("description", sl.getDescription()); + if (sl.isEpoch()) { + Calendar calendarS = Calendar.getInstance(); + calendarS.setTime(sl.getStart()); + Calendar calendarE = Calendar.getInstance(); + calendarE.setTime(sl.getEnd()); + load.setAttribute( + "date", + calendarS.get(Calendar.YEAR) + + " - " + + calendarE.get(Calendar.YEAR)); + } + else { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sl.getStart()); + load.setAttribute( + "date", + String.valueOf(calendar.get(Calendar.YEAR))); + } + all.appendChild(load); + } + result.appendChild(all); + return result; + } +}