import ca.odell.glazedlists.TreeList;
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
+import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
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;
private Rank maxRank;
+ private Integer deepestTaxonLevel = null;
+
private Map<UUID, TaxonNodeDto> uuidToTaxonNodeDtoMap = new HashMap<>();
public DescriptionTreeFormat(DescriptiveDataSet descriptiveDataSet) {
@Override
public void getPath(List path, Object element) {
+ Integer level = 0;
if(element instanceof RowWrapperDTO){
//TODO: check for multiple taxon nodes in multiple classifications
- TaxonNodeDto taxonNode = ((RowWrapperDTO) element).getTaxonNode();
+ TaxonNodeDto taxonNode = ((RowWrapperDTO)element).getTaxonNode();
//use dto from map cache because the elements have to be
//exactly the same for the tree format to work
if(uuidToTaxonNodeDtoMap.get(taxonNode.getUuid())!=null){
else{
uuidToTaxonNodeDtoMap.put(taxonNode.getUuid(), taxonNode);
}
- addPathRecursive(path, taxonNode);
+ level = addPathRecursive(path, taxonNode, level);
+ }
+ if(element instanceof SpecimenRowWrapperDTO){
+ if(deepestTaxonLevel==null){
+ deepestTaxonLevel = level;
+ }
+ else{
+ deepestTaxonLevel = Math.min(level, deepestTaxonLevel);
+ }
}
path.add(element);
}
- private void addPathRecursive(List path, TaxonNodeDto node){
+ private Integer addPathRecursive(List path, TaxonNodeDto node, Integer level){
+ level++;
+
if(node!=null){
if(maxRank!=null && node.getRankOrderIndex()==maxRank.getOrderIndex()){
path.add(node);
- return;
+ return level;
}
TaxonNodeDto parentNodeDto = uuidToTaxonNodeDtoMap.get(node.getParentUUID());
if(parentNodeDto==null){
- TaxonNode parent = CdmStore.getService(ITaxonNodeService.class).load(node.getParentUUID());
- if(parent!=null){
- parentNodeDto = new TaxonNodeDto(parent);
+ parentNodeDto = CdmStore.getService(ITaxonNodeService.class).parentDto(node.getUuid());
+ if(parentNodeDto!=null){
uuidToTaxonNodeDtoMap.put(node.getParentUUID(), parentNodeDto);
}
}
if(parentNodeDto!=null){
- addPathRecursive(path, parentNodeDto);
+ level = addPathRecursive(path, parentNodeDto, level);
path.add(node);
}
}
+ return level;
}
+ public Integer getDeepestTaxonLevel() {
+ return deepestTaxonLevel;
+ }
+
@Override
public boolean allowsChildren(Object element) {
return true;