package org.archstudio.graphlayout; import java.util.ArrayList; import java.util.List; import org.archstudio.swtutils.constants.Orientation; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; public class GraphLayout implements java.io.Serializable { private static final long serialVersionUID = -6699237769430902424L; protected List<Node> nodes; protected List<Edge> edges; public GraphLayout() { nodes = new ArrayList<Node>(); edges = new ArrayList<Edge>(); } public void addNode(Node n) { nodes.add(n); } public int getNumNodes() { return nodes.size(); } public Node getNodeAt(int index) { return nodes.get(index); } public void addEdge(Edge e) { edges.add(e); } public int getNumEdges() { return edges.size(); } public Edge getEdgeAt(int index) { return edges.get(index); } public static class Node { protected String nodeId; protected Rectangle bounds; protected List<AbstractPort> ports; public Node() { this.nodeId = null; this.bounds = null; ports = new ArrayList<AbstractPort>(); } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public String getNodeId() { return nodeId; } public void setBounds(Rectangle bounds) { this.bounds = bounds; } public Rectangle getBounds() { return bounds; } public void addPort(AbstractPort p) { ports.add(p); } public AbstractPort[] getAllPorts() { return ports.toArray(new AbstractPort[0]); } } public static abstract class AbstractPort { protected String id; public AbstractPort(String id) { this.id = id; } public void setId(String id) { this.id = id; } public String getId() { return id; } } public static class PlainPort extends AbstractPort { public PlainPort(String id) { super(id); } } public static class CompassPort extends AbstractPort { protected Orientation direction; public CompassPort(String id, Orientation direction) { super(id); this.direction = direction; } public void setDirection(Orientation direction) { this.direction = direction; } public Orientation getDirection() { return direction; } } public static class Edge { protected String edgeId; protected List<Point> points = new ArrayList<Point>(); protected String node1Id, port1Id; protected String node2Id, port2Id; public Edge() { } public Edge(Point[] pointArray) { for (Point element : pointArray) { points.add(element); } } public void setEndpoint1(String nodeId, String portId) { this.node1Id = nodeId; this.port1Id = portId; } public void setEndpoint2(String nodeId, String portId) { this.node2Id = nodeId; this.port2Id = portId; } public String getNode1Id() { return node1Id; } public String getNode2Id() { return node2Id; } public String getPort1Id() { return port1Id; } public String getPort2Id() { return port2Id; } public void addPoint(Point p) { points.add(p); } public int getNumPoints() { return points.size(); } public Point getPointAt(int i) { return points.get(i); } public String getEdgeId() { return edgeId; } public void setEdgeId(String string) { edgeId = string; } } }