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: tom@8784: import org.dive4elements.river.artifacts.model.minfo.QualityMeasurementFactory; 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: tom@8856: private static Logger log = Logger.getLogger( tom@8856: 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); tom@8776: if (!data.getName().equals("ld_from") tom@8776: && !data.getName().equals("ld_to")) { andre@8613: return ele; andre@8613: } andre@8613: tom@8784: RiverAccess access = new RiverAccess((D4EArtifact)artifact); tom@8784: String river = access.getRiverName(); tom@8784: double [] minMax = access.getRiver().determineMinMaxDistance(); andre@8613: tom@8784: List bKms = QualityMeasurementFactory.getBedMeasurements( tom@8784: river, tom@8784: minMax[0], tom@8787: minMax[1] tom@8784: ).getKms(); andre@8613: tom@8784: List blKms = QualityMeasurementFactory.getBedloadMeasurements( tom@8784: river, tom@8784: minMax[0], tom@8787: minMax[1] tom@8784: ).getKms(); tom@8784: tom@8784: if (bKms.isEmpty() || blKms.isEmpty()) { tom@8784: log.warn("Not all data found for river '" + river + "'"); andre@8613: return ele; andre@8613: } andre@8613: tom@8784: double start = Math.min(bKms.get(0), blKms.get(0)); tom@8784: double end = Math.max( tom@8784: bKms.get(bKms.size()-1), blKms.get(blKms.size()-1)); andre@8613: andre@8613: if (data.getName().equals("ld_from")) { andre@8613: cr.addAttr(ele, "defaultLabel", data.getName(), true); tom@8784: cr.addAttr(ele, "defaultValue", Double.toString(start), true); andre@8613: } else if (data.getName().equals("ld_to")) { andre@8613: cr.addAttr(ele, "defaultLabel", data.getName(), true); tom@8784: cr.addAttr(ele, "defaultValue", Double.toString(end), true); andre@8613: } andre@8613: andre@8613: return ele; andre@8613: } andre@8613: }