# HG changeset patch # User Andre Heinecke # Date 1427471758 -3600 # Node ID 5a5331dd3e8dda8e0119716178d15b2ea9447590 # Parent 7d1a32a543cb5d9b988980efaa8d93ec8fadb9d5 (issue1755) Validate selected periods and ranges. diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedQualityAccess.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedQualityAccess.java Fri Mar 27 16:54:56 2015 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedQualityAccess.java Fri Mar 27 16:55:58 2015 +0100 @@ -68,6 +68,9 @@ private List extractRanges(String dateString) { List list = new LinkedList(); + if (dateString == null) { + return list; + } String[] dates = dateString.split(";"); for (String s : dates) { String[] pair = s.split(","); diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityPeriodsSelect.java --- 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"; } diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Fri Mar 27 16:54:56 2015 +0100 +++ b/artifacts/src/main/resources/messages.properties Fri Mar 27 16:55:58 2015 +0100 @@ -55,9 +55,12 @@ state.minfo.bed.difference_select=Differences state.minfo.year=Year state.minfo.epoch=Epoch +state.minfo.bed.distance = Range selection state.minfo.bed.location = Location/Distance state.minfo.bed.periods = Periods state.minfo.bed.char_diameter = Characteristic Diameter +state.minfo.bed.error.no_data = No data found for selected range. +state.minfo.bed.error.no_data_for_period = No data found for period: {0} - {1}. state.minfo.soundings = Choose Soundings state.minfo.sediment.load.location = Range state.minfo.sediment.load.year_epoch = Year/Epoch diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Fri Mar 27 16:54:56 2015 +0100 +++ b/artifacts/src/main/resources/messages_de.properties Fri Mar 27 16:55:58 2015 +0100 @@ -55,9 +55,12 @@ state.minfo.bed.difference_select=Differenzen state.minfo.year=Jahr state.minfo.epoch=Epoche +state.minfo.bed.distance = Wahl der Berechnungsstrecke state.minfo.bed.location = Ort(e)/Strecke state.minfo.bed.periods = Zeitraum/Zeitr\u00e4ume state.minfo.bed.char_diameter = Charakteristischer Durchmesser +state.minfo.bed.error.no_data = F\u00fcr die gew\u00e4hlte Strecke liegen keine Daten vor. +state.minfo.bed.error.no_data_for_period = F\u00fcr den Zeitraum {0} - {1} liegen keine Daten vor. state.minfo.soundings = Wahl der Peilungen state.minfo.sediment.load.location = Berechnungsstrecke state.minfo.sediment.load.year_epoch = Jahr/Zeitraum diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/resources/messages_de_DE.properties --- a/artifacts/src/main/resources/messages_de_DE.properties Fri Mar 27 16:54:56 2015 +0100 +++ b/artifacts/src/main/resources/messages_de_DE.properties Fri Mar 27 16:55:58 2015 +0100 @@ -56,8 +56,11 @@ state.minfo.year=Jahr state.minfo.epoch=Epoche state.minfo.bed.location = Ort(e)/Strecke +state.minfo.bed.distance = Wahl der Berechnungsstrecke state.minfo.bed.periods = Zeitraum/Zeitr\u00e4ume state.minfo.bed.char_diameter = Charakteristischer Durchmesser +state.minfo.bed.error.no_data = F\u00fcr die gew\u00e4hlte Strecke liegen keine Daten vor. +state.minfo.bed.error.no_data_for_period = F\u00fcr den Zeitraum {0} - {1} liegen keine Daten vor. state.minfo.soundings = Wahl der Peilungen state.minfo.sediment.load.location = Berechnungsstrecke state.minfo.sediment.load.year_epoch = Jahr/Zeitraum diff -r 7d1a32a543cb -r 5a5331dd3e8d artifacts/src/main/resources/messages_en.properties --- a/artifacts/src/main/resources/messages_en.properties Fri Mar 27 16:54:56 2015 +0100 +++ b/artifacts/src/main/resources/messages_en.properties Fri Mar 27 16:55:58 2015 +0100 @@ -56,8 +56,11 @@ state.minfo.year=Year state.minfo.epoch=Epoch state.minfo.bed.location = Location/Distance +state.minfo.bed.distance = Range selection state.minfo.bed.periods = Periods state.minfo.bed.char_diameter = Characteristic Diameter +state.minfo.bed.error.no_data = No data found for selected range. +state.minfo.bed.error.no_data_for_period = No data found for period: {0} - {1}. state.minfo.soundings = Choose Soundings state.minfo.sediment.load.location = Range state.minfo.sediment.load.year_epoch = Year/Epoch