raimund@3035: package de.intevation.flys.artifacts.model.fixings;
raimund@3035:
ingo@3466: import org.apache.log4j.Logger;
ingo@3466:
raimund@3035: import de.intevation.artifacts.Artifact;
raimund@3035: import de.intevation.artifacts.CallContext;
sascha@3203: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@3203: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@3203: import de.intevation.flys.artifacts.model.FacetTypes;
sascha@3203: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
raimund@3035: import de.intevation.flys.utils.KMIndex;
raimund@3035:
raimund@3035:
raimund@3035: /**
raimund@3035: * Facet to show W values for Q values at km for a date.
raimund@3035: *
raimund@3035: * @author Raimund Renkert
raimund@3035: */
raimund@3035: public class FixReferenceEventsFacet
bjoern@4442: extends FixingsFacet
raimund@3035: implements FacetTypes {
raimund@3035:
raimund@3035: /** House logger. */
raimund@3035: private static Logger logger = Logger.getLogger(FixReferenceEventsFacet.class);
raimund@3035:
raimund@3035: /** Trivial Constructor. */
raimund@3035: public FixReferenceEventsFacet() {
raimund@3035: }
raimund@3035:
raimund@3035:
raimund@3035: /**
raimund@3035: * @param name
raimund@3035: */
raimund@3043: public FixReferenceEventsFacet(int index, String name, String description) {
raimund@3039: super(index,
raimund@3043: name,
raimund@3039: description,
raimund@3039: ComputeType.ADVANCE,
raimund@3039: null,
raimund@3039: null);
raimund@3035: }
raimund@3035:
raimund@3035:
raimund@3035: /**
raimund@3035: * Returns the data this facet requires.
raimund@3035: *
raimund@3035: * @param artifact the owner artifact.
raimund@3035: * @param context the CallContext (ignored).
raimund@3035: *
raimund@3035: * @return the data.
raimund@3035: */
raimund@3035: @Override
raimund@3035: public Object getData(Artifact artifact, CallContext context) {
raimund@3035: logger.debug("FixReferenceEventsFacet.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@3096: KMIndex kmQWs = result.getReferenced();
sascha@3096: KMIndex.Entry kmQWsEntry = kmQWs.binarySearch(currentKm);
raimund@3128: QWD[] qwds = null;
christian@3062: if (kmQWsEntry != null) {
raimund@3610: int ndx = index & 255;
raimund@3128: qwds = kmQWsEntry.getValue();
raimund@3610: for (int i = 0; i < qwds.length; i++) {
raimund@3610: if (qwds[i].getIndex() == ndx) {
raimund@3610: return qwds[i];
raimund@3610: }
raimund@3610: }
raimund@3610: return null;
raimund@3035: }
raimund@3610: return null;
raimund@3035: }
raimund@3035: else {
raimund@3035: logger.debug("Not an instance of FixationArtifact.");
raimund@3035: return null;
raimund@3035: }
raimund@3035: }
raimund@3035:
raimund@3035:
raimund@3035: /**
raimund@3035: * Create a deep copy of this Facet.
raimund@3035: * @return a deep copy.
raimund@3035: */
raimund@3035: @Override
raimund@3035: public FixReferenceEventsFacet deepCopy() {
raimund@3035: FixReferenceEventsFacet copy = new FixReferenceEventsFacet();
raimund@3035: copy.set(this);
raimund@3035: return copy;
raimund@3035: }
raimund@3035: }
raimund@3035: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :