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.states.sq; ingo@3428: andre@8620: import java.util.Date; andre@8620: import java.util.List; andre@8620: import java.util.Collections; andre@8620: andre@8620: import org.apache.log4j.Logger; andre@8620: andre@8620: import org.w3c.dom.Element; andre@8620: teichmann@5831: import org.dive4elements.river.artifacts.states.PeriodsSelect; andre@8620: import org.dive4elements.river.artifacts.access.RangeAccess; andre@8620: import org.dive4elements.river.artifacts.D4EArtifact; andre@8620: import org.dive4elements.river.artifacts.model.SQOverview; andre@8620: import org.dive4elements.river.artifacts.model.SQOverviewFactory; andre@8620: import org.dive4elements.river.artifacts.model.SQOverview.KmFilter; andre@8620: andre@8620: import org.dive4elements.river.utils.KMIndex; andre@8620: andre@8620: import org.dive4elements.artifacts.common.utils.XMLUtils; andre@8620: import org.dive4elements.artifacts.Artifact; andre@8620: import org.dive4elements.artifacts.CallContext; andre@8620: andre@8620: import org.dive4elements.artifactdatabase.data.StateData; ingo@3428: ingo@3428: public class SQPeriodSelect extends PeriodsSelect { ingo@3428: andre@8620: private static Logger log = Logger.getLogger(SQPeriodSelect.class); andre@8620: ingo@3428: public static final String UI_PROVIDER = "sq.period.select"; ingo@3428: ingo@3428: private static final long serialVersionUID = 1L; ingo@3428: andre@8620: /** Get either the start date of the data or the end. */ andre@8620: protected long getDataMinMaxDate(Artifact artifact, boolean minDate) { andre@8620: D4EArtifact arti = (D4EArtifact) artifact; andre@8620: RangeAccess access = new RangeAccess(arti); andre@8620: double km = access.getLocations()[0]; andre@8620: andre@8620: /* Bit of an overkill here but it will be cached and accessed andre@8620: * in the next state anyway. */ andre@8620: SQOverview overview = SQOverviewFactory.getOverview(access.getRiverName()); andre@8620: andre@8620: KMIndex> entries = overview.filter(new KmFilter(km)); andre@8620: if (entries.size() == 0) { andre@8620: return 0; andre@8620: } andre@8620: List dates = entries.get(0).getValue(); andre@8620: if (dates.isEmpty()) { andre@8620: return 0; andre@8620: } andre@8620: Collections.sort(dates); andre@8620: andre@8620: return minDate ? dates.get(0).getTime() : dates.get(dates.size() - 1).getTime(); andre@8620: } andre@8620: andre@8620: @Override andre@8620: protected Element[] createItems( andre@8620: XMLUtils.ElementCreator cr, andre@8620: Artifact artifact, andre@8620: String name, andre@8620: CallContext context) andre@8620: { andre@8620: if (!name.equals("start") && !name.equals("end")) { andre@8620: return null; andre@8620: } andre@8620: Element def = createItem( andre@8620: cr, andre@8620: new String[] {"default", Long.toString( andre@8620: getDataMinMaxDate(artifact, name.equals("start")))}); andre@8620: andre@8620: return new Element[] { def }; andre@8620: } ingo@3428: ingo@3428: @Override ingo@3428: public String getUIProvider() { ingo@3428: return UI_PROVIDER; ingo@3428: } ingo@3428: } ingo@3428: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :