gernotbelger@9227: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9227: * Software engineering by gernotbelger@9227: * Björnsen Beratende Ingenieure GmbH gernotbelger@9227: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9227: * gernotbelger@9227: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9227: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9227: * documentation coming with Dive4Elements River for details. gernotbelger@9227: */ gernotbelger@9227: package org.dive4elements.river.client.client.ui.sinfo; gernotbelger@9227: gernotbelger@9227: import org.dive4elements.river.client.client.ui.DatacageWidget.DatacageFilter; gernotbelger@9227: import org.dive4elements.river.client.shared.model.AttrList; gernotbelger@9227: import org.dive4elements.river.client.shared.model.DataCageNode; gernotbelger@9227: gernotbelger@9227: /** gernotbelger@9227: * @author Gernot Belger gernotbelger@9227: */ gernotbelger@9227: final class WaterlevelSoundingYearFilter implements DatacageFilter { gernotbelger@9227: gernotbelger@9227: private final int soundingYear; gernotbelger@9227: gernotbelger@9227: public WaterlevelSoundingYearFilter(final int soundingYear) { gernotbelger@9227: this.soundingYear = soundingYear; gernotbelger@9227: } gernotbelger@9227: gernotbelger@9227: @Override gernotbelger@9227: public boolean accept(final DataCageNode node) { gernotbelger@9227: gernotbelger@9227: final AttrList attributes = node.getAttributes(); gernotbelger@9231: gernotbelger@9231: if (isFolder(attributes)) gernotbelger@9227: return true; gernotbelger@9227: gernotbelger@9231: final String year = attributes.getValue(WaterlevelSoundingSelectionController.ATTRIBUTE_YEAR); gernotbelger@9231: final Integer waterlevelYear = parseYear(year); gernotbelger@9227: if (waterlevelYear == null) { gernotbelger@9227: // should never happen, we should only show waterlevels that have a year gernotbelger@9227: return false; gernotbelger@9227: } gernotbelger@9227: gernotbelger@9227: final int diff = Math.abs(this.soundingYear - waterlevelYear); gernotbelger@9227: gernotbelger@9227: return diff <= getMaxYearDifference(); gernotbelger@9227: } gernotbelger@9227: gernotbelger@9227: private int getMaxYearDifference() { gernotbelger@9227: gernotbelger@9227: if (this.soundingYear < 1918) gernotbelger@9227: return 25; gernotbelger@9227: gernotbelger@9227: if (1918 <= this.soundingYear && this.soundingYear < 1958) gernotbelger@9227: return 12; gernotbelger@9227: gernotbelger@9227: if (1958 <= this.soundingYear && this.soundingYear < 1998) gernotbelger@9227: return 6; gernotbelger@9227: gernotbelger@9227: // > 1998 gernotbelger@9227: return 3; gernotbelger@9227: } gernotbelger@9227: gernotbelger@9231: static Integer parseYear(final String year) { gernotbelger@9227: gernotbelger@9227: if (year == null || year.trim().isEmpty()) gernotbelger@9227: return null; gernotbelger@9227: gernotbelger@9227: try { gernotbelger@9227: return Integer.valueOf(year); gernotbelger@9227: } gernotbelger@9227: catch (final NumberFormatException e) { gernotbelger@9227: e.printStackTrace(); gernotbelger@9227: return null; gernotbelger@9227: } gernotbelger@9227: } gernotbelger@9231: gernotbelger@9231: static boolean isFolder(final AttrList attributes) { gernotbelger@9231: if (attributes == null) gernotbelger@9231: return true; gernotbelger@9231: gernotbelger@9231: if (!attributes.hasAttribute("factory")) gernotbelger@9231: return true; gernotbelger@9231: gernotbelger@9231: return false; gernotbelger@9231: } gernotbelger@9227: }