Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesService.java @ 9404:bc9a45d2b1fa
common time range for gauges incl. error messages
author | gernotbelger |
---|---|
date | Wed, 15 Aug 2018 13:59:09 +0200 |
parents | 6ebc9357550c |
children | 4cccbd32b680 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesService.java Wed Aug 15 13:22:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesService.java Wed Aug 15 13:59:09 2018 +0200 @@ -16,11 +16,7 @@ import java.util.Date; import java.util.List; -import org.dive4elements.artifacts.CallMeta; -import org.dive4elements.artifacts.GlobalContext; -import org.dive4elements.artifacts.common.ArtifactNamespaceContext; import org.dive4elements.artifacts.common.utils.DateUtils; -import org.dive4elements.artifacts.common.utils.XMLUtils; import org.dive4elements.river.backend.SessionHolder; import org.dive4elements.river.model.Gauge; import org.dive4elements.river.model.MainValue; @@ -34,7 +30,6 @@ import org.dive4elements.river.model.sinfo.DailyDischargeValue.OrderByField; import org.dive4elements.river.utils.DoubleUtil; import org.hibernate.Session; -import org.w3c.dom.Document; import gnu.trove.TDoubleArrayList; @@ -44,80 +39,14 @@ * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ -public class DynamicMainValuesService extends AbstractMainValuesService { +public class DynamicMainValuesService extends AbstractDynamicMainValuesService { private static final long serialVersionUID = 1L; - private static final String XPATH_START_YEAR = "/art:mainvalues/art:startYear/text()"; - - private static final String XPATH_END_YEAR = "/art:mainvalues/art:endYear/text()"; - - @Override - public Document doProcess(final Document data, final GlobalContext context, final CallMeta callMeta) { - try { - - final River river = getRequestedRiver(data); - final Gauge gauge = getRequestedGauge(data, river); - final Date startTime = getRequestedStartYear(data); - final Date endTime = getRequestedEndYear(data); - - final List<MainValue> mainValues = getMainValues(river, gauge, startTime, endTime); - - return buildDocument(river, gauge, mainValues, context); - } - catch (final MainValuesServiceException e) { - // e.printStackTrace(); - return error(e.getMessage()); - } - catch (final Exception e) { - e.printStackTrace(); - return error(e.getMessage()); - } - } - - private Date getRequestedStartYear(final Document data) throws MainValuesServiceException { - - final String startStr = XMLUtils.xpathString(data, XPATH_START_YEAR, ArtifactNamespaceContext.INSTANCE); - - if (startStr == null) - throw new MainValuesServiceException("no start year"); - - try { - final int year = Integer.parseInt(startStr); - final Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set(year, 0, 1); - return cal.getTime(); - } - catch (final NumberFormatException e) { - e.printStackTrace(); - throw new MainValuesServiceException("invalid start year"); - } - } - - private Date getRequestedEndYear(final Document data) throws MainValuesServiceException { - - final String endStr = XMLUtils.xpathString(data, XPATH_END_YEAR, ArtifactNamespaceContext.INSTANCE); - - if (endStr == null) - throw new MainValuesServiceException("no end year"); - - try { - final int year = Integer.parseInt(endStr); - final Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set(year, 11, 31); - return cal.getTime(); - } - catch (final NumberFormatException e) { - e.printStackTrace(); - throw new MainValuesServiceException("invalid end year"); - } - } - /** * Computes a gauge's main values for a period of time based on its daily discharges stored in the database */ + @Override protected List<MainValue> getMainValues(final River river, final Gauge gauge, final Date startTime, final Date endTime) throws MainValuesServiceException { final List<MainValue> mainValues = new ArrayList<>(); @@ -135,7 +64,7 @@ final List<DailyDischargeValue> qdvs = DailyDischargeValue.getValues(gauge, startTime, endTime, OrderByField.DAY); if (qdvs.isEmpty()) throw new MainValuesServiceException("no daily discharge values for gauge " + gauge.getName() + " in the requested time period"); - // return; // TODO Fehlermeldung + // return; // Build yearly aggregates final TDoubleArrayList mnqs = new TDoubleArrayList(); @@ -152,8 +81,7 @@ mqcnt++; if (i == qdvs.size() - 1) mqs.set(j, mqs.get(j) / mqcnt); - } - else { + } else { // Complete mq aggregation if (mqcnt >= 1) { mqs.set(j, mqs.get(j) / mqcnt);