/* * Graph.java * * Created on October 25, 2005, 2:26 PM * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package org.tgdb.util.graph; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; /** * * @author lami */ public class Graph implements Serializable { protected ArrayList nodes; protected ArrayList edges; /** Creates a new instance of Graph */ public Graph() { this.nodes = new ArrayList(); this.edges = new ArrayList(); } public void makeConnectedOnly() throws GraphException { Iterator i = nodes.iterator(); Node node = null; ArrayList removeThese = new ArrayList(); System.out.println("Nodes size: "+nodes.size()); while(i.hasNext()) { node = (Node)i.next(); if(!node.isConnected()) removeThese.add(node); } i = removeThese.iterator(); while(i.hasNext()) { removeNode((Node)i.next()); } System.out.println("Nodes size: "+nodes.size()); } public void addNode(Node node) { nodes.add(node); } public Node getNode(int index) throws GraphException { if(index > 0 || index < nodes.size()) return (Node)nodes.get(index); else throw new GraphException("Node index out of bounds."); } public Node getNode(Node node) { return (Node)nodes.get(nodes.indexOf(node)); } public Node getNodeById(int id) { Iterator i = nodes.iterator(); Node tmp = null; while(i.hasNext()) { tmp = (Node)i.next(); if(tmp.getId() == id) return tmp; } return null; } public void removeNode(int index) throws GraphException { if(index > 0 || index < nodes.size()) nodes.remove(index); else throw new GraphException("Node index out of bounds."); } public void removeEdge(Edge edge) { edges.remove(edges.indexOf(edge)); } public void removeEdge(int index) throws GraphException { if(index > 0 || index < edges.size()) edges.remove(index); else throw new GraphException("Edge index out of bounds."); } public void removeNode(Node node) throws GraphException { int index = nodes.indexOf(node); if(index > 0 || index < nodes.size()) nodes.remove(index); else throw new GraphException("Node index out of bounds."); } public void clear() { nodes.clear(); edges.clear(); } public boolean containsNode(Node node) { return nodes.contains(node); } public boolean containsEdge(Edge edge) { return edges.contains(edge); } public int numberOfNodes() { return nodes.size(); } public int numberOfEdges() { return edges.size(); } public ArrayList getNodes() { return nodes; } public ArrayList getEdges() { return edges; } public Edge getEdge(int index) throws GraphException { if(index < 0 || index > edges.size()) throw new GraphException("Edge index out of bounds."); return (Edge)edges.get(index); } public Edge getEdge(Edge edge) { return (Edge)edges.get(edges.indexOf(edge)); } public Edge getEdge(Node from, Node to) { Edge e = null; Iterator i = edges.iterator(); while(i.hasNext()) { e = (Edge)i.next(); if(from.equals(e.getFrom()) && to.equals(e.getTo())) return e; } return null; } public void addEdge(Edge edge) throws GraphException { edges.add(edge); } public ArrayList getEdgesConnectingTo(Node node) { ArrayList list = new ArrayList(); Iterator i = edges.iterator(); Edge edge = null; while(i.hasNext()) { edge = (Edge)i.next(); if(node.equals(edge.getTo())) list.add(edge); } return list; } public ArrayList getNodesConnectingTo(Node node) { ArrayList list = new ArrayList(); Iterator i = edges.iterator(); Edge edge = null; while(i.hasNext()) { edge = (Edge)i.next(); if(node.equals(edge.getFrom())) list.add(edge.getTo()); } return list; } }