package com.dgex.offspring.application.ui.peers;
import nxt.peer.Peer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import com.dgex.offspring.config.CompareMe;
public class PeerComparator extends ViewerComparator {
private int columnID;
private static final int DESCENDING = 1;
private static final int ASSCENDING = 0;
private int direction = DESCENDING;
public PeerComparator() {
this.columnID = PeerTable.COLUMN_ADDRESS;
// direction = DESCENDING;
direction = ASSCENDING;
}
public int getDirection() {
return direction == 1 ? SWT.DOWN : SWT.UP;
}
public void setColumn(int columnID) {
if (columnID == this.columnID) {
// Same column as last sort; toggle the direction
direction = 1 - direction;
}
else {
// New column; do an ascending sort
this.columnID = columnID;
direction = DESCENDING;
}
}
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
Peer p1 = (Peer) e1;
Peer p2 = (Peer) e2;
int rc = 0;
switch (columnID) {
case PeerTable.COLUMN_DISCONNECTED:
rc = CompareMe.compare(p1.getState(), p2.getState());
break;
case PeerTable.COLUMN_WELLKNOWN:
rc = CompareMe.compare(p1.isWellKnown(), p2.isWellKnown());
break;
case PeerTable.COLUMN_ANNOUNCED_ADDRESS:
rc = CompareMe
.compare(p1.getAnnouncedAddress(), p2.getAnnouncedAddress());
break;
case PeerTable.COLUMN_ADDRESS:
rc = CompareMe.compare(p1.getPeerAddress(), p2.getPeerAddress());
break;
case PeerTable.COLUMN_WEIGHT:
rc = CompareMe.compare(p1.getWeight(), p2.getWeight());
break;
case PeerTable.COLUMN_DOWNLOADED:
rc = CompareMe
.compare(p1.getDownloadedVolume(), p2.getDownloadedVolume());
break;
case PeerTable.COLUMN_UPLOADED:
rc = CompareMe.compare(p1.getUploadedVolume(), p2.getUploadedVolume());
break;
case PeerTable.COLUMN_SOFTWARE:
rc = CompareMe.compare(p1.getSoftware(), p2.getSoftware());
break;
default:
rc = 0;
}
// If descending order, flip the direction
if (direction == DESCENDING) {
rc = -rc;
}
return rc;
}
}