[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