Skip to content
Snippets Groups Projects
Commit a9f81e2c authored by srosse's avatar srosse
Browse files

OO-432: add a comparator method which sort the repository entries by name AND by closed status

parent fef48f05
No related branches found
No related tags found
No related merge requests found
......@@ -157,32 +157,39 @@ public class DefaultColumnDescriptor implements ColumnDescriptor {
} else if (a instanceof Comparable && b instanceof Comparable) {
return compareComparablesAndTimestamps(a, b);
} else if (a instanceof Boolean && b instanceof Boolean) { // faster than string compare
return compareBooleansHandlingNulls(a, b);
return compareBooleans((Boolean)a, (Boolean)b);
} else { // don't know how to compare, use the String value
return a.toString().compareTo(b.toString());
}
}
protected int compareString(final String a, final String b) {
return collator.compare(a, b);
}
private int compareBooleansHandlingNulls(final Object a, final Object b) {
boolean ba = ((Boolean)a).booleanValue();
boolean bb = ((Boolean)b).booleanValue();
protected int compareBooleans(final Boolean a, final Boolean b) {
boolean ba = a.booleanValue();
boolean bb = b.booleanValue();
return ba? (bb? 0: -1):(bb? 1: 0);
}
private int compareComparablesAndTimestamps(final Object a, final Object b) {
protected int compareComparablesAndTimestamps(final Object a, final Object b) {
// grmpf, we need to check on timestamp since Timestamp cannot compare dates (ClassCastException)
// See also http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5103041 for the java 1.4/1.5 code bug
if (a instanceof Timestamp) { // a timestamp (a) cannot compare a date (b), but vice versa is ok.
if (a instanceof Timestamp && b instanceof Date) { // a timestamp (a) cannot compare a date (b), but vice versa is ok.
Timestamp ta = (Timestamp)a;
Date aAsDate = new Date(ta.getTime()); // nanos get lost here, but milis should be enough in most cases, TODO:fj:c better solution here
return ((Comparable)aAsDate).compareTo(b);
//TODO:fj:a see also the todo in AuditInterceptor.java!
}else{
Date aAsDate = new Date(ta.getTime());
return aAsDate.compareTo((Date)b);
} else if (a instanceof Date && b instanceof Timestamp) {
Timestamp tb = (Timestamp)b;
Date bAsDate = new Date(tb.getTime());
return ((Date)a).compareTo(bAsDate);
} else {
return ((Comparable)a).compareTo(b);
}
}
private int compareNullObjects(final Object a, final Object b) {
protected int compareNullObjects(final Object a, final Object b) {
boolean ba = (a == null);
boolean bb = (b == null);
return ba? (bb? 0: -1):(bb? 1: 0);
......
......@@ -98,7 +98,33 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry>
translator.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, acRenderer));
tableCtr.addColumnDescriptor(new RepositoryEntryTypeColumnDescriptor("table.header.typeimg", 1, null,
translator.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT));
tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.displayname", 2, enableDirectLaunch ? TABLE_ACTION_SELECT_ENTRY : null, translator.getLocale()));
ColumnDescriptor nameColDesc = new DefaultColumnDescriptor("table.header.displayname", 2, enableDirectLaunch ? TABLE_ACTION_SELECT_ENTRY : null, translator.getLocale()) {
@Override
public int compareTo(int rowa, int rowb) {
Object o1 =table.getTableDataModel().getValueAt(rowa, 1);
Object o2 = table.getTableDataModel().getValueAt(rowb, 1);
if(o1 == null || !(o1 instanceof RepositoryEntry)) return -1;
if(o2 == null || !(o2 instanceof RepositoryEntry)) return 1;
RepositoryEntry re1 = (RepositoryEntry)o1;
RepositoryEntry re2 = (RepositoryEntry)o2;
boolean c1 = RepositoryManager.getInstance().createRepositoryEntryStatus(re1.getStatusCode()).isClosed();
boolean c2 = RepositoryManager.getInstance().createRepositoryEntryStatus(re2.getStatusCode()).isClosed();
int result = (c2 == c1 ? 0 : (c1 ? 1 : -1));//same as Boolean compare
if(result == 0) {
Object a = table.getTableDataModel().getValueAt(rowa, dataColumn);
Object b = table.getTableDataModel().getValueAt(rowb, dataColumn);
if(a == null || !(a instanceof String)) return -1;
if(b == null || !(b instanceof String)) return 1;
String s1 = (String)a;
String s2 = (String)b;
result = compareString(s1, s2);
}
return result;
}
};
tableCtr.addColumnDescriptor(nameColDesc);
tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.author", 3, null, translator.getLocale()));
tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.access", 4, null, translator.getLocale()));
tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.date", 5, null, translator.getLocale()));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment