package socialkademlia.routing; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.NoSuchElementException; import kademlia.KadConfiguration; import kademlia.node.Node; import kademlia.routing.JKademliaRoutingTable; /** * Implementation of SocialKademliaRoutingTable * * @author Joshua Kissoon * @since 20140501 */ public class JSocialKademliaRoutingTable extends JKademliaRoutingTable implements SocialKademliaRoutingTable { /* Connections of the actor of this node in the DOSN */ private final HashMap<String, Connection> connections; { connections = new HashMap<>(); } public JSocialKademliaRoutingTable(Node localNode, KadConfiguration config) { super(localNode, config); } @Override public synchronized void insertConnection(String actorId, Node node) { if (this.containsConnection(actorId)) { Connection c = this.connections.get(actorId); c.setNode(node); c.setSeenNow(); } else { this.connections.put(actorId, new Connection(actorId, node)); } } @Override public synchronized boolean containsConnection(String actorId) { return this.connections.containsKey(actorId); } @Override public synchronized boolean removeConnection(String actorId) { if (this.containsConnection(actorId)) { this.connections.remove(actorId); return true; } return false; } @Override public synchronized List<Connection> getConnections() { return this.connections.isEmpty() ? new ArrayList<>() : new ArrayList<>(this.connections.values()); } @Override public synchronized Node getConnectionNode(String actorId) { if (this.containsConnection(actorId)) { return this.connections.get(actorId).getNode(); } else { throw new NoSuchElementException("This connection does not exist."); } } }