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

br.com.etyllica.linear.graph.GenericGraph Maven / Gradle / Ivy

package br.com.etyllica.linear.graph;

import java.util.ArrayList;
import java.util.List;

import br.com.etyllica.linear.Point2D;

public class GenericGraph> {

	protected List> nodes;
	
	protected List edges;
	
	public GenericGraph() {
		super();
		
		nodes = new ArrayList>();
		edges = new ArrayList();
	}

	public List> getNodes() {
		return nodes;
	}

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

	public void addNode(Node node) {
		this.nodes.add(node);
	}
	
	public Node addNode(int index, Point2D point) {
		
		Node node = new Node(point.getX(), point.getY());
		this.nodes.add(index, node);
		
		return node;
	}
	
	public Node addNode(Point2D point) {
		
		Node node = new Node(point.getX(), point.getY());
		this.nodes.add(node);
		
		return node;
	}

	public List getEdges() {
		return edges;
	}
	
	public List getEdges(Node node) {
		
		List nodeEdges = new ArrayList();
		
		for(E edge:edges) {
			if(edge.getOrigin()==node||edge.getDestination()==node) {
				nodeEdges.add(edge);
			}
		}
		
		return nodeEdges;
	}
	
	public void removeNode(Node node) {
		nodes.remove(node);
		removeEdgesFromNode(node);
	}
	
	public void removeEdgesFromNode(Node node) {
		for (int i = edges.size()-1;i>=0;i--) {
			
			E edge = edges.get(i);
			
			if (edge.getOrigin() == node || edge.getDestination() == node) {
				edges.remove(i);
			}
		}
	}
	
	public boolean hasEdge(Node node, Node otherNode) {
		for(E edge:edges) {
			if ((edge.getOrigin()==node||edge.getDestination()==node) ||
			   (edge.getOrigin()==otherNode||edge.getDestination()==otherNode)) {
				return true;
			}
		}
		
		return false;
	}

	public void setEdges(List edges) {
		this.edges = edges;
	}
	
	public void addEdge(E edge) {
		this.edges.add(edge);
	}
			
	public void clear() {
		nodes.clear();
		edges.clear();
	}

	public List> neighbors(Node node) {
		Node parent = node.getParent();
		
		List> neighbors = new ArrayList>();
		
		if(parent == null) {
			return neighbors;
		}
		
		for(E edge:getEdges(node)) {
			
			Node origin = edge.getOrigin();
			
			if(!neighbors.contains(origin)) {
				neighbors.add(origin);	
			}
			
			Node destination = edge.getDestination();
			
			if(!neighbors.contains(destination)) {
				neighbors.add(destination);	
			}
		}
		
		return neighbors;
	}
	
	public boolean isEmpty() {
		return nodes.size() == 0;
	}

	public void moveNodes(int x, int y) {
		for(Node node: nodes) {
			node.getPoint().setOffset(x, y);
		}
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy