felix@1085: package de.intevation.flys.artifacts.model;
felix@1085: 
ingo@1679: import java.util.ArrayList;
ingo@1679: import java.util.List;
ingo@1679: 
felix@1085: import de.intevation.artifacts.Artifact;
felix@1085: import de.intevation.artifacts.CallContext;
ingo@1679: 
felix@1085: import de.intevation.artifactdatabase.state.DefaultFacet;
ingo@1679: 
ingo@1679: import de.intevation.flys.artifacts.MainValuesArtifact;
felix@1085: import de.intevation.flys.artifacts.model.FacetTypes;
ingo@1679: import de.intevation.flys.jfree.FLYSAnnotation;
ingo@1679: import de.intevation.flys.jfree.StickyAxisAnnotation;
felix@1085: 
felix@2163: import de.intevation.flys.exports.DurationCurveGenerator;
felix@2163: 
felix@1085: /**
felix@1085:  * Facet to show Main Q Values.
felix@2161:  * TODO Join with W implementation.
felix@1085:  */
felix@1085: public class MainValuesQFacet
felix@1085: extends      DefaultFacet
felix@1085: implements   FacetTypes {
felix@1085: 
felix@1957:     /** Do we want MainValues at Gauge (not interpolated)? */
felix@1957:     protected boolean isAtGauge;
felix@1957: 
felix@1085:     /** Trivial Constructor. */
felix@1957:     public MainValuesQFacet(String name, String description, boolean atGauge) {
felix@1112:         this.description = description;
felix@2163:         this.name        = name;
felix@2163:         this.index       = 0;
felix@2163:         this.isAtGauge   = atGauge;
felix@1085:     }
felix@1085: 
felix@1085: 
felix@1085:     /**
felix@1085:      * Returns the data this facet requires.
felix@1085:      *
felix@1085:      * @param artifact the owner artifact.
felix@1085:      * @param context  the CallContext (ignored).
felix@1085:      *
felix@1085:      * @return the data.
felix@1085:      */
felix@1085:     @Override
felix@1085:     public Object getData(Artifact artifact, CallContext context) {
felix@1085:         MainValuesArtifact mvArtifact = (MainValuesArtifact) artifact;
ingo@1679: 
felix@2163:         List<NamedDouble>          qs = mvArtifact.getMainValuesQ(isAtGauge);
felix@2161:         List<StickyAxisAnnotation> xy = new ArrayList<StickyAxisAnnotation>();
ingo@1679: 
felix@2163:         // Rather specific case, Q-Annotations at a maybe second yaxis.
felix@2163:         if (this.name.equals(DURATION_MAINVALUES_Q)) {
felix@2163:             for (NamedDouble q: qs) {
felix@2163:                 xy.add(new StickyAxisAnnotation(
felix@2163:                     q.getName(),
felix@2163:                     (float) q.getValue(),
felix@2163:                     StickyAxisAnnotation.SimpleAxis.Y_AXIS,
felix@2163:                     DurationCurveGenerator.YAXIS.Q.idx));
felix@2163:             }
felix@2163:         }
felix@2163:         else {
felix@2163:             for (NamedDouble q: qs) {
felix@2163:                 xy.add(new StickyAxisAnnotation(
felix@2163:                     q.getName(),
felix@2163:                     (float) q.getValue(),
felix@2163:                     StickyAxisAnnotation.SimpleAxis.X_AXIS));
felix@2163:             }
ingo@1679:         }
ingo@1679: 
ingo@1679:         return new FLYSAnnotation(description, xy);
felix@1085:     }
felix@1085: 
felix@1085: 
felix@1085:     /**
felix@1085:      * Create a deep copy of this Facet.
felix@1085:      * @return a deep copy.
felix@1085:      */
felix@1085:     @Override
felix@1085:     public MainValuesQFacet deepCopy() {
felix@1957:         MainValuesQFacet copy = new MainValuesQFacet(this.name,
felix@1957:             description, this.isAtGauge);
felix@1085:         copy.set(this);
felix@1085:         return copy;
felix@1085:     }
felix@1085: }
felix@1809: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :