teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.access; sascha@3408: teichmann@5831: import org.dive4elements.artifactdatabase.data.StateData; teichmann@5831: import org.dive4elements.artifacts.CallContext; sascha@3411: teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; sascha@3411: teichmann@5831: import org.dive4elements.river.artifacts.model.DateRange; sascha@3408: sascha@3408: import java.util.Arrays; sascha@3408: import java.util.Date; sascha@3408: sascha@3408: import org.apache.log4j.Logger; sascha@3408: sascha@3408: public class FixAnalysisAccess sascha@3418: extends FixAccess sascha@3408: { sascha@3408: private static Logger log = Logger.getLogger(FixAnalysisAccess.class); sascha@3408: sascha@3408: protected DateRange referencePeriod; sascha@3408: protected DateRange [] analysisPeriods; sascha@3408: sascha@3408: protected double [] qs; sascha@3408: teichmann@5867: public FixAnalysisAccess(D4EArtifact artifact, CallContext context) { rrenkert@4866: super(artifact, context); sascha@3408: } sascha@3408: sascha@3408: public DateRange getReferencePeriod() { sascha@3408: if (referencePeriod == null) { sascha@3408: StateData refStart = artifact.getData("ref_start"); sascha@3408: StateData refEnd = artifact.getData("ref_end"); sascha@3408: sascha@3408: if (refStart == null || refEnd == null) { sascha@3408: log.warn("missing 'ref_start' or 'ref_start' value"); sascha@3408: return null; sascha@3408: } sascha@3408: sascha@3408: try { sascha@3408: long rs = Long.parseLong((String)refStart.getValue()); sascha@3408: long re = Long.parseLong((String)refEnd .getValue()); sascha@3408: sascha@3408: if (rs > re) { long t = rs; rs = re; re = t; } sascha@3408: sascha@3408: Date from = new Date(rs); sascha@3408: Date to = new Date(re); sascha@3408: referencePeriod = new DateRange(from, to); sascha@3408: } sascha@3408: catch (NumberFormatException nfe) { sascha@3408: log.warn("ref_start or ref_end is not an integer."); sascha@3408: } sascha@3408: } sascha@3408: sascha@3408: return referencePeriod; sascha@3408: } sascha@3408: sascha@3408: public DateRange [] getAnalysisPeriods() { sascha@3408: if (analysisPeriods == null) { sascha@3408: analysisPeriods = getDateRange("ana_data"); sascha@3408: } sascha@3408: sascha@3408: return analysisPeriods; sascha@3408: } sascha@3408: sascha@3408: /** sascha@3408: * @return DateRange object ranging from eldest to youngest date sascha@3408: * of analysis and reference periods. sascha@3408: */ sascha@3408: public DateRange getDateRange() { sascha@3408: DateRange refP = getReferencePeriod(); sascha@3408: ingo@3466: if (refP == null) { ingo@3466: return null; ingo@3466: } ingo@3466: sascha@3408: Date from = refP.getFrom(); sascha@3408: Date to = refP.getTo(); sascha@3408: sascha@3408: DateRange[] rs = getAnalysisPeriods(); sascha@3418: for (DateRange r: rs) { sascha@3418: if (r.getFrom().before(from)) { sascha@3408: from = r.getFrom(); sascha@3408: } sascha@3418: if (r.getTo().after(to)) { sascha@3408: to = r.getTo(); sascha@3408: } sascha@3408: } sascha@3408: sascha@3408: return new DateRange(from, to); sascha@3408: } sascha@3408: sascha@3408: public double [] getQs() { sascha@3408: if (qs == null) { sascha@3408: qs = getDoubleArray("qs"); sascha@3408: } sascha@3408: sascha@3408: if (log.isDebugEnabled() && qs != null) { sascha@3408: log.debug("qs: " + Arrays.toString(qs)); sascha@3408: } sascha@3408: return qs; sascha@3408: } sascha@3408: } sascha@3408: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :