raimund@3039: package de.intevation.flys.artifacts.model.fixings;
raimund@3039:
raimund@3039: import de.intevation.artifacts.Artifact;
raimund@3039: import de.intevation.artifacts.CallContext;
raimund@3039:
raimund@3039: import de.intevation.flys.artifacts.FLYSArtifact;
raimund@3039:
sascha@3408: import de.intevation.flys.artifacts.access.FixAnalysisAccess;
sascha@3203:
sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@3210: import de.intevation.flys.artifacts.model.DateRange;
raimund@3039: import de.intevation.flys.artifacts.model.FacetTypes;
raimund@3039:
raimund@3039: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
raimund@3039:
sascha@3203: import de.intevation.flys.utils.KMIndex;
sascha@3203:
sascha@3203: import org.apache.log4j.Logger;
raimund@3039:
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: */
raimund@3039: public class FixAnalysisPeriodsFacet
bjoern@4442: extends FixingsFacet
raimund@3039: implements FacetTypes {
raimund@3039:
raimund@3039: /** House logger. */
raimund@3039: private static Logger logger = Logger.getLogger(FixAnalysisPeriodsFacet.class);
raimund@3039:
raimund@3039: /** Trivial Constructor. */
raimund@3039: public FixAnalysisPeriodsFacet() {
raimund@3039: }
raimund@3039:
raimund@3039:
raimund@3039: /**
raimund@3039: * @param name
raimund@3039: */
raimund@3043: public FixAnalysisPeriodsFacet(int index, String name, String description) {
raimund@3039: super(index,
raimund@3043: name,
raimund@3039: description,
raimund@3039: ComputeType.ADVANCE,
raimund@3039: null,
raimund@3039: null);
raimund@3039: }
raimund@3039:
raimund@3039:
raimund@3039: /**
raimund@3039: * Returns the data this facet requires.
raimund@3039: *
raimund@3039: * @param artifact the owner artifact.
raimund@3039: * @param context the CallContext (ignored).
raimund@3039: *
raimund@3039: * @return the data.
raimund@3039: */
raimund@3039: @Override
raimund@3039: public Object getData(Artifact artifact, CallContext context) {
raimund@3039: logger.debug("FixAnalysisPeriodsFacet.getData");
raimund@3039:
raimund@3039: if (artifact instanceof FLYSArtifact) {
raimund@3039: FLYSArtifact flys = (FLYSArtifact)artifact;
sascha@3408: FixAnalysisAccess access = new FixAnalysisAccess(flys);
raimund@3039:
raimund@3039: CalculationResult res =
raimund@3039: (CalculationResult) flys.compute(context,
raimund@3039: ComputeType.ADVANCE,
raimund@3039: false);
raimund@3039:
sascha@3415: FixAnalysisResult result = (FixAnalysisResult) res.getData();
bjoern@4442: double currentKm = getCurrentKm(context);
raimund@3039:
raimund@3039: KMIndex kmPeriods = result.getAnalysisPeriods();
sascha@3076: KMIndex.Entry kmPeriodsEntry =
raimund@3080: kmPeriods.binarySearch(currentKm);
christian@3062:
christian@3062: if (kmPeriodsEntry == null) {
christian@3062: return null;
christian@3062: }
christian@3062:
christian@3062: AnalysisPeriod[] periods = kmPeriodsEntry.getValue();
raimund@3039:
raimund@3039: if (periods == null) {
raimund@3039: return null;
raimund@3039: }
raimund@3039: 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: }
raimund@3039: return dates;
raimund@3039: }
raimund@3039: else {
raimund@3039: logger.debug("Not an instance of FixationArtifact.");
raimund@3039: return null;
raimund@3039: }
raimund@3039: }
raimund@3039:
raimund@3039:
raimund@3039: /**
raimund@3039: * Create a deep copy of this Facet.
raimund@3039: * @return a deep copy.
raimund@3039: */
raimund@3039: @Override
raimund@3039: public FixAnalysisPeriodsFacet deepCopy() {
raimund@3039: FixAnalysisPeriodsFacet copy = new FixAnalysisPeriodsFacet();
raimund@3039: copy.set(this);
raimund@3039: return copy;
raimund@3039: }
raimund@3039: }
raimund@3039: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :