package doser.sequencedetection.graph; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentSkipListMap; public class Node<T extends Comparable<T>> implements Comparable<Node<T>> { private T data; private DijkstraData<T> dijkstraData; private ConcurrentSkipListMap<Integer, Edge<T>> edgeMap; private int key; private boolean marked; private NodeTypes type; Node(T data) { this.key = 0; this.data = data; this.edgeMap = new ConcurrentSkipListMap<Integer, Edge<T>>(); this.dijkstraData = null; this.marked = false; this.type = NodeTypes.WHITE; } public void addAdjacencyNode(Edge<T> edge) { edgeMap.put(key++, edge); } public void addAdjacencyNode(Node<T> node) { edgeMap.put(key++, new Edge<T>(node, -1)); } public void addAdjacencyNode(Node<T> node, float weight) { edgeMap.put(key++, new Edge<T>(node, weight)); } @Override public int compareTo(Node<T> o) { if (data.compareTo(o.getData()) == 0) { return 0; } else { return 1; } } public T getData() { return data; } /** * Return the Dijkstra Data Object * * @return Returns the Dijkstra Data Object */ DijkstraData<T> getDijkstraData() { return dijkstraData; } public ConcurrentSkipListMap<Integer, Edge<T>> getEdgeMap() { return edgeMap; } boolean getMarked() { return marked; } List<Edge<T>> getOutgoingEdges() { List<Edge<T>> edgeLst = new LinkedList<Edge<T>>(); for (Map.Entry<Integer, Edge<T>> entry : edgeMap.entrySet()) { Edge<T> edge = entry.getValue(); edgeLst.add(edge); } return edgeLst; } NodeTypes getType() { return type; } public Edge<T> hasEdgeToNode(Node<T> data) { for (Map.Entry<Integer, Edge<T>> entry : edgeMap.entrySet()) { Edge<T> edge = entry.getValue(); if (edge.getEndNode().compareTo(data) == 0) { return edge; } } return null; } /** * Sets the Dijkstra Data Object * * @return Returns the Dijkstra Data Object */ void setDijkstraData(DijkstraData<T> data) { this.dijkstraData = data; } void setMarked() { marked = true; } void setType(NodeTypes type) { this.type = type; } void setUnmarked() { marked = false; } }