teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@2196: felix@2756: import java.util.ArrayList; sascha@2256: import java.util.List; sascha@2407: import java.util.Collections; sascha@2256: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; sascha@2196: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; sascha@2196: teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: import org.dive4elements.river.artifacts.WINFOArtifact; sascha@2196: teichmann@5831: import org.dive4elements.river.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 :