sascha@2196: package de.intevation.flys.artifacts.model;
sascha@2196: 
sascha@2196: import de.intevation.artifactdatabase.state.Facet;
sascha@2196: 
sascha@2196: import de.intevation.artifacts.Artifact;
sascha@2196: import de.intevation.artifacts.CallContext;
sascha@2196: 
sascha@2196: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@2196: 
sascha@2196: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
sascha@2196: 
sascha@2196: import org.apache.log4j.Logger;
sascha@2196: 
felix@2221: /** Facet for W-over-Ws. */
sascha@2196: public class ReferenceCurveFacet 
sascha@2196: extends      DataFacet
sascha@2196: {
sascha@2196:     private static Logger log = Logger.getLogger(ReferenceCurveFacet.class);
sascha@2196: 
sascha@2196:     public ReferenceCurveFacet() {
sascha@2196:     }
sascha@2196: 
sascha@2196:     public ReferenceCurveFacet(int index, String name, String description) {
sascha@2196:         super(index, name, description, ComputeType.ADVANCE, null, null);
sascha@2196:     }
sascha@2196: 
sascha@2196:     public ReferenceCurveFacet(
sascha@2196:         int         index,
sascha@2196:         String      name,
sascha@2196:         String      description,
sascha@2196:         ComputeType type,
sascha@2196:         String      stateID,
sascha@2196:         String      hash
sascha@2196:     ) {
sascha@2196:         super(index, name, description, type, hash, stateID);
sascha@2196:     }
sascha@2196: 
sascha@2196:     public Object getData(Artifact artifact, CallContext context) {
sascha@2196: 
sascha@2196:         if (log.isDebugEnabled()) {
sascha@2196:             log.debug("Get data for reference curve at index: " + index +
sascha@2196:                 " /stateId: " + stateId);
sascha@2196:         }
sascha@2196: 
sascha@2196:         FLYSArtifact winfo = (FLYSArtifact)artifact;
sascha@2196: 
sascha@2196:         CalculationResult res = (CalculationResult)
sascha@2196:             winfo.compute(context, hash, stateId, type, false);
sascha@2196: 
sascha@2196:         return getInternalData((WW [])res.getData());
sascha@2196:     }
sascha@2196: 
sascha@2196:     /** To be overwritten by normalized reference curve. */
sascha@2196:     protected Object getInternalData(WW [] wws) {
sascha@2198:         // Using the ApplyFunctionIterator to unify data processing.
sascha@2198:         return new WW.ApplyFunctionIterator(wws[index]);
sascha@2196:     }
sascha@2196: 
sascha@2196:     @Override
sascha@2196:     public void set(Facet other) {
sascha@2196:         super.set(other);
sascha@2196:         ReferenceCurveFacet o= (ReferenceCurveFacet)other;
sascha@2196:         type    = o.type;
sascha@2196:         hash    = o.hash;
sascha@2196:         stateId = o.stateId;
sascha@2196:     }
sascha@2196: 
sascha@2196:     /** Copy deeply. */
sascha@2196:     @Override
sascha@2196:     public Facet deepCopy() {
sascha@2196:         ReferenceCurveFacet copy = new ReferenceCurveFacet();
sascha@2196:         copy.set(this);
sascha@2196:         return copy;
sascha@2196:     }
sascha@2196: }
sascha@2196: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :