gernotbelger@9067: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9067: * Software engineering by gernotbelger@9067: * Björnsen Beratende Ingenieure GmbH gernotbelger@9067: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9067: * gernotbelger@9067: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9067: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9067: * documentation coming with Dive4Elements River for details. gernotbelger@9067: */ gernotbelger@9067: package org.dive4elements.river.artifacts.common; gernotbelger@9067: mschaefer@9155: import java.util.ArrayList; mschaefer@9155: import java.util.List; mschaefer@9155: gernotbelger@9067: import org.apache.log4j.Logger; gernotbelger@9067: import org.dive4elements.artifacts.Artifact; gernotbelger@9067: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9067: import org.dive4elements.river.artifacts.access.Access; mschaefer@9155: import org.dive4elements.river.artifacts.model.DateRange; mschaefer@9155: import org.dive4elements.river.backend.utils.DateUtil; gernotbelger@9067: gernotbelger@9067: import gnu.trove.TIntArrayList; gernotbelger@9067: gernotbelger@9067: /** gernotbelger@9067: * @author Domenico Nardi Tironi gernotbelger@9067: * gernotbelger@9067: */ gernotbelger@9070: // TODO: rename? gernotbelger@9070: public class EpochYearAccessHelper extends Access { gernotbelger@9067: gernotbelger@9070: private static Logger log = Logger.getLogger(EpochYearAccessHelper.class); gernotbelger@9067: gernotbelger@9067: // private final Artifact artifact; gernotbelger@9067: gernotbelger@9070: public EpochYearAccessHelper(final Artifact artifact) { gernotbelger@9067: this.artifact = (D4EArtifact) artifact; gernotbelger@9067: } gernotbelger@9067: gernotbelger@9067: public String getYearEpoch() { gernotbelger@9067: return getString("ye_select"); // ACHTUNG, Ergebniswerte wurden geändert in state.sinfo.epoch und state.sinfo.year gernotbelger@9067: } gernotbelger@9067: gernotbelger@9067: /** [year1, years2,..] if its about years. */ gernotbelger@9069: public int[] getYears(final String yearSelectedValue, final String yearKey) { gernotbelger@9067: int[] years = null; gernotbelger@9067: // if (years != null) { gernotbelger@9067: // return years; gernotbelger@9067: // } gernotbelger@9067: if (getYearEpoch().equals(yearSelectedValue)) { gernotbelger@9067: final TIntArrayList ints = new TIntArrayList(); gernotbelger@9069: final String yearsData = getString(yearKey); gernotbelger@9067: if (yearsData == null || yearsData.isEmpty()) { gernotbelger@9067: log.warn("No years provided"); gernotbelger@9067: return null; gernotbelger@9067: } gernotbelger@9067: for (final String sValue : yearsData.split(" ")) { gernotbelger@9067: try { gernotbelger@9067: ints.add(Integer.parseInt(sValue)); gernotbelger@9067: } gernotbelger@9067: catch (final NumberFormatException e) { gernotbelger@9067: /* Client should prevent this */ gernotbelger@9067: log.warn("Invalid year value: " + sValue); gernotbelger@9067: continue; gernotbelger@9067: } gernotbelger@9067: } gernotbelger@9067: gernotbelger@9067: if (!ints.isEmpty()) { gernotbelger@9067: ints.sort(); gernotbelger@9067: years = ints.toNativeArray(); gernotbelger@9067: } gernotbelger@9067: return years; gernotbelger@9067: } gernotbelger@9067: return null; gernotbelger@9067: } gernotbelger@9067: mschaefer@9155: public List getEpochs(final String epochSelectedValue, final String epochKey) { mschaefer@9155: final List epochs = new ArrayList<>(); gernotbelger@9067: // if (epochs != null) { gernotbelger@9067: // return epochs; gernotbelger@9067: // } gernotbelger@9067: gernotbelger@9067: if (!getYearEpoch().equals(epochSelectedValue)) { gernotbelger@9067: return null; gernotbelger@9067: } gernotbelger@9067: gernotbelger@9069: final String data = getString(epochKey); gernotbelger@9067: if (data == null) { gernotbelger@9067: log.warn("No 'epochs' parameter specified!"); gernotbelger@9067: return null; gernotbelger@9067: } gernotbelger@9067: mschaefer@9155: for (final String part : data.split(";")) { mschaefer@9155: final String[] values = part.split(","); gernotbelger@9067: try { mschaefer@9155: epochs.add(new DateRange(DateUtil.getStartDateFromYear(Integer.parseInt(values[0])), DateUtil.getEndDateFromYear(Integer.parseInt(values[1])))); gernotbelger@9067: } gernotbelger@9067: catch (final NumberFormatException nfe) { gernotbelger@9067: log.warn("Cannot parse int from string: '" + values + "'"); gernotbelger@9067: } gernotbelger@9067: } gernotbelger@9067: return epochs; gernotbelger@9067: } gernotbelger@9070: }