raimund@3169: package de.intevation.flys.artifacts.model.fixings;
raimund@3169:
raimund@3169: import de.intevation.artifacts.Artifact;
raimund@3169: import de.intevation.artifacts.CallContext;
raimund@3169:
raimund@3169: import de.intevation.flys.artifacts.FLYSArtifact;
raimund@3169:
sascha@3408: import de.intevation.flys.artifacts.access.FixAnalysisAccess;
sascha@3203:
sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@3203: import de.intevation.flys.artifacts.model.DataFacet;
raimund@3169: import de.intevation.flys.artifacts.model.FacetTypes;
sascha@3203:
sascha@3203: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
raimund@3169:
raimund@3169: import de.intevation.flys.utils.KMIndex;
raimund@3169:
sascha@3203: import org.apache.log4j.Logger;
raimund@3169:
raimund@3169:
raimund@3169: /**
raimund@3169: * Facet to show average W values for Q sectors.
raimund@3169: *
raimund@3169: * @author Raimund Renkert
raimund@3169: */
raimund@3169: public class FixLongitudinalReferenceFacet
raimund@3169: extends DataFacet
raimund@3169: implements FacetTypes {
raimund@3169:
raimund@3169: /** House logger. */
raimund@3169: private static Logger logger = Logger.getLogger(FixLongitudinalReferenceFacet.class);
raimund@3169:
raimund@3169: /** Trivial Constructor. */
raimund@3169: public FixLongitudinalReferenceFacet() {
raimund@3169: }
raimund@3169:
raimund@3169:
raimund@3169: public FixLongitudinalReferenceFacet(
raimund@3169: int ndx,
raimund@3169: String name,
sascha@3172: String description)
raimund@3169: {
raimund@3169: super(
raimund@3169: ndx,
raimund@3169: name,
raimund@3169: description,
raimund@3169: ComputeType.ADVANCE,
raimund@3169: null,
raimund@3169: null);
raimund@3169: }
raimund@3169:
raimund@3169:
raimund@3169: /**
raimund@3169: * Returns the data this facet requires.
raimund@3169: *
raimund@3169: * @param artifact the owner artifact.
raimund@3169: * @param context the CallContext.
raimund@3169: *
raimund@3169: * @return the data as KMIndex.
raimund@3169: */
raimund@3169: @Override
raimund@3169: public Object getData(Artifact artifact, CallContext context) {
raimund@3169: logger.debug("FixLongitudinalReferenceFacet.getData");
raimund@3169:
raimund@3169: if (artifact instanceof FLYSArtifact) {
raimund@3169: FLYSArtifact flys = (FLYSArtifact)artifact;
rrenkert@4866: FixAnalysisAccess access = new FixAnalysisAccess(flys, context);
raimund@3169:
raimund@3169: CalculationResult res =
raimund@3169: (CalculationResult) flys.compute(context,
raimund@3169: ComputeType.ADVANCE,
raimund@3169: false);
raimund@3169:
sascha@3415: FixAnalysisResult result = (FixAnalysisResult) res.getData();
raimund@3169:
raimund@3169: KMIndex kmReference = result.getReferenced();
raimund@3169:
raimund@3169: if (kmReference == null) {
raimund@3169: logger.warn("No references found.");
raimund@3169: return null;
raimund@3169: }
raimund@3169:
raimund@3610: int qwdNdx = index & 255;
raimund@3610: KMIndex resReference =
raimund@3610: new KMIndex();
raimund@3610: for (KMIndex.Entry entry: kmReference) {
raimund@3610: QWD[] qwds = entry.getValue();
raimund@3610: for(int i = 0; i < qwds.length; i++) {
raimund@3610: if(qwds[i].getIndex() == qwdNdx) {
raimund@3610: resReference.add(entry.getKm(), qwds[i]);
raimund@3610: }
raimund@3610: }
raimund@3610: }
raimund@3610: return resReference;
raimund@3169: }
raimund@3169: else {
raimund@3169: logger.warn("Artifact is no instance of FLYSArtifact.");
raimund@3169: return null;
raimund@3169: }
raimund@3169: }
raimund@3169:
raimund@3169:
raimund@3169: /**
raimund@3169: * Create a deep copy of this Facet.
raimund@3169: * @return a deep copy.
raimund@3169: */
raimund@3169: @Override
raimund@3169: public FixLongitudinalReferenceFacet deepCopy() {
raimund@3169: FixLongitudinalReferenceFacet copy =
raimund@3169: new FixLongitudinalReferenceFacet();
raimund@3169: copy.set(this);
raimund@3169: return copy;
raimund@3169: }
raimund@3169: }
raimund@3169: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :