felix@1026: package de.intevation.flys.artifacts.model;
felix@1026: 
ingo@1679: import java.util.ArrayList;
sascha@2144: import java.util.Iterator;
ingo@1677: import java.util.List;
ingo@1677: 
felix@1026: import org.apache.log4j.Logger;
felix@1026: 
felix@1026: import de.intevation.artifacts.Artifact;
felix@1026: import de.intevation.artifacts.CallContext;
felix@1026: 
felix@1026: import de.intevation.flys.artifacts.AnnotationArtifact;
sascha@2144: 
ingo@1677: import de.intevation.flys.jfree.FLYSAnnotation;
ingo@1679: import de.intevation.flys.jfree.StickyAxisAnnotation;
ingo@1677: 
ingo@1677: import de.intevation.flys.model.Annotation;
sascha@2144: import de.intevation.flys.model.FastAnnotations;
felix@1026: 
felix@1026: import de.intevation.artifactdatabase.state.DefaultFacet;
sascha@1061: import de.intevation.artifactdatabase.state.Facet;
felix@1026: 
sascha@2144: import de.intevation.flys.utils.FLYSUtils;
sascha@2144: 
sascha@2144: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@2144: 
sascha@2144: 
felix@1026: /**
felix@1077:  * Facet to access Annotations (landmarks, POIs) of a river.
felix@1026:  */
felix@1026: public class AnnotationFacet
felix@1026: extends      DefaultFacet
felix@1026: {
felix@1026:     /** Logger for this class. */
felix@1026:     private static final Logger logger = Logger.getLogger(AnnotationFacet.class);
felix@1026: 
felix@1077: 
felix@1077:     /**
felix@1077:      * Trivial Constructor.
felix@1077:      */
sascha@1061:     public AnnotationFacet() {
sascha@1061:     }
sascha@1061: 
felix@1026: 
felix@1026:     /**
felix@1026:      * Trivial Constructor for a AnnotationFacet.
felix@1026:      *
felix@1026:      * @param index       Database-Index to use.
felix@1026:      * @param name        Name (~type) of Facet.
felix@1026:      * @param description Description of Facet.
felix@1026:      */
felix@1026:     public AnnotationFacet(int index, String name, String description) {
felix@1026:         super(index, name, description);
felix@1026:     }
felix@1026: 
felix@1026: 
felix@1026:     /**
felix@1026:      * Get List of Annotations for river from Artifact.
felix@1026:      *
felix@1026:      * @param artifact (Annotation-)Artifact to query for list of Annotations.
felix@1026:      * @param context  Ignored.
felix@1026:      */
felix@1026:     @Override
felix@1026:     public Object getData(Artifact artifact, CallContext context) {
felix@4010: 
felix@4010:         // TODO issue880: Make annotations available _per type_
felix@1077:         AnnotationArtifact annotationArtifact = (AnnotationArtifact) artifact;
ingo@1677: 
sascha@2144:         String riverName = FLYSUtils.getRivername((FLYSArtifact)artifact);
ingo@1679: 
sascha@2144:         FastAnnotations fas = LocationProvider.getAnnotations(riverName);
sascha@2144: 
felix@4015:         String filterName = annotationArtifact.getFilterName();
felix@4015: 
felix@4015:         FastAnnotations.Filter filter = (filterName == null)
felix@4015:             ? FastAnnotations.IS_POINT
felix@4015:             : new FastAnnotations.NameFilter(filterName);
felix@4015: 
felix@2162:         List<StickyAxisAnnotation> xy =
felix@2162:             new ArrayList<StickyAxisAnnotation>(fas.size());
sascha@2144: 
sascha@2144:         for (Iterator<FastAnnotations.Annotation> iter =
felix@4015:                 fas.filter(filter); iter.hasNext();) {
sascha@2144:             FastAnnotations.Annotation fa = iter.next();
sascha@2144: 
ingo@1679:             xy.add(new StickyAxisAnnotation(
sascha@2144:                 fa.getPosition(),
sascha@2144:                 (float)fa.getA(),
ingo@1679:                 StickyAxisAnnotation.SimpleAxis.X_AXIS));
ingo@1679:         }
ingo@1679: 
ingo@1679:         return new FLYSAnnotation(description, xy);
felix@1026:     }
sascha@1061: 
felix@1077: 
sascha@1061:     @Override
sascha@1061:     public Facet deepCopy() {
sascha@1061:         AnnotationFacet copy = new AnnotationFacet();
sascha@1061:         copy.set(this);
sascha@1061:         return copy;
sascha@1061:     }
felix@1026: }
felix@1962: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :