Project

General

Profile

« Previous | Next » 

Revision e9958b2a

Added by Patrick Plitzner over 4 years ago

ref #8450 Expand matrix rows only to taxon level

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
84 84
import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowLayer;
85 85
import org.eclipse.nebula.widgets.nattable.tree.ITreeRowModel;
86 86
import org.eclipse.nebula.widgets.nattable.tree.TreeLayer;
87
import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandToLevelCommand;
87 88
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
88 89
import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
89 90
import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuAction;
......
192 193

  
193 194
    private boolean isShowTooltips = true;
194 195

  
196
    private DescriptionTreeFormat treeFormat;
197

  
195 198
    public CharacterMatrix(Composite parent, CharacterMatrixPart part) {
196 199
        super(parent, SWT.NONE);
197 200
        this.part = part;
......
275 278
        this.layout();
276 279
        natTable.doCommand(new ClientAreaResizeCommand(natTable));
277 280

  
281
        // expand all taxa
282
        Integer deepestTaxonLevel = treeFormat.getDeepestTaxonLevel();
283
        if(deepestTaxonLevel!=null){
284
            natTable.doCommand(new TreeExpandToLevelCommand(deepestTaxonLevel-2));
285
        }
286

  
278 287
        // clean up table state
279 288
        getNatTableState().remove(NatTable.INITIAL_PAINT_COMPLETE_FLAG);
280 289
        getNatTableState().remove(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY);
......
310 319
    private void createLayers(boolean treeView) {
311 320
        SortedList<Object> sortedList = new SortedList<>(descriptions, new MatrixRowComparator());
312 321
        // wrap the SortedList with the TreeList
313
        TreeList<Object> treeList = new TreeList(sortedList, new DescriptionTreeFormat(getDescriptiveDataSet()), TreeList.NODES_START_EXPANDED);
322
        treeFormat = new DescriptionTreeFormat(getDescriptiveDataSet());
323
        TreeList<Object> treeList = new TreeList(sortedList, treeFormat, TreeList.NODES_START_COLLAPSED);
314 324
        /**
315 325
         * data provider
316 326
         */
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/DescriptionTreeFormat.java
18 18
import ca.odell.glazedlists.TreeList;
19 19
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
20 20
import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
21
import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
21 22
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
22 23
import eu.etaxonomy.cdm.model.name.Rank;
23 24
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
......
35 36

  
36 37
     private Rank maxRank;
37 38

  
39
     private Integer deepestTaxonLevel = null;
40

  
38 41
     private Map<UUID, TaxonNodeDto> uuidToTaxonNodeDtoMap = new HashMap<>();
39 42

  
40 43
     public DescriptionTreeFormat(DescriptiveDataSet descriptiveDataSet) {
......
43 46

  
44 47
     @Override
45 48
     public void getPath(List path, Object element) {
49
         Integer level = 0;
46 50
         if(element instanceof RowWrapperDTO){
47 51
             //TODO: check for multiple taxon nodes in multiple classifications
48
             TaxonNodeDto taxonNode = ((RowWrapperDTO) element).getTaxonNode();
52
             TaxonNodeDto taxonNode = ((RowWrapperDTO)element).getTaxonNode();
49 53
             //use dto from map cache because the elements have to be
50 54
             //exactly the same for the tree format to work
51 55
             if(uuidToTaxonNodeDtoMap.get(taxonNode.getUuid())!=null){
......
54 58
             else{
55 59
                 uuidToTaxonNodeDtoMap.put(taxonNode.getUuid(), taxonNode);
56 60
             }
57
             addPathRecursive(path, taxonNode);
61
             level = addPathRecursive(path, taxonNode, level);
62
         }
63
         if(element instanceof SpecimenRowWrapperDTO){
64
             if(deepestTaxonLevel==null){
65
                 deepestTaxonLevel = level;
66
             }
67
             else{
68
                 deepestTaxonLevel = Math.min(level, deepestTaxonLevel);
69
             }
58 70
         }
59 71
         path.add(element);
60 72
     }
61 73

  
62
     private void addPathRecursive(List path, TaxonNodeDto node){
74
     private Integer addPathRecursive(List path, TaxonNodeDto node, Integer level){
75
         level++;
76

  
63 77
         if(node!=null){
64 78
             if(maxRank!=null && node.getRankOrderIndex()==maxRank.getOrderIndex()){
65 79
                 path.add(node);
66
                 return;
80
                 return level;
67 81
             }
68 82
             TaxonNodeDto parentNodeDto = uuidToTaxonNodeDtoMap.get(node.getParentUUID());
69 83
             if(parentNodeDto==null){
......
73 87
                 }
74 88
             }
75 89
             if(parentNodeDto!=null){
76
                 addPathRecursive(path, parentNodeDto);
90
                 level = addPathRecursive(path, parentNodeDto, level);
77 91
                 path.add(node);
78 92
             }
79 93
         }
94
         return level;
80 95
     }
81 96

  
97
    public Integer getDeepestTaxonLevel() {
98
        return deepestTaxonLevel;
99
    }
100

  
82 101
     @Override
83 102
     public boolean allowsChildren(Object element) {
84 103
         return true;

Also available in: Unified diff