Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java @ 8053:72760ca2fc2b
Sediment load: dispatch calculation modes.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 18 Jul 2014 11:58:59 +0200 |
parents | 1de6256c9786 |
children | cd35b76f1ef8 |
line wrap: on
line source
/* 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(int startYear, int endYear) { this(firstJan(Math.min(startYear, endYear)), lastDec(Math.max(startYear, endYear))); } private static Date firstJan(int year) { Calendar cal = Calendar.getInstance(); cal.set(year, 1, 1, 0, 0, 0); return cal.getTime(); } private static Date lastDec(int year) { Calendar cal = Calendar.getInstance(); cal.set(year, 12, 31, 23, 59, 59); return cal.getTime(); } 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 :