sascha@2196: package de.intevation.flys.artifacts.model;
sascha@2196: 
felix@2756: import java.util.ArrayList;
sascha@2256: import java.util.List;
sascha@2407: import java.util.Collections;
sascha@2256: 
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;
felix@2756: import de.intevation.flys.artifacts.WINFOArtifact;
sascha@2196: 
sascha@2196: import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
sascha@2196: 
sascha@2196: import org.apache.log4j.Logger;
sascha@2196: 
felix@2756: 
felix@2221: /** Facet for W-over-Ws. */
sascha@3076: public class ReferenceCurveFacet
sascha@2196: extends      DataFacet
sascha@2196: {
sascha@2407:     private static Logger log = Logger.getLogger(ReferenceCurveFacet.class);
sascha@2256: 
sascha@2407:     public static final String CONTEXT_KEY = "reference.curve.axis.scale";
sascha@2196: 
felix@2756:     /** Blackboard data provider key for reference curves start km. */
felix@2756:     public static final String BB_REFERENCECURVE_STARTKM =
felix@2756:         "reference_curve.startkm";
felix@2756: 
felix@2756:     /** Blackboard data provider key for reference curves end kms. */
felix@2756:     public static final String BB_REFERENCECURVE_ENDKMS =
felix@2756:         "reference_curve.endkms";
felix@2756: 
felix@2756: 
sascha@2196:     public ReferenceCurveFacet() {
sascha@2196:     }
sascha@2196: 
felix@2756: 
sascha@2196:     public ReferenceCurveFacet(int index, String name, String description) {
sascha@2196:         super(index, name, description, ComputeType.ADVANCE, null, null);
sascha@2196:     }
sascha@2196: 
felix@2756: 
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: 
felix@2756: 
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: 
felix@2283:         return getWWQQ(artifact, context);
sascha@2256:     }
sascha@2256: 
felix@2756: 
felix@2756:    /**
felix@2756:      * Can provide parameters of reference curve
felix@2756:      * @param key      will respond on BB_REFERENCECURVE START/ENDKMS
felix@2756:      * @param param    ignored
felix@2756:      * @param context  ignored
felix@2756:      * @return whatever parameters for reference curve
felix@2756:      */
felix@2756:     @Override
felix@2756:     public Object provideBlackboardData(Artifact artifact,
felix@2756:         Object key,
felix@2756:         Object param,
felix@2756:         CallContext context
felix@2756:     ) {
felix@2756:         WINFOArtifact winfo = (WINFOArtifact) artifact;
felix@2756:         if (key.equals(BB_REFERENCECURVE_STARTKM)) {
felix@2756:             return winfo.getReferenceStartKm();
felix@2756:         }
felix@2756:         else if (key.equals(BB_REFERENCECURVE_ENDKMS)) {
felix@2756:             return winfo.getReferenceEndKms();
felix@2756:         }
felix@2756:         else {
felix@2756:             return null;
felix@2756:         }
felix@2756:     }
felix@2756: 
felix@2756: 
felix@2283:     protected WWQQ getWWQQ(Artifact artifact, CallContext context) {
sascha@2196:         FLYSArtifact winfo = (FLYSArtifact)artifact;
sascha@2196: 
sascha@2196:         CalculationResult res = (CalculationResult)
sascha@2196:             winfo.compute(context, hash, stateId, type, false);
sascha@2196: 
felix@2283:         return ((WWQQ [])res.getData())[index];
sascha@2196:     }
sascha@2196: 
felix@2756: 
sascha@2196:     @Override
sascha@2196:     public void set(Facet other) {
sascha@2196:         super.set(other);
felix@2405:         ReferenceCurveFacet o = (ReferenceCurveFacet)other;
felix@2405:         type                  = o.type;
felix@2405:         hash                  = o.hash;
felix@2405:         stateId               = o.stateId;
sascha@2196:     }
sascha@2196: 
felix@2756: 
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@2256: 
felix@2756: 
felix@2756:     @Override
felix@2756:     public List getStaticDataProviderKeys(Artifact art) {
felix@2756:         List list = new ArrayList();
felix@2756:         list.add(BB_REFERENCECURVE_STARTKM);
felix@2756:         list.add(BB_REFERENCECURVE_ENDKMS);
felix@2756:         return list;
felix@2756:     }
felix@2756: 
felix@2756: 
sascha@2256:     @Override
felix@2405:     public List getDataProviderKeys(Artifact art, CallContext context) {
sascha@2407: 
felix@2405:         // compute / get data
sascha@2407:         Object obj = context.getContextValue(CONTEXT_KEY);
felix@2405: 
felix@2405:         if (!(obj instanceof WWAxisTypes)) {
felix@2405:             obj = new WWAxisTypes(getWWQQ(art, context));
sascha@2407:             context.putContextValue(CONTEXT_KEY, obj);
felix@2405:         }
felix@2405:         else {
felix@2405:             ((WWAxisTypes)obj).classify(getWWQQ(art, context));
felix@2405:         }
sascha@2256: 
felix@2756:         return getStaticDataProviderKeys(art);//Collections.emptyList();
sascha@2256:     }
sascha@2196: }
sascha@2196: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :