Package com.mxgraph.reader

Source Code of com.mxgraph.reader.mxGraphViewImageReader

/**
* Copyright (c) 2007, Gaudenz Alder
*/

package com.mxgraph.reader;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import com.mxgraph.canvas.mxGraphics2DCanvas;
import com.mxgraph.canvas.mxICanvas;
import com.mxgraph.canvas.mxImageCanvas;
import com.mxgraph.util.mxRectangle;
import com.mxgraph.util.mxUtils;

/**
* A converter that renders display XML data onto a graphics canvas. This
* reader can only be used to generate images for encoded graph views.
*/
public class mxGraphViewImageReader extends mxGraphViewReader
{

  /**
   * Specifies the background color. Default is null.
   */
  protected Color background;

  /**
   * Specifies if the image should be anti-aliased. Default is true.
   */
  protected boolean antiAlias;

  /**
   * Specifies the border which is added to the size of the graph. Default is
   * 0.
   */
  protected int border;

  /**
   * Specifies the border which is added to the size of the graph. Default is
   * true.
   */
  protected boolean cropping;

  /**
   * Defines the clip to be drawn. Default is null.
   */
  protected mxRectangle clip;

  /**
   * Constructs a new reader with a transparent background.
   */
  public mxGraphViewImageReader()
  {
    this(null);
  }

  /**
   * Constructs a new reader with the given background color.
   */
  public mxGraphViewImageReader(Color background)
  {
    this(background, 0);
  }

  /**
   * Constructs a new reader with a transparent background.
   */
  public mxGraphViewImageReader(Color background, int border)
  {
    this(background, border, true);
  }

  /**
   * Constructs a new reader with a transparent background.
   */
  public mxGraphViewImageReader(Color background, int border,
      boolean antiAlias)
  {
    this(background, border, antiAlias, true);
  }

  /**
   * Constructs a new reader with a transparent background.
   */
  public mxGraphViewImageReader(Color background, int border,
      boolean antiAlias, boolean cropping)
  {
    setBackground(background);
    setBorder(border);
    setAntiAlias(antiAlias);
    setCropping(cropping);
  }

  /**
   *
   */
  public Color getBackground()
  {
    return background;
  }

  /**
   *
   */
  public void setBackground(Color background)
  {
    this.background = background;
  }

  /**
   *
   */
  public int getBorder()
  {
    return border;
  }

  /**
   *
   */
  public void setBorder(int border)
  {
    this.border = border;
  }

  /**
   *
   */
  public boolean isAntiAlias()
  {
    return antiAlias;
  }

  /**
   *
   */
  public void setAntiAlias(boolean antiAlias)
  {
    this.antiAlias = antiAlias;
  }

  /**
   * Specifies the optional clipping rectangle.
   */
  public boolean isCropping()
  {
    return cropping;
  }

  /**
   *
   */
  public void setCropping(boolean value)
  {
    this.cropping = value;
  }

  /**
   *
   */
  public mxRectangle getClip()
  {
    return clip;
  }

  /**
   *
   */
  public void setClip(mxRectangle value)
  {
    this.clip = value;
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.mxgraph.reader.mxGraphViewReader#createCanvas(java.util.Hashtable)
   */
  public mxICanvas createCanvas(Map<String, Object> attrs)
  {
    int width = 0;
    int height = 0;
    int dx = 0;
    int dy = 0;

    mxRectangle tmp = getClip();

    if (tmp != null)
    {
      dx -= (int) tmp.getX();
      dy -= (int) tmp.getY();
      width = (int) tmp.getWidth();
      height = (int) tmp.getHeight();
    }
    else
    {
      int x = (int) Math.round(mxUtils.getDouble(attrs, "x"));
      int y = (int) Math.round(mxUtils.getDouble(attrs, "y"));
      width = (int) (Math.round(mxUtils.getDouble(attrs, "width")))
          + border + 3;
      height = (int) (Math.round(mxUtils.getDouble(attrs, "height")))
          + border + 3;

      if (isCropping())
      {
        dx = -x + 3;
        dy = -y + 3;
      }
      else
      {
        width += x;
        height += y;
      }
    }

    mxImageCanvas canvas = new mxImageCanvas(createGraphicsCanvas(), width,
        height, getBackground(), isAntiAlias());
    canvas.setTranslate(dx, dy);

    return canvas;
  }

  /**
   * Hook that creates the graphics canvas.
   */
  protected mxGraphics2DCanvas createGraphicsCanvas()
  {
    return new mxGraphics2DCanvas();
  }

  /**
   * Creates the image for the given display XML file. (Note: The XML file is
   * an encoded mxGraphView, not mxGraphModel.)
   *
   * @param filename
   *            Filename of the display XML file.
   * @return Returns an image representing the display XML file.
   */
  public static BufferedImage convert(String filename,
      mxGraphViewImageReader viewReader)
      throws ParserConfigurationException, SAXException, IOException
  {
    return convert(new InputSource(new FileInputStream(filename)),
        viewReader);
  }

  /**
   * Creates the image for the given display XML input source. (Note: The XML
   * is an encoded mxGraphView, not mxGraphModel.)
   *
   * @param inputSource
   *            Input source that contains the display XML.
   * @return Returns an image representing the display XML input source.
   */
  public static BufferedImage convert(InputSource inputSource,
      mxGraphViewImageReader viewReader)
      throws ParserConfigurationException, SAXException, IOException
  {
    BufferedImage result = null;
    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    XMLReader reader = parser.getXMLReader();

    reader.setContentHandler(viewReader);
    reader.parse(inputSource);

    if (viewReader.getCanvas() instanceof mxImageCanvas)
    {
      result = ((mxImageCanvas) viewReader.getCanvas()).destroy();
    }

    return result;
  }

}
TOP

Related Classes of com.mxgraph.reader.mxGraphViewImageReader

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.