All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mxgraph.io.mxGdCodec Maven / Gradle / Ivy

Go to download

JGraphX Swing Component - Java Graph Visualization Library This is a binary & source redistribution of the original, unmodified JGraphX library originating from: "https://github.com/jgraph/jgraphx/archive/v3.4.1.3.zip". The purpose of this redistribution is to make the library available to other Maven projects.

There is a newer version: 3.4.1.3
Show newest version
/**
 * $Id: mxGdCodec.java,v 1.2 2012/09/20 14:54:14 david Exp $
 * Copyright (c) 2010-2012, JGraph Ltd
 */
package com.mxgraph.io;

import com.mxgraph.model.mxGraphModel;
import com.mxgraph.view.mxGraph;

import java.io.BufferedReader;
import java.io.StringReader;
import java.util.HashMap;

/**
 * Parses a GD .txt file and imports it in the given graph.
* This class depends from the classes contained in * com.mxgraph.io.gd. */ public class mxGdCodec { /** * Represents the different states in the parse of a file. */ public enum mxGDParseState { START, NUM_NODES, PARSING_NODES, PARSING_EDGES } /** * Map with the vertex cells added in the addNode method. */ protected static HashMap cellsMap = new HashMap(); /** * Parses simple GD format and populate the specified graph * @param input GD file to be parsed * @param graph Graph where the parsed graph is included. */ public static void decode(String input, mxGraph graph) { BufferedReader br = new BufferedReader(new StringReader(input)); mxGDParseState state = mxGDParseState.START; Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); try { String line = br.readLine().trim(); while (line != null) { switch (state) { case START: { if (!line.startsWith("#")) { state = mxGDParseState.NUM_NODES; } else { break; } } case NUM_NODES: { if (!line.startsWith("#")) { int numVertices = Integer.valueOf(line); for (int i = 0; i < numVertices; i++) { String label = String.valueOf(i); Object vertex = graph.insertVertex(parent, label, label, 0, 0, 10, 10); cellsMap.put(label, vertex); } } else { state = mxGDParseState.PARSING_EDGES; } 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]); //Set the node name as label. String label = items[0]; //Insert a new vertex in the graph Object vertex = graph.insertVertex(parent, label, label, x - width / 2.0, y - height / 2.0, width, height); cellsMap.put(label, vertex); } } break; } case PARSING_EDGES: { if (!line.equals("")) { String[] items = line.split(" "); if (items.length != 2) { throw new Exception("Error in parsing"); } else { Object source = cellsMap.get(items[0]); Object target = cellsMap.get(items[1]); graph.insertEdge(parent, null, "", source, target); } } break; } } line = br.readLine(); } } catch (Exception e) { e.printStackTrace(); } finally { graph.getModel().endUpdate(); } } /** * Generates a GD text output with the cells in the graph. * The implementation only uses the cells located in the default parent. * @param graph Graph with the cells. * @return The GD document generated. */ public static String encode(mxGraph graph) { StringBuilder builder = new StringBuilder(); Object parent = graph.getDefaultParent(); Object[] vertices = mxGraphModel.getChildCells(graph.getModel(), parent, true, false); builder.append("# Number of Nodes (0-" + String.valueOf(vertices.length - 1) + ")"); builder.append(String.valueOf(vertices.length)); // TODO return builder.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy