1 package example.symphony;
\r
3 import java.util.Comparator;
\r
4 import java.util.logging.Level;
\r
5 import java.util.logging.Logger;
\r
6 import peersim.core.Node;
\r
9 * Comparator that measure the relative distance from a target node
\r
11 * @author Andrea Esposito <and1989@gmail.com>
\r
13 public class SymphonyNodeComparator implements Comparator<Node> {
\r
15 private final int symphonyID;
\r
16 private double target;
\r
18 public SymphonyNodeComparator(int symphonyID) {
\r
19 this.symphonyID = symphonyID;
\r
22 public SymphonyNodeComparator(int symphonyID, double target) {
\r
24 this.target = target;
\r
27 public SymphonyNodeComparator(int symphonyID, Node targetNode) {
\r
29 SymphonyProtocol symphony = (SymphonyProtocol) targetNode.getProtocol(symphonyID);
\r
30 this.target = symphony.getIdentifier();
\r
33 public int compare(Node o1, Node o2) {
\r
35 SymphonyProtocol symphony1 = (SymphonyProtocol) o1.getProtocol(symphonyID);
\r
36 SymphonyProtocol symphony2 = (SymphonyProtocol) o2.getProtocol(symphonyID);
\r
38 Double identifier1 = symphony1.getIdentifier();
\r
39 Double identifier2 = symphony2.getIdentifier();
\r
41 Double distance1 = Math.abs(target - identifier1) % 1;
\r
42 Double distance2 = Math.abs(target - identifier2) % 1;
\r
44 identifier1 = Math.min(1.0 - distance1, distance1);
\r
45 identifier2 = Math.min(1.0 - distance2, distance2);
\r
47 Logger.getLogger(SymphonyNodeComparator.class.getName()).log(Level.FINEST, "id1= " + symphony1.getIdentifier() + " target= " + target + " id2= " + symphony2.getIdentifier() + " res= " + identifier1.compareTo(identifier2));
\r
49 return identifier1.compareTo(identifier2);
\r