Revision cedc4ff1
Added by Katja Luther about 6 years ago
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/RemotingDeleteTaxonNodeHandlerE4.java | ||
---|---|---|
26 | 26 |
import org.eclipse.jface.viewers.TreeSelection; |
27 | 27 |
import org.eclipse.swt.widgets.Shell; |
28 | 28 |
|
29 |
import eu.etaxonomy.cdm.api.application.CdmApplicationState; |
|
30 | 29 |
import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; |
31 | 30 |
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; |
32 | 31 |
import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator; |
33 | 32 |
import eu.etaxonomy.cdm.model.taxon.Classification; |
34 |
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; |
|
35 |
import eu.etaxonomy.cdm.model.taxon.Synonym; |
|
36 | 33 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
34 |
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto; |
|
37 | 35 |
import eu.etaxonomy.taxeditor.editor.EditorUtil; |
38 | 36 |
import eu.etaxonomy.taxeditor.model.MessagingUtils; |
39 | 37 |
import eu.etaxonomy.taxeditor.navigation.l10n.Messages; |
... | ... | |
50 | 48 |
public class RemotingDeleteTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 { |
51 | 49 |
|
52 | 50 |
private TaxonDeletionConfigurator config; |
53 |
private Set<ITaxonTreeNode> treeNodes; |
|
51 |
private Set<TaxonNodeDto> treeNodes; |
|
52 |
private Set<TaxonNodeDto> classifications; |
|
54 | 53 |
|
55 | 54 |
public RemotingDeleteTaxonNodeHandlerE4() { |
56 | 55 |
super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL); |
... | ... | |
63 | 62 |
MHandledMenuItem menuItem) { |
64 | 63 |
|
65 | 64 |
Iterator<?> selectionIterator = selection.iterator(); |
66 |
treeNodes = new HashSet<ITaxonTreeNode>();
|
|
65 |
treeNodes = new HashSet(); |
|
67 | 66 |
|
67 |
boolean containsNodeWithChildren = false; |
|
68 |
boolean containsClassification = false; |
|
69 |
boolean containsTaxonNodes = false; |
|
70 |
classifications = new HashSet(); |
|
68 | 71 |
while (selectionIterator.hasNext()){ |
69 | 72 |
Object object = selectionIterator.next(); |
70 |
if(object instanceof ITaxonTreeNode) { |
|
71 |
treeNodes.add((ITaxonTreeNode) object); |
|
73 |
if(object instanceof TaxonNodeDto) { |
|
74 |
treeNodes.add((TaxonNodeDto) object); |
|
75 |
}else if (object instanceof TaxonNode && !((TaxonNode)object).hasTaxon()){ |
|
76 |
TaxonNodeDto dto = new TaxonNodeDto(Classification.class,(TaxonNode)object); |
|
77 |
classifications.add(dto); |
|
78 |
containsClassification = true; |
|
72 | 79 |
} |
73 | 80 |
} |
74 |
for (ITaxonTreeNode treeNode : treeNodes) { |
|
75 |
if(treeNode instanceof TaxonNode) { |
|
76 |
EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, partService); |
|
77 |
} |
|
81 |
for (TaxonNodeDto treeNode : treeNodes) { |
|
82 |
EditorUtil.closeObsoleteEditor(treeNode, partService); |
|
78 | 83 |
} |
79 | 84 |
|
80 | 85 |
config = new TaxonDeletionConfigurator(); |
81 | 86 |
Iterator it = treeNodes.iterator(); |
82 |
boolean containsNodeWithChildren = false; |
|
83 |
boolean containsClassification = false; |
|
84 |
boolean containsTaxonNodes = false; |
|
85 |
treeNodes = new HashSet<ITaxonTreeNode>(); |
|
86 |
while (it.hasNext()){ |
|
87 |
ITaxonTreeNode treeNode = (ITaxonTreeNode) it.next(); |
|
88 | 87 |
|
89 |
if (treeNode instanceof TaxonNode && !((TaxonNode)treeNode).hasTaxon()){ |
|
90 |
treeNode = CdmApplicationState.getCurrentAppConfig().getClassificationService().load(((TaxonNode)treeNode).getClassification().getUuid()); |
|
91 |
}else{ |
|
92 |
treeNode = CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().load(treeNode.getUuid()); |
|
93 |
} |
|
88 |
treeNodes = new HashSet(); |
|
89 |
while (it.hasNext()){ |
|
90 |
TaxonNodeDto treeNode = (TaxonNodeDto) it.next(); |
|
94 | 91 |
|
95 | 92 |
treeNodes.add(treeNode); |
96 | 93 |
if (treeNode == null){ |
... | ... | |
98 | 95 |
return Status.CANCEL_STATUS; |
99 | 96 |
|
100 | 97 |
} |
101 |
if (treeNode instanceof Classification){ |
|
102 |
containsClassification = true; |
|
103 |
if (((Classification)treeNode).getRootNode() != null &&treeNode.hasChildNodes()) { |
|
104 |
containsNodeWithChildren = true; |
|
105 |
} |
|
106 |
}else if (treeNode instanceof TaxonNode){ |
|
98 |
if (treeNode instanceof TaxonNodeDto){ |
|
107 | 99 |
containsTaxonNodes = true; |
108 |
if (treeNode.hasChildNodes()){
|
|
100 |
if (treeNode.getTaxonomicChildrenCount()>0){
|
|
109 | 101 |
containsNodeWithChildren = true; |
110 | 102 |
} |
111 | 103 |
} |
112 | 104 |
|
113 | 105 |
|
106 |
} |
|
107 |
|
|
108 |
for (TaxonNodeDto rootNode: classifications){ |
|
109 |
|
|
110 |
if (rootNode.getTaxonomicChildrenCount() > 0) { |
|
111 |
containsNodeWithChildren = true; |
|
112 |
} |
|
113 |
|
|
114 | 114 |
} |
115 | 115 |
TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); |
116 | 116 |
if (containsClassification && !containsTaxonNodes) { |
... | ... | |
186 | 186 |
return new RemotingDeleteTaxonNodeOperation(getTrigger(), |
187 | 187 |
false, |
188 | 188 |
treeNodes, |
189 |
classifications, |
|
189 | 190 |
config); |
190 | 191 |
} |
191 | 192 |
|
192 | 193 |
@CanExecute |
193 | 194 |
private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){ |
194 | 195 |
boolean canExecute = false; |
195 |
canExecute = !selection.isEmpty() && !(selection.getFirstElement() instanceof Synonym); |
|
196 |
Object selectionElement = selection.getFirstElement(); |
|
197 |
|
|
198 |
canExecute = (selectionElement instanceof TaxonNodeDto) || |
|
199 |
(selectionElement instanceof TaxonNode && ((TaxonNode)selectionElement).getTaxon() == null); |
|
196 | 200 |
menuItem.setVisible(canExecute); |
197 | 201 |
return canExecute; |
198 | 202 |
} |
Also available in: Unified diff
ref #2380: implement usage of Dto for taxon navigator