andre@8613: /* Copyright (C) 2011, 2012, 2013, 2015 by Bundesanstalt für Gewässerkunde andre@8613: * Software engineering by Intevation GmbH andre@8613: * andre@8613: * This file is Free Software under the GNU AGPL (>=v3) andre@8613: * and comes with ABSOLUTELY NO WARRANTY! Check out the andre@8613: * documentation coming with Dive4Elements River for details. andre@8613: */ andre@8613: andre@8613: package org.dive4elements.river.artifacts.states.minfo; andre@8613: andre@8613: import java.util.Date; andre@8613: import java.util.List; andre@8613: andre@8613: import org.w3c.dom.Element; andre@8613: andre@8613: import org.apache.log4j.Logger; andre@8613: andre@8613: import org.dive4elements.river.artifacts.D4EArtifact; andre@8613: import org.dive4elements.river.artifacts.access.RiverAccess; andre@8613: import org.dive4elements.river.artifacts.states.DistanceSelect; andre@8613: import org.dive4elements.river.utils.KMIndex; andre@8613: andre@8613: import org.dive4elements.river.artifacts.model.minfo.BedOverview; andre@8613: import org.dive4elements.river.artifacts.model.minfo.BedOverviewFactory; andre@8613: andre@8613: import org.dive4elements.artifacts.common.utils.XMLUtils; andre@8613: import org.dive4elements.artifacts.Artifact; andre@8613: import org.dive4elements.artifacts.CallContext; andre@8613: andre@8613: import org.dive4elements.artifactdatabase.data.StateData; andre@8613: andre@8613: /** Extended Distance Select with default values appropiate for BedQuality */ andre@8613: public class BedQualityDistanceSelect extends DistanceSelect { andre@8613: andre@8613: private static Logger log = Logger.getLogger(BedQualityDistanceSelect.class); andre@8613: andre@8613: /** andre@8613: * The default constructor that initializes an empty State object. andre@8613: */ andre@8613: public BedQualityDistanceSelect() { andre@8613: } andre@8613: andre@8613: @Override andre@8613: protected Element createData( andre@8613: XMLUtils.ElementCreator cr, andre@8613: Artifact artifact, andre@8613: StateData data, andre@8613: CallContext context) andre@8613: { andre@8613: Element ele = super.createData(cr, artifact, data, context); andre@8613: if (!data.getName().equals("ld_from") && !data.getName().equals("ld_to")) { andre@8613: return ele; andre@8613: } andre@8613: andre@8613: D4EArtifact arti = (D4EArtifact) artifact; andre@8613: RiverAccess access = new RiverAccess(arti); andre@8613: andre@8613: /* Bit of an overkill here but it will be cached and accessed andre@8613: * in the next state anyway. */ andre@8613: BedOverview overview = BedOverviewFactory.getOverview(access.getRiverName()); andre@8613: andre@8613: if (overview == null) { andre@8613: log.warn("No overview found for river '" + access.getRiverName() + "'"); andre@8613: return ele; andre@8613: } andre@8613: andre@8613: KMIndex> entries = overview.filter(BedOverview.ACCEPT); andre@8682: if (entries.size() == 0) { andre@8682: log.warn("No data found for river '" + access.getRiverName() + "'"); andre@8682: return ele; andre@8682: } andre@8613: entries.sort(); andre@8613: andre@8613: if (data.getName().equals("ld_from")) { andre@8613: cr.addAttr(ele, "defaultLabel", data.getName(), true); andre@8613: cr.addAttr(ele, "defaultValue", Double.toString(entries.get(0).getKm()), true); andre@8613: } else if (data.getName().equals("ld_to")) { andre@8613: cr.addAttr(ele, "defaultLabel", data.getName(), true); andre@8613: cr.addAttr(ele, "defaultValue", Double.toString(entries.get(entries.size()-1).getKm()), true); andre@8613: } andre@8613: andre@8613: return ele; andre@8613: } andre@8613: }