diff artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityPeriodsSelect.java @ 8637:5a5331dd3e8d

(issue1755) Validate selected periods and ranges.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 27 Mar 2015 16:55:58 +0100
parents 362abb64e897
children 97d60b0afe24
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityPeriodsSelect.java	Fri Mar 27 16:54:56 2015 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityPeriodsSelect.java	Fri Mar 27 16:55:58 2015 +0100
@@ -11,6 +11,7 @@
 import java.util.List;
 import java.util.Date;
 import java.util.TreeSet;
+import java.text.DateFormat;
 
 import org.apache.log4j.Logger;
 
@@ -19,12 +20,16 @@
 import org.w3c.dom.Element;
 
 import org.dive4elements.river.artifacts.access.RangeAccess;
+import org.dive4elements.river.artifacts.access.BedQualityAccess;
 import org.dive4elements.river.artifacts.D4EArtifact;
 import org.dive4elements.river.artifacts.model.minfo.BedOverview;
 import org.dive4elements.river.artifacts.model.minfo.BedOverviewFactory;
 import org.dive4elements.river.artifacts.model.minfo.BedloadOverview;
 import org.dive4elements.river.artifacts.model.minfo.BedloadOverviewFactory;
+import org.dive4elements.river.artifacts.model.DateRange;
+import org.dive4elements.river.artifacts.resources.Resources;
 
+import org.dive4elements.river.utils.Formatter;
 import org.dive4elements.river.utils.KMIndex;
 
 import org.dive4elements.artifacts.common.utils.XMLUtils;
@@ -39,6 +44,11 @@
     /** The log used in this class. */
     private static Logger log = Logger.getLogger(BedQualityPeriodsSelect.class);
 
+    private static final String I18N_NO_DATA =
+        "state.minfo.bed.error.no_data";
+
+    private static final String I18N_NO_DATA_FOR_PERIOD =
+        "state.minfo.bed.error.no_data_for_period";
 
     /**
      * The default constructor that initializes an empty State object.
@@ -108,6 +118,36 @@
     }
 
     @Override
+    public void validate(Artifact artifact, CallContext context)
+    throws IllegalArgumentException {
+        D4EArtifact arti = (D4EArtifact) artifact;
+        BedQualityAccess access = new BedQualityAccess(arti, context);
+
+        Long[] minMax = getDataMinMaxDate(artifact);
+        if (minMax == null) {
+            throw new IllegalArgumentException(Resources.getMsg(context.getMeta(),
+                         I18N_NO_DATA,
+                         I18N_NO_DATA));
+        }
+
+        long min = minMax[0];
+        long max = minMax[1];
+        for (DateRange range: access.getDateRanges()) {
+            long a = range.getFrom().getTime();
+            long b = range.getFrom().getTime();
+            if ((a < min || a > max) &&
+                ( b < min || b > max)) {
+                DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy");
+                throw new IllegalArgumentException(Resources.getMsg(context.getMeta(),
+                             I18N_NO_DATA_FOR_PERIOD,
+                             I18N_NO_DATA_FOR_PERIOD,
+                             new Object[] {df.format(range.getFrom()),
+                                           df.format(range.getTo())}));
+            }
+        }
+    }
+
+    @Override
     protected String getUIProvider() {
         return "bedquality_periods_select";
     }

http://dive4elements.wald.intevation.org