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@3203: import de.intevation.flys.artifacts.access.FixationArtifactAccess; sascha@3203: sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult; sascha@3203: import de.intevation.flys.artifacts.model.DataFacet; 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 raimund@3039: extends DataFacet 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; raimund@3039: FixationArtifactAccess access = new FixationArtifactAccess(flys); raimund@3039: raimund@3039: CalculationResult res = raimund@3039: (CalculationResult) flys.compute(context, raimund@3039: ComputeType.ADVANCE, raimund@3039: false); raimund@3039: raimund@3039: FixResult result = (FixResult) res.getData(); raimund@3088: double currentKm = raimund@3088: ((Double)context.getContextValue("currentKm")).doubleValue(); 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 :