ref #4232: adapt comparator to comaparator contract
authorKatja Luther <k.luther@bgbm.org>
Thu, 9 Feb 2017 12:31:11 +0000 (13:31 +0100)
committerKatja Luther <k.luther@bgbm.org>
Thu, 9 Feb 2017 12:31:40 +0000 (13:31 +0100)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/SourceComparator.java

index 1dd94c12968df8485286ac4fcd7bb1da80e54580..2f3315053703c8c6e56cf4f8b97a394ec4d319de 100644 (file)
@@ -27,40 +27,68 @@ public class SourceComparator implements Comparator<OriginalSourceBase> {
             return -1;
         }
         else if (id2==0) {
-            return 1;
+            if (id1 == 0){
+                return 0;
+            }else{
+                return 1;
+            }
         }
 
         // sort by type (Primary taxonomic > Primary Media > others
         // alphabetically by reference title cache)
-        if (type1 != null && type1.equals(OriginalSourceType.PrimaryTaxonomicSource)
-                && (type2 == null || !type2.equals(OriginalSourceType.PrimaryTaxonomicSource))) {
-            return -1;
-        }
-        if ((type1 == null || !type1.equals(OriginalSourceType.PrimaryTaxonomicSource))
-                && type2 != null && type2.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
-            return 1;
-        }
+        int result = 0;
 
-        if ((type1 == null || type1.equals(OriginalSourceType.PrimaryMediaSource))
-                && (type2==null || !type2.equals(OriginalSourceType.PrimaryMediaSource))) {
-            return -1;
-        }
-        if (type2 != null && type2.equals(OriginalSourceType.PrimaryMediaSource)
-                && type1!=null && !type1.equals(OriginalSourceType.PrimaryMediaSource)) {
-            return 1;
+        if (type1 == null){
+            result = 1;
+        } else if (type2 == null){
+            result = -1;
+        } else if (type1.equals(type2)){
+            result = 0;
+        } else if (type1.equals(OriginalSourceType.PrimaryTaxonomicSource) && !type2.equals(OriginalSourceType.PrimaryTaxonomicSource)){
+            result = -1;
+        } else if (type2.equals(OriginalSourceType.PrimaryTaxonomicSource) && !type1.equals(OriginalSourceType.PrimaryTaxonomicSource)){
+            result = 1;
+        }else if (type1.equals(OriginalSourceType.PrimaryMediaSource) && !type2.equals(OriginalSourceType.PrimaryMediaSource)){
+            result = -1;
+        } else if (type2.equals(OriginalSourceType.PrimaryMediaSource) && !type1.equals(OriginalSourceType.PrimaryMediaSource)){
+            result = 1;
         }
+//        if (type1 != null && type1.equals(OriginalSourceType.PrimaryTaxonomicSource)
+//                && (type2 == null || !type2.equals(OriginalSourceType.PrimaryTaxonomicSource))) {
+//            return -1;
+//        }
+//        if ((type1 == null || !type1.equals(OriginalSourceType.PrimaryTaxonomicSource))
+//                && type2 != null && type2.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
+//            return 1;
+//        }
+//
+//        if ((type1 == null || type1.equals(OriginalSourceType.PrimaryMediaSource))
+//                && (type2==null || !type2.equals(OriginalSourceType.PrimaryMediaSource))) {
+//            return -1;
+//        }
+//        if (type2 != null && type2.equals(OriginalSourceType.PrimaryMediaSource)
+//                && type1!=null && !type1.equals(OriginalSourceType.PrimaryMediaSource)) {
+//            return 1;
+//        }
 
         //sort by citation title cache
-        if(citation1!=null && citation2!=null){
-            return citation1.getTitleCache().compareTo(citation2.getTitleCache());
-        }
+        if (result == 0){
+            if(citation1!=null && citation2!=null){
+                result = citation1.getTitleCache().compareTo(citation2.getTitleCache());
+            }
+
+            if(o2.getCreated()!=null && o1.getCreated()!=null){
+                result = o2.getCreated().compareTo(o1.getCreated());
+            }
+            if (result == 0){
+                //default fallback
+                return o1.getId() - o2.getId();
+            }
 
-        if(o2.getCreated()!=null && o1.getCreated()!=null){
-            return o2.getCreated().compareTo(o1.getCreated());
         }
 
-        //default fallback
-        return o1.getId() - o2.getId();
+        return result;
+
 
     }
 }