Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/WaterlevelSoundingYearFilter.java @ 9611:8ed6c45136fa
#20 UI
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Wed, 09 Oct 2019 15:58:46 +0200 |
parents | 83ef08b5e1ac |
children |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * 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.client.client.ui.sinfo; import org.dive4elements.river.client.client.ui.DatacageWidget.DatacageFilter; import org.dive4elements.river.client.shared.model.AttrList; import org.dive4elements.river.client.shared.model.DataCageNode; /** * @author Gernot Belger */ final class WaterlevelSoundingYearFilter implements DatacageFilter { private final Integer soundingYear; /** * @param soundingYear If <code>null</code>, we do not check the distance to the waterlevel year, but still hide waterlevels without year */ public WaterlevelSoundingYearFilter(final Integer soundingYear) { this.soundingYear = soundingYear; } @Override public boolean accept(final DataCageNode node) { final AttrList attributes = node.getAttributes(); if (isFolder(attributes)) return true; final String year = attributes.getValue(WaterlevelSoundingSelectionController.ATTRIBUTE_YEAR); final Integer waterlevelYear = parseYear(year); if (waterlevelYear == null) { // should never happen, we should only show waterlevels that have a year return false; } if( this.soundingYear == null ) return true; final int diff = Math.abs(this.soundingYear - waterlevelYear); return diff <= getMaxYearDifference(); } private int getMaxYearDifference() { if (this.soundingYear < 1918) return 25; if (1918 <= this.soundingYear && this.soundingYear < 1958) return 12; if (1958 <= this.soundingYear && this.soundingYear < 1998) return 6; // > 1998 return 3; } static Integer parseYear(final String year) { if (year == null || year.trim().isEmpty()) return null; try { return Integer.valueOf(year); } catch (final NumberFormatException e) { e.printStackTrace(); return null; } } static boolean isFolder(final AttrList attributes) { if (attributes == null) return true; if (!attributes.hasAttribute("factory")) return true; return false; } }