# HG changeset patch # User Andre Heinecke # Date 1379931668 -7200 # Node ID c64c04d0796edee5f75f6713baf11c1bf1f6e75e # Parent 5c059c05b100971c5912b7fb211ea6e54e49b825 Move manual point handling into a Processor diff -r 5c059c05b100 -r c64c04d0796e artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Mon Sep 23 12:20:27 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Mon Sep 23 12:21:08 2013 +0200 @@ -36,8 +36,6 @@ import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -import org.json.JSONArray; -import org.json.JSONException; import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; import org.dive4elements.artifactdatabase.state.Facet; @@ -907,54 +905,6 @@ /** - * Do Points out. - */ - protected void doPoints( - Object o, - ArtifactAndFacet aandf, - ThemeDocument theme, - boolean visible, - int axisIndex - ) { - String seriesName = aandf.getFacetDescription(); - XYSeries series = new StyledXYSeries(seriesName, theme); - - // Add text annotations for single points. - List xy = new ArrayList(); - - try { - JSONArray points = new JSONArray((String) o); - for (int i = 0, P = points.length(); i < P; i++) { - JSONArray array = points.getJSONArray(i); - double x = array.getDouble(0); - double y = array.getDouble(1); - String name = array.getString(2); - boolean act = array.getBoolean(3); - if (!act) { - continue; - } - //logger.debug(" x " + x + " y " + y ); - series.add(x, y, false); - xy.add(new CollisionFreeXYTextAnnotation(name, x, y)); - } - } - catch(JSONException e){ - logger.error("Could not decode json."); - } - - RiverAnnotation annotation = new RiverAnnotation(null, null, null, theme); - annotation.setTextAnnotations(xy); - - // Do not generate second legend entry. (null was passed for the aand before). - if (visible) { - annotations.add(annotation); - } -// doAnnotations(annotations, null, theme, visible); - addAxisSeries(series, axisIndex, visible); - } - - - /** * Create a hash from a legenditem. * This hash can then be used to merge legend items labels. * @return hash for given legenditem to identify mergeables. diff -r 5c059c05b100 -r c64c04d0796e artifacts/src/main/java/org/dive4elements/river/exports/process/ManualPointsProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/ManualPointsProcessor.java Mon Sep 23 12:21:08 2013 +0200 @@ -0,0 +1,87 @@ +/* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + + +package org.dive4elements.river.exports.process; + +import org.apache.log4j.Logger; + +import java.util.List; +import java.util.ArrayList; + +import org.json.JSONArray; +import org.json.JSONException; + +import org.jfree.data.xy.XYSeries; +import org.jfree.chart.annotations.XYTextAnnotation; + +import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.exports.DiagramGenerator; +import org.dive4elements.river.jfree.RiverAnnotation; +import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; +import org.dive4elements.river.jfree.StyledXYSeries; +import org.dive4elements.river.themes.ThemeDocument; + +public class ManualPointsProcessor extends DefaultProcessor { + + private static final Logger logger = Logger.getLogger(ManualPointsProcessor.class); + + @Override + public void doOut( + DiagramGenerator generator, + ArtifactAndFacet bundle, + ThemeDocument theme, + boolean visible) { + CallContext context = generator.getCallContext(); + String seriesName = bundle.getFacetDescription(); + XYSeries series = new StyledXYSeries(seriesName, theme); + String jsonData = (String) bundle.getData(context); + + // Add text annotations for single points. + List xy = new ArrayList(); + + try { + JSONArray points = new JSONArray(jsonData); + for (int i = 0, P = points.length(); i < P; i++) { + JSONArray array = points.getJSONArray(i); + double x = array.getDouble(0); + double y = array.getDouble(1); + String name = array.getString(2); + boolean act = array.getBoolean(3); + if (!act) { + continue; + } + //logger.debug(" x " + x + " y " + y ); + series.add(x, y, false); + xy.add(new CollisionFreeXYTextAnnotation(name, x, y)); + } + } + catch(JSONException e){ + logger.error("Could not decode json."); + } + + RiverAnnotation annotation = new RiverAnnotation(null, null, null, theme); + annotation.setTextAnnotations(xy); + + if (visible) { + generator.addAnnotations(annotation); + } + + generator.addAxisSeries(series, axisName, visible); + } + + @Override + public boolean canHandle(String facetType) { + if (facetType == null) { + return false; + } + return FacetTypes.IS.MANUALPOINTS(facetType); + } +}