@Override public int compare(GraphObject t0, GraphObject t1) { long x0 = t1.getReturnTime(t0); long x1 = t0.getReturnTime(t1); if (x0 == x1) { // either same or == 0 long d = t0.getStartTime() - t1.getStartTime(); if (d < 0) return -1; else if (d > 0) return 1; else if (t0.getName() == null) return -1; else if (t1.getName() == null) return 1; else return t0.getName().compareTo(t1.getName()); } else if (x0 == 0) return -1; else if (x1 == 0) return 1; else if (x0 < x1) return 1; else return -1; }
long getReturnTime(GraphObject to) { for (GraphLink lnk : out_links) { if (lnk.getType() == LinkType.RETURN) { GraphObject go = lnk.getToObject(); if (go == to) return lnk.getTime(); else { long rt = go.getReturnTime(to); if (rt != 0) return Math.min(lnk.getTime(), rt); } } } return 0; }