teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model.fixings; raimund@3028: ingo@3466: import org.apache.log4j.Logger; ingo@3466: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; teichmann@5831: import org.dive4elements.river.utils.KMIndex; sascha@3203: raimund@3028: /** raimund@3028: * Facet to show the outliers in a fix calculation. raimund@3028: * raimund@3028: * @author Raimund Renkert raimund@3028: */ raimund@3028: public class FixOutlierFacet bjoern@4442: extends FixingsFacet raimund@3028: implements FacetTypes { raimund@3028: raimund@3028: /** House logger. */ raimund@3028: private static Logger logger = Logger.getLogger(FixOutlierFacet.class); raimund@3028: raimund@3028: /** Trivial Constructor. */ raimund@3028: public FixOutlierFacet() { raimund@3028: } raimund@3028: raimund@3028: raimund@3028: /** raimund@3028: * @param name raimund@3028: */ raimund@3043: public FixOutlierFacet(String name, String description) { raimund@3043: super(0, name, description, ComputeType.ADVANCE, null, null); raimund@3028: } raimund@3028: christian@3192: public FixOutlierFacet(int index, String name, String description) { christian@3192: super(index, name, description, ComputeType.ADVANCE, null, null); christian@3192: } christian@3192: raimund@3028: raimund@3028: /** raimund@3028: * Returns the data this facet requires. raimund@3028: * teichmann@5867: * @param artifact the owner artifact; needs to be a D4EArtifact. ingo@3466: * @param context the CallContext; required to retrieve the value of ingo@3466: * currentKm. raimund@3028: * ingo@3466: * @return an array of QW objects or null. raimund@3028: */ raimund@3028: @Override raimund@3028: public Object getData(Artifact artifact, CallContext context) { raimund@3028: logger.debug("FixOutlierFacet.getData"); raimund@3035: teichmann@5867: if (artifact instanceof D4EArtifact) { teichmann@5867: D4EArtifact flys = (D4EArtifact)artifact; raimund@3035: raimund@3035: CalculationResult res = raimund@3035: (CalculationResult) flys.compute(context, raimund@3035: ComputeType.ADVANCE, raimund@3035: false); raimund@3035: ingo@3466: FixResult result = (FixResult) res.getData(); bjoern@4442: double currentKm = getCurrentKm(context); raimund@3035: sascha@3729: KMIndex kmQWs = result.getOutliers(); sascha@3729: KMIndex.Entry qwsEntry = kmQWs.binarySearch(currentKm); raimund@3035: sascha@3729: QWI [] qws = null; sascha@3729: if (qwsEntry != null) { christian@3062: qws = qwsEntry.getValue(); ingo@3466: sascha@3729: if (logger.isDebugEnabled()) { sascha@3729: logger.debug("Found " + (qws != null ? qws.length : 0) sascha@3729: + " KMIndex.Entry for km " + currentKm); sascha@3729: } raimund@3035: } ingo@3466: else { ingo@3466: logger.debug("Found no KMIndex.Entry for km " + currentKm); ingo@3466: } ingo@3466: raimund@3035: return qws; raimund@3035: } sascha@3729: teichmann@5867: logger.warn("Not an instance of D4EArtifact."); sascha@3729: return null; raimund@3028: } raimund@3028: raimund@3028: raimund@3028: /** raimund@3028: * Create a deep copy of this Facet. raimund@3028: * @return a deep copy. raimund@3028: */ raimund@3028: @Override raimund@3028: public FixOutlierFacet deepCopy() { raimund@3028: FixOutlierFacet copy = new FixOutlierFacet(); raimund@3028: copy.set(this); raimund@3028: return copy; raimund@3028: } raimund@3028: } raimund@3028: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :