Package de.laures.cewolf.cpp

Source Code of de.laures.cewolf.cpp.AnnotationProcessor

package de.laures.cewolf.cpp;

import java.awt.Color;
import java.awt.Font;
import java.io.Serializable;
import java.util.Map;

import de.laures.cewolf.ChartPostProcessor;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.*;
import org.jfree.chart.axis.CategoryAnchor;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.ui.TextAnchor;

/**
* A postprocessor for adding annotation to an X/Y or Category plot.
* If either arrowPaint or arrowAngle is set then a pointer will be drawn; otherwise, just the text.
* <BR><b>text</b> the text to display; mandatory
* <BR><b>x</b> (for X/Y plots only) the X value at which to show the text; mandatory
* <BR><b>y</b> (for X/Y plots only) the Y value at which to show the text; mandatory
* <BR><b>category</b> (for category plots only) the category for which to show the text; mandatory
* <BR><b>value</b> (for category plots only) the value at which to show the text; mandatory
* <BR><b>fontname</b> optional; default SansSerif
* <BR><b>fontsize</b> optional; default 14
* <BR><b>bold</b> true/false; optional; default false
* <BR><b>italic</b> true/false; optional; default false
* <BR><b>textPaint</b> the color to use for the text; optional; default #000000 (i.e., black)
* <BR><b>arrowPaint</b> the color to use for the text; optional; default #000000 (i.e., black)
* <BR><b>arrowAngle</b> the angle at which to display the arrow; optional; default 0
* <BR><b>textAnchor</b> the position of text relative to its origin point; optional; possible values are:
BASELINE_CENTER, BASELINE_LEFT, BASELINE_RIGHT, BOTTOM_CENTER, BOTTOM_LEFT, BOTTOM_RIGHT, CENTER, CENTER_LEFT,
CENTER_RIGHT, HALF_ASCENT_CENTER, HALF_ASCENT_LEFT, HALF_ASCENT_RIGHT, TOP_CENTER, TOP_LEFT, TOP_RIGHT
* <P>
* See the annotations.jsp page of the sample web app for usage examples.
*/

public class AnnotationProcessor implements ChartPostProcessor, Serializable
{
  static final long serialVersionUID = 6321794363389448612L;

    public void processChart (Object chart, Map params) {
    String text = "text goes here";
    String fontName = "SansSerif";
    int fontSize = 14;
    boolean isBold = false;
    boolean isItalic = false;
    double x = 0.0;
    double y = 0.0;
    String category = null;
    double value = 0.0;
    TextAnchor textAnchor = TextAnnotation.DEFAULT_TEXT_ANCHOR;
    Color textPaint = new Color(0, 0, 0);
    Color arrowPaint = new Color(0, 0, 0);
    double arrowAngle = 0;
    boolean drawArrow = false;

    String str = (String) params.get("text");
    if (str != null && str.trim().length() > 0)
      text = str.trim();

    String fontNameParam = (String) params.get("fontname");
    if (fontNameParam != null && fontNameParam.trim().length() > 0)
      fontName = fontNameParam.trim();

    String fontSizeParam = (String) params.get("fontsize");
    if (fontSizeParam != null && fontSizeParam.trim().length() > 0) {
      try {
        fontSize = Integer.parseInt(fontSizeParam);
        if (fontSize < 4)
          fontSize = 14;
      } catch (NumberFormatException nfex) { }
    }

    String boldParam = (String) params.get("bold");
    if (boldParam != null)
      isBold = "true".equals(boldParam.toLowerCase());

    String italicParam = (String) params.get("italic");
    if (italicParam != null)
      isItalic = "true".equals(italicParam.toLowerCase());

    Font font = new Font(fontName,
              (isBold ? Font.BOLD : 0) + (isItalic ? Font.ITALIC : 0),
              fontSize);

    str = (String) params.get("x");
    if (str != null) {
      try {
        x = Double.parseDouble(str);
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("y");
    if (str != null) {
      try {
        y = Double.parseDouble(str);
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("category");
    if (str != null && str.trim().length() > 0)
      category = str.trim();

    str = (String) params.get("value");
    if (str != null) {
      try {
        value = Double.parseDouble(str);
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("textPaint");
    if (str != null && str.trim().length() > 0) {
      try {
        textPaint = Color.decode(str);
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("arrowPaint");
    if (str != null && str.trim().length() > 0) {
      try {
        arrowPaint = Color.decode(str);
        drawArrow = true;
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("arrowAngle");
    if (str != null) {
      try {
        arrowAngle = Double.parseDouble(str);
        drawArrow = true;
      } catch (NumberFormatException nfex) { }
    }

    str = (String) params.get("textAnchor");
    if (str != null) {
      if ("BASELINE_CENTER".equals(str))
        textAnchor = TextAnchor.BASELINE_CENTER;
      else if ("BASELINE_LEFT".equals(str))
        textAnchor = TextAnchor.BASELINE_LEFT;
      else if ("BASELINE_RIGHT".equals(str))
        textAnchor = TextAnchor.BASELINE_RIGHT;
      else if ("BOTTOM_CENTER".equals(str))
        textAnchor = TextAnchor.BOTTOM_CENTER;
      else if ("BOTTOM_LEFT".equals(str))
        textAnchor = TextAnchor.BOTTOM_LEFT;
      else if ("BOTTOM_RIGHT".equals(str))
        textAnchor = TextAnchor.BOTTOM_RIGHT;
      else if ("CENTER".equals(str))
        textAnchor = TextAnchor.CENTER;
      else if ("CENTER_LEFT".equals(str))
        textAnchor = TextAnchor.CENTER_LEFT;
      else if ("CENTER_RIGHT".equals(str))
        textAnchor = TextAnchor.CENTER_RIGHT;
      else if ("HALF_ASCENT_CENTER".equals(str))
        textAnchor = TextAnchor.HALF_ASCENT_CENTER;
      else if ("HALF_ASCENT_LEFT".equals(str))
        textAnchor = TextAnchor.HALF_ASCENT_LEFT;
      else if ("HALF_ASCENT_RIGHT".equals(str))
        textAnchor = TextAnchor.HALF_ASCENT_RIGHT;
      else if ("TOP_CENTER".equals(str))
        textAnchor = TextAnchor.TOP_CENTER;
      else if ("TOP_LEFT".equals(str))
        textAnchor = TextAnchor.TOP_LEFT;
      else if ("TOP_RIGHT".equals(str))
        textAnchor = TextAnchor.TOP_RIGHT;
    }

    Plot plot = ((JFreeChart) chart).getPlot();
        if (plot instanceof XYPlot) {
      XYTextAnnotation anno = drawArrow
                  ? new XYPointerAnnotation(text, x, y, arrowAngle)
                  : new XYTextAnnotation(text, x, y);
      anno.setPaint(textPaint);
      anno.setFont(font);
      anno.setTextAnchor(textAnchor);
      if (drawArrow) {
        ((XYPointerAnnotation) anno).setArrowPaint(arrowPaint);
      }
      ((XYPlot) plot).addAnnotation(anno);
        } else if (plot instanceof CategoryPlot) {
      CategoryTextAnnotation anno = drawArrow
                  ? new CategoryPointerAnnotation(text, category, value, arrowAngle)
                  : new CategoryTextAnnotation(text, category, value);
      anno.setPaint(textPaint);
      anno.setFont(font);
      anno.setTextAnchor(textAnchor);
      if (drawArrow) {
        ((CategoryPointerAnnotation) anno).setArrowPaint(arrowPaint);
      }
      ((CategoryPlot) plot).addAnnotation(anno);
    }
  }
}
TOP

Related Classes of de.laures.cewolf.cpp.AnnotationProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.