Revision e9958b2a
Added by Patrick Plitzner over 4 years ago
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
ref #8450 Expand matrix rows only to taxon level