raimund@3028: package de.intevation.flys.artifacts.model.fixings;
raimund@3028:
ingo@3466: import org.apache.log4j.Logger;
ingo@3466:
raimund@3028: import de.intevation.artifacts.Artifact;
raimund@3028: import de.intevation.artifacts.CallContext;
raimund@3028: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult;
raimund@3028: import de.intevation.flys.artifacts.model.FacetTypes;
raimund@3028: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
sascha@3203: import de.intevation.flys.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: *
ingo@3466: * @param artifact the owner artifact; needs to be a FLYSArtifact.
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:
raimund@3035: if (artifact instanceof FLYSArtifact) {
raimund@3035: FLYSArtifact flys = (FLYSArtifact)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:
sascha@3729: logger.warn("Not an instance of FLYSArtifact.");
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 :