aheinecke@7097: /* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde aheinecke@7097: * Software engineering by Intevation GmbH aheinecke@7097: * aheinecke@7097: * This file is Free Software under the GNU AGPL (>=v3) aheinecke@7097: * and comes with ABSOLUTELY NO WARRANTY! Check out the aheinecke@7097: * documentation coming with Dive4Elements River for details. aheinecke@7097: */ aheinecke@7097: aheinecke@7097: aheinecke@7097: package org.dive4elements.river.exports.process; aheinecke@7097: aheinecke@7097: import org.apache.log4j.Logger; aheinecke@7097: aheinecke@7097: import java.util.List; aheinecke@7097: import java.util.ArrayList; aheinecke@7097: aheinecke@7097: import org.json.JSONArray; aheinecke@7097: import org.json.JSONException; aheinecke@7097: aheinecke@7097: import org.jfree.data.xy.XYSeries; aheinecke@7097: import org.jfree.chart.annotations.XYTextAnnotation; aheinecke@7097: aheinecke@7097: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; aheinecke@7097: import org.dive4elements.artifacts.CallContext; aheinecke@7097: import org.dive4elements.river.artifacts.model.FacetTypes; aheinecke@7097: import org.dive4elements.river.exports.DiagramGenerator; aheinecke@7097: import org.dive4elements.river.jfree.RiverAnnotation; aheinecke@7097: import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; aheinecke@7097: import org.dive4elements.river.jfree.StyledXYSeries; aheinecke@7097: import org.dive4elements.river.themes.ThemeDocument; aheinecke@7097: aheinecke@7097: public class ManualPointsProcessor extends DefaultProcessor { aheinecke@7097: teichmann@8202: private static final Logger log = Logger.getLogger(ManualPointsProcessor.class); aheinecke@7097: aheinecke@7097: @Override aheinecke@7097: public void doOut( aheinecke@7097: DiagramGenerator generator, aheinecke@7097: ArtifactAndFacet bundle, aheinecke@7097: ThemeDocument theme, aheinecke@7097: boolean visible) { aheinecke@7097: CallContext context = generator.getCallContext(); aheinecke@7097: String seriesName = bundle.getFacetDescription(); aheinecke@7097: XYSeries series = new StyledXYSeries(seriesName, theme); aheinecke@7097: String jsonData = (String) bundle.getData(context); aheinecke@7097: aheinecke@7097: // Add text annotations for single points. aheinecke@7097: List xy = new ArrayList(); aheinecke@7097: aheinecke@7097: try { aheinecke@7097: JSONArray points = new JSONArray(jsonData); aheinecke@7097: for (int i = 0, P = points.length(); i < P; i++) { aheinecke@7097: JSONArray array = points.getJSONArray(i); aheinecke@7097: double x = array.getDouble(0); aheinecke@7097: double y = array.getDouble(1); aheinecke@7097: String name = array.getString(2); aheinecke@7097: boolean act = array.getBoolean(3); aheinecke@7097: if (!act) { aheinecke@7097: continue; aheinecke@7097: } teichmann@8202: //log.debug(" x " + x + " y " + y ); aheinecke@7097: series.add(x, y, false); aheinecke@7097: xy.add(new CollisionFreeXYTextAnnotation(name, x, y)); aheinecke@7097: } aheinecke@7097: } aheinecke@7097: catch(JSONException e){ teichmann@8202: log.error("Could not decode json."); aheinecke@7097: } aheinecke@7097: aheinecke@7097: RiverAnnotation annotation = new RiverAnnotation(null, null, null, theme); aheinecke@7097: annotation.setTextAnnotations(xy); aheinecke@7097: aheinecke@7097: if (visible) { aheinecke@7097: generator.addAnnotations(annotation); aheinecke@7097: } aheinecke@7097: aheinecke@7097: generator.addAxisSeries(series, axisName, visible); aheinecke@7097: } aheinecke@7097: aheinecke@7097: @Override aheinecke@7097: public boolean canHandle(String facetType) { aheinecke@7097: if (facetType == null) { aheinecke@7097: return false; aheinecke@7097: } aheinecke@7097: return FacetTypes.IS.MANUALPOINTS(facetType); aheinecke@7097: } aheinecke@7097: }