Merge branch 'release/5.32.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / util / TaxonTreeNodeContentProvider.java
index 050cb95f5cfafb9fb714b43915e3f58a43d8cdbc..63d855623f9ab61c2bf59021525d126744c84b6a 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2017 EDIT
 * European Distributed Institute of Taxonomy
 package eu.etaxonomy.taxeditor.util;
 
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
 
-import eu.etaxonomy.cdm.hibernate.HHH_9751_Util;
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.taxon.Classification;
-import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author pplitzner
  * @date 05.09.2017
- *
  */
 public class TaxonTreeNodeContentProvider implements ITreeContentProvider {
 
     private static final Object[] NO_CHILDREN = new Object[0];
 
-    /**
-     * {@inheritDoc}
-     */
+    private ITaxonNodeService taxonNodeService;
+
     @Override
     public Object[] getElements(Object inputElement) {
         if(inputElement instanceof Collection){
-            return ((Collection) inputElement).toArray();
+            return ((Collection<?>) inputElement).toArray();
         }
         return this.getChildren(inputElement);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Object[] getChildren(Object parentElement) {
+        if (taxonNodeService == null){
+            taxonNodeService = CdmStore.getService(ITaxonNodeService.class);
+        }
         Object[] children = null;
 
-        if(parentElement instanceof Classification){
-            children = ((Classification) parentElement).getChildNodes().toArray();
-        }
-        //taxon node
-        if(parentElement instanceof ITaxonTreeNode){
-            ITaxonTreeNode treeNode = (ITaxonTreeNode) HibernateProxyHelper.deproxy(parentElement);
-            List<TaxonNode> childrenSet = treeNode.getChildNodes();
-            HHH_9751_Util.removeAllNull(childrenSet);
-            children = childrenSet.toArray();
+//        if(parentElement instanceof Classification){
+//            children = taxonNodeService.listChildNodesAsUuidAndTitleCache(((Classification)parentElement).getRootNode()).toArray();
+////            children = ((Classification) parentElement).getChildNodes().toArray();
+//        }
+//        //taxon node
+//        if(parentElement instanceof ITaxonTreeNode){
+//            ITaxonTreeNode treeNode = (ITaxonTreeNode) HibernateProxyHelper.deproxy(parentElement);
+//            List<TaxonNode> childrenSet = treeNode.getChildNodes();
+//            HHH_9751_Util.removeAllNull(childrenSet);
+//            children = childrenSet.toArray();
+//        }
+        List<TaxonNodeDto> childrenList = null;
+
+        if(parentElement instanceof TaxonNode){
+               childrenList = taxonNodeService.listChildNodesAsTaxonNodeDto((TaxonNode)parentElement);
+        }else {
+               childrenList = taxonNodeService.listChildNodesAsTaxonNodeDto((TaxonNodeDto)parentElement);
         }
+        Comparator<TaxonNodeDto> comparator = PreferencesUtil.getNodeComparator();
+        Collections.sort(childrenList, comparator);
+        children = childrenList.toArray();
         return children != null ? children : NO_CHILDREN;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Object getParent(Object element) {
-        if(element instanceof TaxonNode){
-            return ((TaxonNode) element).getParent();
+        if (taxonNodeService == null){
+            taxonNodeService = CdmStore.getService(ITaxonNodeService.class);
+        }
+        if(element instanceof TaxonNodeDto){
+            if (((TaxonNodeDto) element).getParentUUID() != null){
+                TaxonNodeDto parentDto = taxonNodeService.dto(((TaxonNodeDto) element).getParentUUID());
+//                TaxonNode parent = taxonNodeService.load(((TaxonNodeDto) element).getParentUUID());
+                if (parentDto != null){
+//                    return new TaxonNodeDto(parent);
+                    return parentDto;
+                }
+            }
         }
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public boolean hasChildren(Object element) {
         if(element instanceof TaxonNode){
             return ((TaxonNode) element).getCountChildren() > 0;
         }
+        if (element instanceof TaxonNodeDto){
+            return ((TaxonNodeDto)element).getTaxonomicChildrenCount()>0;
+        }
         return this.getChildren(element).length > 0;
     }
-
 }