teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model.fixings; raimund@3039: gernotbelger@9415: import org.apache.log4j.Logger; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.DateRange; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; teichmann@5831: import org.dive4elements.river.utils.KMIndex; sascha@3203: raimund@3039: /** raimund@3039: * Facet to show W values for Q values at km for a date. raimund@3039: * raimund@3039: * @author Raimund Renkert raimund@3039: */ gernotbelger@9415: public class FixAnalysisPeriodsFacet extends FixingsFacet implements FacetTypes { gernotbelger@9415: gernotbelger@9415: private static final long serialVersionUID = 1L; raimund@3039: teichmann@8202: /** House log. */ teichmann@8202: private static Logger log = Logger.getLogger(FixAnalysisPeriodsFacet.class); raimund@3039: raimund@3039: /** Trivial Constructor. */ raimund@3039: public FixAnalysisPeriodsFacet() { raimund@3039: } raimund@3039: gernotbelger@9415: public FixAnalysisPeriodsFacet(final int index, final String name, final String description) { gernotbelger@9415: super(index, name, description, ComputeType.ADVANCE, null, null); raimund@3039: } raimund@3039: raimund@3039: /** raimund@3039: * Returns the data this facet requires. raimund@3039: * gernotbelger@9415: * @param artifact gernotbelger@9415: * the owner artifact. gernotbelger@9415: * @param context gernotbelger@9415: * the CallContext (ignored). raimund@3039: * raimund@3039: * @return the data. raimund@3039: */ raimund@3039: @Override gernotbelger@9415: public Object getData(final Artifact artifact, final CallContext context) { teichmann@8202: log.debug("FixAnalysisPeriodsFacet.getData"); raimund@3039: teichmann@5867: if (artifact instanceof D4EArtifact) { gernotbelger@9415: final D4EArtifact flys = (D4EArtifact) artifact; raimund@3039: gernotbelger@9415: final CalculationResult res = (CalculationResult) flys.compute(context, ComputeType.ADVANCE, false); christian@3062: gernotbelger@9415: final FixAnalysisResult result = (FixAnalysisResult) res.getData(); gernotbelger@9415: final double currentKm = getCurrentKm(context); gernotbelger@9415: gernotbelger@9415: final KMIndex kmPeriods = result.getAnalysisPeriods(); gernotbelger@9415: final KMIndex.Entry kmPeriodsEntry = kmPeriods.binarySearch(currentKm); gernotbelger@9415: if (kmPeriodsEntry == null) christian@3062: return null; raimund@3039: gernotbelger@9415: final AnalysisPeriod[] periods = kmPeriodsEntry.getValue(); gernotbelger@9415: if (periods == null) raimund@3039: return null; gernotbelger@9415: gernotbelger@9415: final DateRange[] dates = new DateRange[periods.length]; raimund@3039: for (int i = 0; i < periods.length; i++) { raimund@3039: dates[i] = periods[i].getDateRange(); raimund@3039: } gernotbelger@9415: raimund@3039: return dates; raimund@3039: } gernotbelger@9415: gernotbelger@9415: log.debug("Not an instance of FixationArtifact."); gernotbelger@9415: return null; raimund@3039: } raimund@3039: raimund@3039: /** raimund@3039: * Create a deep copy of this Facet. gernotbelger@9415: * raimund@3039: * @return a deep copy. raimund@3039: */ raimund@3039: @Override raimund@3039: public FixAnalysisPeriodsFacet deepCopy() { gernotbelger@9415: final FixAnalysisPeriodsFacet copy = new FixAnalysisPeriodsFacet(); raimund@3039: copy.set(this); raimund@3039: return copy; raimund@3039: } gernotbelger@9415: }