Package com.mxgraph.io.gd

Source Code of com.mxgraph.io.gd.mxGdDocument

/**
* $Id: mxGdDocument.java,v 1.2 2011-01-31 12:13:34 david Exp $
* Copyright (c) 2010, Gaudenz Alder, David Benson
*/
package com.mxgraph.io.gd;

import com.mxgraph.util.mxPoint;
import java.io.BufferedReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

/**
* This class is a representation of a GD file.<br/>
* Allows access to the nodes and edges of the graph.
*/
public class mxGdDocument
{
  /**
   * Represents the different states in the parse of a file.
   */
  public enum mxGDParseState
  {
    START, PARSING_NODES, PARSING_EDGES
  }

  private List<mxGdNode> nodes = new ArrayList<mxGdNode>();

  private List<mxGdEdge> edges = new ArrayList<mxGdEdge>();

  /**
   * @return Returns the list of edges.
   */
  public List<mxGdEdge> getEdges()
  {
    return edges;
  }

  /**
   * @return Returns the list of nodes.
   */
  public List<mxGdNode> getNodes()
  {
    return nodes;
  }

  public void setEdges(List<mxGdEdge> edges)
  {
    this.edges = edges;
  }

  public void setNodes(List<mxGdNode> nodes)
  {
    this.nodes = nodes;
  }

  /**
   * Parses the String with the file content and loads into the document,
   * the data of nodes and edges.
   * @param gd String with the file content.
   */
  public void parse(String gd)
  {
    gd = gd.trim();
    BufferedReader br = new BufferedReader(new StringReader(gd));
    mxGDParseState state = mxGDParseState.START;
    try
    {
      String line = br.readLine();
      while (line != null)
      {
        switch (state)
        {
          case START:
          {
            if (line.startsWith("# Nodes"))
            {
              state = mxGDParseState.PARSING_NODES;
            }
            else
            {
              throw new Exception("Error in parsing");
            }
            break;
          }
          case PARSING_NODES:
          {
            if (line.startsWith("# Edges"))
            {
              state = mxGDParseState.PARSING_EDGES;
            }
            else if (!line.equals(""))
            {
              String[] items = line.split(",");
              if (items.length != 5)
              {
                throw new Exception("Error in parsing");
              }
              else
              {
                double x = Double.valueOf(items[1]);
                double y = Double.valueOf(items[2]);
                double width = Double.valueOf(items[3]);
                double height = Double.valueOf(items[4]);
                mxGdNode node = new mxGdNode(items[0],
                    new mxPoint(x, y), new mxPoint(width,
                        height));
                nodes.add(node);
              }
            }
            break;
          }
          case PARSING_EDGES:
          {
            if (!line.equals(""))
            {
              String[] items = line.split(",");
              if (items.length != 2)
              {
                throw new Exception("Error in parsing");
              }
              else
              {
                String source = items[0];
                String target = items[1];
                mxGdEdge edge = new mxGdEdge(source, target);
                edges.add(edge);
              }
            }
            break;
          }
        }

        line = br.readLine();
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  /**
   * @return Returns the String representation of the document.
   */
  public String getDocumentString()
  {
    StringBuilder buf = new StringBuilder("# Nodes\n");

    for (mxGdNode node : nodes)
    {
      buf.append(node.getNodeString());
      buf.append("\n");
    }
   
    buf.append("# Edges\n");
   
    for (mxGdEdge edge : edges)
    {
      buf.append(edge.getEdgeString());
      buf.append("\n");
    }
   
    return buf.toString();
  }

}
TOP

Related Classes of com.mxgraph.io.gd.mxGdDocument

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.