ref #7674 Show complete taxon hierarchy
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / DescriptionTreeFormat.java
index 9e8f95114822c885c11feb16f47d51e9f8cc4037..e8d84ff21f141e0348c2bdd1a713faa3b517697d 100644 (file)
@@ -14,6 +14,8 @@ import java.util.List;
 
 import ca.odell.glazedlists.TreeList;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
+import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
+import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
@@ -36,7 +38,13 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 
      @Override
      public void getPath(List path, Object element) {
-         if(element instanceof RowWrapperDTO){
+         if(element instanceof SpecimenRowWrapperDTO
+                 && ((SpecimenRowWrapperDTO) element).getDefaultTaxonDescription()!=null){
+             TaxonRowWrapperDTO defaultTaxonDescription = ((SpecimenRowWrapperDTO) element).getDefaultTaxonDescription();
+             addPathRecursive(path, defaultTaxonDescription.getTaxonNode());
+             path.add(defaultTaxonDescription);
+         }
+         else if(element instanceof RowWrapperDTO){
              //TODO: check for multiple taxon nodes in multiple classifications
              TaxonNode taxonNode = ((RowWrapperDTO) element).getTaxonNode();
              addPathRecursive(path, taxonNode);
@@ -45,12 +53,13 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
      }
 
      private void addPathRecursive(List path, TaxonNode node){
-         if(node.getParent()!=null
+         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)){
+             if(maxRank!=null && maxRank.equals(rank)){
                  path.add(node);
                  return;
              }
@@ -61,10 +70,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 
      @Override
      public boolean allowsChildren(Object element) {
-         if(element instanceof TaxonNode){
-             return true;
-         }
-         return false;
+         return true;
      }
 
      @Override