# HG changeset patch # User Raimund Renkert # Date 1351512556 -3600 # Node ID 6d44914b2dd4ee80138d30fec0f48b9e29400333 # Parent 3051bc28ac43dbd6a653d68ec9ecb754a58758f7 Added serverside service for sediment load info. The service presents an overview for sediment loads. diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/doc/conf/artifacts/minfo.xml --- a/flys-artifacts/doc/conf/artifacts/minfo.xml Mon Oct 29 12:14:50 2012 +0100 +++ b/flys-artifacts/doc/conf/artifacts/minfo.xml Mon Oct 29 13:09:16 2012 +0100 @@ -364,7 +364,7 @@ - + diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Mon Oct 29 12:14:50 2012 +0100 +++ b/flys-artifacts/doc/conf/conf.xml Mon Oct 29 13:09:16 2012 +0100 @@ -210,6 +210,10 @@ name="measurementstationinfo" service="de.intevation.flys.artifacts.services.MeasurementStationInfoService" description="Returns an overview of the measurement stations of a given river.">de.intevation.artifactdatabase.DefaultServiceFactory + de.intevation.artifactdatabase.DefaultServiceFactory diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java --- /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; + } +}