raimund@3028: package de.intevation.flys.artifacts.model.fixings;
raimund@3028:
raimund@3028: import de.intevation.artifacts.Artifact;
raimund@3028: import de.intevation.artifacts.CallContext;
raimund@3028:
raimund@3028: import de.intevation.flys.artifacts.FLYSArtifact;
raimund@3035:
sascha@3203: import de.intevation.flys.artifacts.access.FixationArtifactAccess;
sascha@3203:
sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@3203: import de.intevation.flys.artifacts.model.DataFacet;
raimund@3028: import de.intevation.flys.artifacts.model.FacetTypes;
raimund@3028:
raimund@3028: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
raimund@3028:
sascha@3203: import de.intevation.flys.utils.KMIndex;
sascha@3203:
sascha@3203: import org.apache.log4j.Logger;
raimund@3028:
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
raimund@3028: extends DataFacet
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: *
raimund@3028: * @param artifact the owner artifact.
raimund@3028: * @param context the CallContext (ignored).
raimund@3028: *
raimund@3028: * @return the data.
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: FixationArtifactAccess access = new FixationArtifactAccess(flys);
raimund@3035:
raimund@3035: CalculationResult res =
raimund@3035: (CalculationResult) flys.compute(context,
raimund@3035: ComputeType.ADVANCE,
raimund@3035: false);
raimund@3035:
raimund@3035: FixResult result = (FixResult) res.getData();
raimund@3088: double currentKm =
raimund@3088: ((Double)context.getContextValue("currentKm")).doubleValue();
raimund@3035:
raimund@3035: KMIndex kmQWs = result.getOutliers();
raimund@3035:
raimund@3080: KMIndex.Entry qwsEntry = kmQWs.binarySearch(currentKm);
christian@3062: QW[] qws = null;
christian@3062: if(qwsEntry != null) {
christian@3062: qws = qwsEntry.getValue();
raimund@3035: }
raimund@3035: return qws;
raimund@3035: }
raimund@3035: else {
raimund@3035: logger.debug("Not an instance of FixationArtifact.");
raimund@3035: return null;
raimund@3035: }
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 :