[PATCH] Added filters for loaded sediment data values. Year, Epochs (time ranges), And and Or
Wald Commits
scm-commit at wald.intevation.org
Wed Jul 16 11:55:50 CEST 2014
# HG changeset patch
# User Sascha L. Teichmann <teichmann at intevation.de>
# Date 1405504546 -7200
# Node ID 1de6256c9786eeb70474e9c14d8d35bedc7ec8e9
# Parent 17542d100e75fcd5fbd26a1019be433447322528
Added filters for loaded sediment data values. Year, Epochs (time ranges), And and Or.
diff -r 17542d100e75 -r 1de6256c9786 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java Wed Jul 16 11:55:46 2014 +0200
@@ -0,0 +1,121 @@
+/* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.model.minfo;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Value;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Value.Filter;
+
+public final class SedimentLoadDataValueFilter {
+
+ private SedimentLoadDataValueFilter() {
+ }
+
+ public static abstract class Composite implements Filter {
+ protected List<Filter> filters;
+
+ public Composite() {
+ filters = new ArrayList<Filter>();
+ }
+
+ public void add(Filter filter) {
+ filters.add(filter);
+ }
+ }
+
+ public static final class And extends Composite {
+
+ public And() {
+ }
+
+ @Override
+ public boolean accept(Value value) {
+ for (Filter filter: filters) {
+ if (!filter.accept(value)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ } // class And
+
+ public static final class Or extends Composite {
+
+ public Or() {
+ }
+
+ @Override
+ public boolean accept(Value value) {
+ for (Filter filter: filters) {
+ if (filter.accept(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ } // class Or
+
+ public static final class Year implements Filter {
+
+ private int year;
+
+ public Year(int year) {
+ this.year = year;
+ }
+
+ @Override
+ public boolean accept(Value value) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(value.getLoad().getStartTime());
+ return cal.get(Calendar.YEAR) == year;
+ }
+ } // class Year
+
+ public static final class IsEpoch implements Filter {
+
+ public static final IsEpoch INSTANCE = new IsEpoch();
+
+ private IsEpoch() {
+ }
+
+ @Override
+ public boolean accept(Value value) {
+ return value.getLoad().isEpoch();
+ }
+ } // class Year
+
+ public static final class TimeRangeIntersects implements Filter {
+
+ private Date a;
+ private Date b;
+
+ public TimeRangeIntersects(Date a, Date b) {
+ if (a.after(b)) {
+ this.b = a;
+ this.a = b;
+ } else {
+ this.a = a;
+ this.b = b;
+ }
+ }
+ @Override
+ public boolean accept(Value value) {
+ Date c = value.getLoad().getStartTime();
+ Date d = value.getLoad().getStopTime();
+ return d == null
+ ? c.compareTo(a) >= 0 && c.compareTo(b) <= 0
+ : !(a.after(d) || c.after(b));
+ }
+ } // class TimeRangeIntersects
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+
More information about the Dive4Elements-commits
mailing list