ObjectComparator.java
01 /*
02  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
03  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
04  *
05  *  This file is part of GATE (see http://gate.ac.uk/), and is free
06  *  software, licenced under the GNU Library General Public License,
07  *  Version 2, June 1991 (in the distribution as file licence.html,
08  *  and also available at http://gate.ac.uk/gate/licence.html).
09  *
10  *  ObjectComparator.java
11  *
12  *  Valentin Tablan, 06-Dec-2004
13  *
14  *  $Id: ObjectComparator.java 17600 2014-03-08 18:47:11Z markagreenwood $
15  */
16 
17 package gate.util;
18 
19 import java.util.Comparator;
20 
21 /**
22  * A Comparator implementation for Object values.
23  * If the values provided are not comparable, then they are converted to String 
24  * and the String values are compared.
25  * This utility is useful for GUI components that need to sort their contents.
26  */
27 public class ObjectComparator implements Comparator<Object>{
28 
29   /**
30    * Compares two objects.
31    */
32   @SuppressWarnings({"unchecked""rawtypes"})
33   @Override
34   public int compare(Object o1, Object o2){
35     // If both values are null, return 0.
36     if (o1 == null && o2 == null) {
37       return 0;
38     else if (o1 == null) { // Define null less than everything.
39       return -1;
40     else if (o2 == null) {
41       return 1;
42     }
43     int result;
44     if(o1 instanceof Comparable){
45       try {
46         result = ((Comparable)o1).compareTo(o2);
47       catch(ClassCastException cce) {
48         String s1 = o1.toString();
49         String s2 = o2.toString();
50         result = s1.compareTo(s2);
51       }
52     else {
53       String s1 = o1.toString();
54       String s2 = o2.toString();
55       result = s1.compareTo(s2);
56     }
57     
58     return result;
59   }
60 }