import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowLayer;
import org.eclipse.nebula.widgets.nattable.tree.ITreeRowModel;
import org.eclipse.nebula.widgets.nattable.tree.TreeLayer;
+import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandToLevelCommand;
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuAction;
private boolean isShowTooltips = true;
+ private DescriptionTreeFormat treeFormat;
+
public CharacterMatrix(Composite parent, CharacterMatrixPart part) {
super(parent, SWT.NONE);
this.part = part;
this.layout();
natTable.doCommand(new ClientAreaResizeCommand(natTable));
+ // expand all taxa
+ Integer deepestTaxonLevel = treeFormat.getDeepestTaxonLevel();
+ if(deepestTaxonLevel!=null){
+ natTable.doCommand(new TreeExpandToLevelCommand(deepestTaxonLevel-2));
+ }
+
// clean up table state
getNatTableState().remove(NatTable.INITIAL_PAINT_COMPLETE_FLAG);
getNatTableState().remove(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY);
private void createLayers(boolean treeView) {
SortedList<Object> sortedList = new SortedList<>(descriptions, new MatrixRowComparator());
// wrap the SortedList with the TreeList
- TreeList<Object> treeList = new TreeList(sortedList, new DescriptionTreeFormat(getDescriptiveDataSet()), TreeList.NODES_START_EXPANDED);
+ treeFormat = new DescriptionTreeFormat(getDescriptiveDataSet());
+ TreeList<Object> treeList = new TreeList(sortedList, treeFormat, TreeList.NODES_START_COLLAPSED);
/**
* data provider
*/
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.persistence.dto.TaxonNodeDto;
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){
}
}
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;