ref #7589 Use TaxonNodeDtos in character matrix
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 17 Dec 2018 12:07:40 +0000 (13:07 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 17 Dec 2018 12:07:40 +0000 (13:07 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixConfigLabelAccumulator.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/DescriptionTreeFormat.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/MatrixRowComparator.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/CreateTaxonDescriptionHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/supplementalInfo/SupplementalInfoDisplayConverter.java

index 065e92c93aef6ad42fac1b3d9b74456166bc3717..48fc5b7f22a3ba373f06d43e7ccb49b6dcc176aa 100644 (file)
@@ -13,7 +13,7 @@ import org.eclipse.nebula.widgets.nattable.layer.cell.IConfigLabelAccumulator;
 
 import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 
 /**
  * @author pplitzner
@@ -39,7 +39,7 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
         boolean isEditable = true;
 
         Object rowObject = matrix.getBodyDataProvider().getRowObject(rowPosition);
-        if(rowObject instanceof TaxonNode){
+        if(rowObject instanceof TaxonNodeDto){
             configLabels.addLabel(CharacterMatrix.LABEL_TAXON_ROW);
         }
         else if(rowObject instanceof TaxonRowWrapperDTO){
index 21e063767f0d5df68444509e5077fc91a2ab566c..05c8f802a89aded0bf43e8bff997a9845a4b14e1 100644 (file)
@@ -13,10 +13,13 @@ import java.util.Comparator;
 import java.util.List;
 
 import ca.odell.glazedlists.TreeList;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * The tree format defines how to build the hierarchy path for the
@@ -38,25 +41,24 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
      public void getPath(List path, Object element) {
          if(element instanceof RowWrapperDTO){
              //TODO: check for multiple taxon nodes in multiple classifications
-             TaxonNode taxonNode = ((RowWrapperDTO) element).getTaxonNode();
+             TaxonNodeDto taxonNode = ((RowWrapperDTO) element).getTaxonNode();
              addPathRecursive(path, taxonNode);
          }
          path.add(element);
      }
 
-     private void addPathRecursive(List path, TaxonNode node){
-         if(node!=null
-                 && node.getParent()!=null
-                 && node.getTaxon()!=null
-                 && node.getTaxon().getName()!=null
-                 && node.getTaxon().getName().getRank()!=null){
-             Rank rank = node.getTaxon().getName().getRank();
-             if(maxRank!=null && maxRank.equals(rank)){
+     private void addPathRecursive(List path, TaxonNodeDto node){
+         if(node!=null){
+             if(maxRank!=null && node.getRankOrderIndex()==maxRank.getOrderIndex()){
                  path.add(node);
                  return;
              }
-             addPathRecursive(path, node.getParent());
-             path.add(node);
+             TaxonNode parent = CdmStore.getService(ITaxonNodeService.class).load(node.getParentUUID());
+             if(parent!=null){
+                 TaxonNodeDto parentNodeDto = new TaxonNodeDto(parent);
+                 addPathRecursive(path, parentNodeDto);
+                 path.add(node);
+             }
          }
      }
 
index d9eab66b06af0751edc6b23a181ba0200b0b03df..6a2a65d96fe8d3669b799d12a11dc7a1c6d0c2aa 100644 (file)
@@ -10,16 +10,18 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
 import java.util.Comparator;
 
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
-import eu.etaxonomy.cdm.model.taxon.TaxonNodeByRankAndNameComparator;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoByNameComparator;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoByRankAndNameComparator;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoNaturalComparator;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author pplitzner
@@ -28,32 +30,34 @@ import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
  */
 public class MatrixRowComparator implements Comparator<Object>{
 
-    private Comparator<TaxonNode> comparator;
+    private Comparator<TaxonNodeDto> comparator;
+    private ITaxonNodeService taxonNodeService;
 
     public MatrixRowComparator() {
+        taxonNodeService = CdmStore.getService(ITaxonNodeService.class);
         if (PreferencesUtil.isNodesSortedNaturally()){
-            comparator = new TaxonNaturalComparator();
+            comparator = new TaxonNodeDtoNaturalComparator();
         } else if (PreferencesUtil.isNodesSortedByName()){
-            comparator = new TaxonNodeByNameComparator();
+            comparator = new TaxonNodeDtoByNameComparator();
         }else {
-            comparator = new TaxonNodeByRankAndNameComparator();
+            comparator = new TaxonNodeDtoByRankAndNameComparator();
         }
     }
 
     @Override
     public int compare(Object o1, Object o2) {
-        if(o1 instanceof TaxonNode){
+        if(o1 instanceof TaxonNodeDto){
             if(o2 instanceof RowWrapperDTO){
                 return 1;
             }
         }
         else{
-            if(o2 instanceof TaxonNode){
+            if(o2 instanceof TaxonNodeDto){
                 return -1;
             }
         }
-        if(o1 instanceof TaxonNode && o2 instanceof TaxonNode){
-            return comparator.compare((TaxonNode)o1, (TaxonNode)o2);
+        if(o1 instanceof TaxonNodeDto && o2 instanceof TaxonNodeDto){
+            return comparator.compare((TaxonNodeDto)o1, (TaxonNodeDto)o2);
         }
         if(o1 instanceof RowWrapperDTO && o2 instanceof RowWrapperDTO){
             RowWrapperDTO rowWrapper1 = (RowWrapperDTO)o1;
@@ -62,8 +66,8 @@ public class MatrixRowComparator implements Comparator<Object>{
             if(rowWrapper1.equals(rowWrapper2)){
                 return 0;
             }
-            TaxonNode node1 = rowWrapper1.getTaxonNode().getParent();
-            TaxonNode node2 = rowWrapper2.getTaxonNode().getParent();
+            TaxonNodeDto node1 = taxonNodeService.dto(rowWrapper1.getTaxonNode().getParentUUID());
+            TaxonNodeDto node2 = taxonNodeService.dto(rowWrapper2.getTaxonNode().getParentUUID());
             if(node1!=null && node2!=null){
                 //compare by taxon node
                 int compare = comparator.compare(node1, node2);
index ea0304f9066fe565967955a4eea749f0d2810707..2c228a9006b418a1ba52aaa14ec2f108839f5bed 100644 (file)
@@ -22,7 +22,7 @@ import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -37,9 +37,10 @@ public abstract class CreateTaxonDescriptionHandler {
     public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart, UISynchronize sync) {
         CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject();
         DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet();
-        TaxonNode node = (TaxonNode) matrixPart.getSelection().getFirstElement();
+        TaxonNodeDto node = (TaxonNodeDto) matrixPart.getSelection().getFirstElement();
         TaxonRowWrapperDTO taxonRowWrapperDTO = CdmStore.getService(IDescriptiveDataSetService.class)
                 .createTaxonDescription(descriptiveDataSet.getUuid(), node.getUuid(), getMarkerType(), getMarkerFlag());
+        matrixPart.getMatrix().getCdmEntitiySession().load(taxonRowWrapperDTO.getDescription(), true);
         matrixPart.getMatrix().getDescriptions().add(taxonRowWrapperDTO);
     }
 
@@ -54,7 +55,7 @@ public abstract class CreateTaxonDescriptionHandler {
         boolean canExecute = false;
         IStructuredSelection selection = ((CharacterMatrixPart)activePart.getObject()).getSelection();
         canExecute = selection.size()==1
-                && selection.getFirstElement() instanceof TaxonNode;
+                && selection.getFirstElement() instanceof TaxonNodeDto;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
index 205a94ce1f1dae6a92d703e6becdabee3ed6526d..30fa17848a9730c0cb11355064969ece50283394 100644 (file)
@@ -15,7 +15,7 @@ import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 
 /**
  * Converts the supplemental information (taxon and specimen data)
@@ -36,9 +36,9 @@ public class SupplementalInfoDisplayConverter extends DisplayConverter{
     @Override
     public Object canonicalToDisplayValue(Object canonicalValue) {
         String displayValue = "";
-        if(HibernateProxyHelper.isInstanceOf(canonicalValue, TaxonNode.class)){
-            TaxonNode node = (TaxonNode)canonicalValue;
-            displayValue = node.getTaxon().getName().getTitleCache();
+        if(canonicalValue instanceof TaxonNodeDto){
+            TaxonNodeDto node = (TaxonNodeDto)canonicalValue;
+            displayValue = node.getTaxonTitleCache();
         }
         else if(HibernateProxyHelper.isInstanceOf(canonicalValue, FieldUnit.class)){
             FieldUnit fieldUnit = HibernateProxyHelper.deproxy(canonicalValue, FieldUnit.class);