Sort root entities in specimen editor #5797
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / derivateSearch / DerivateContentProvider.java
index d1ad70eac4ed661f35769d54f51e9bafeb4ad82e..808d67cfea1733d919ef873da2948ab0e7977f82 100644 (file)
@@ -1,9 +1,12 @@
 package eu.etaxonomy.taxeditor.view.derivateSearch;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.TreeNode;
@@ -19,7 +22,7 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 
 public class DerivateContentProvider implements ITreeContentProvider {
 
-    List<TreeNode> rootNodes;
+    private TreeSet<TreeNode> rootNodes;
 
        @Override
        public void dispose() {
@@ -44,9 +47,9 @@ public class DerivateContentProvider implements ITreeContentProvider {
 
        @Override
        public Object[] getElements(Object inputElement) {
-           rootNodes = new ArrayList<TreeNode>();
-           if(inputElement instanceof Set){
-               for (Object o: (Set)inputElement) {
+           rootNodes = new TreeSet<TreeNode>(new TreeNodeComparator());
+           if(inputElement instanceof Collection){
+               for (Object o: (Collection)inputElement) {
                    if(o instanceof SpecimenOrObservationBase){
                        SpecimenOrObservationBase<?> rootElement = (SpecimenOrObservationBase<?>)o;
                        if(rootElement!=null){
@@ -75,7 +78,6 @@ public class DerivateContentProvider implements ITreeContentProvider {
                 node.setParent(currentnode);
                 children.add(node);
             }
-            return children.toArray();
         }
         else if(value instanceof Sequence){
             Set<SingleRead> singleReads = ((Sequence) value).getSingleReads();
@@ -86,7 +88,8 @@ public class DerivateContentProvider implements ITreeContentProvider {
             }
             return children.toArray();
         }
-        else if(value instanceof SpecimenOrObservationBase){
+
+        if(value instanceof SpecimenOrObservationBase){
                List<DerivedUnit> derivates = getDerivates((SpecimenOrObservationBase<?>) value);
                for (DerivedUnit derivedUnit:derivates) {
                 TreeNode node = new TreeNode(derivedUnit);
@@ -121,7 +124,8 @@ public class DerivateContentProvider implements ITreeContentProvider {
         else if(element instanceof Sequence){
             return !((Sequence)element).getSingleReads().isEmpty();
         }
-        else if(element instanceof SpecimenOrObservationBase){
+
+        if(element instanceof SpecimenOrObservationBase){
                SpecimenOrObservationBase<?> specimenOrObservation = (SpecimenOrObservationBase<?>)element;
                for(DerivationEvent event:specimenOrObservation.getDerivationEvents()){
                    if(!event.getDerivatives().isEmpty()){
@@ -139,5 +143,25 @@ public class DerivateContentProvider implements ITreeContentProvider {
            }
            return derivates;
        }
+       
+       private class TreeNodeComparator implements Comparator<TreeNode>{
+
+               @Override
+               public int compare(TreeNode o1, TreeNode o2) {
+                       if(o1!=null && o2==null){
+                               return -1;
+                       }
+                       else if(o1==null && o2!=null){
+                               return 1;
+                       }
+                       else if(o1!=null && o2!=null){
+                               SpecimenOrObservationBase<?> specimenOrObservation1 = (SpecimenOrObservationBase<?>) o1.getValue();
+                               SpecimenOrObservationBase<?> specimenOrObservation2 = (SpecimenOrObservationBase<?>) o2.getValue();
+                               return specimenOrObservation1.getTitleCache().compareTo(specimenOrObservation2.getTitleCache());
+                       }
+                       return 0;
+               }
+               
+       }
 
 }