ref #7887 Use DTOs in term editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / e4 / handler / MoveSynonymToAnotherAcceptedTaxonHandlerE4.java
1 package eu.etaxonomy.taxeditor.editor.name.e4.handler;
2
3 import java.util.HashSet;
4 import java.util.Set;
5 import java.util.UUID;
6
7 import javax.inject.Inject;
8 import javax.inject.Named;
9
10 import org.apache.log4j.Logger;
11 import org.eclipse.e4.core.di.annotations.CanExecute;
12 import org.eclipse.e4.core.di.annotations.Execute;
13 import org.eclipse.e4.ui.di.UISynchronize;
14 import org.eclipse.e4.ui.model.application.MApplication;
15 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
16 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
17 import org.eclipse.e4.ui.services.IServiceConstants;
18 import org.eclipse.e4.ui.workbench.modeling.EModelService;
19 import org.eclipse.e4.ui.workbench.modeling.EPartService;
20 import org.eclipse.jface.viewers.IStructuredSelection;
21 import org.eclipse.swt.widgets.Shell;
22
23 import eu.etaxonomy.cdm.model.taxon.Synonym;
24 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
25 import eu.etaxonomy.taxeditor.editor.EditorUtil;
26 import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4;
27 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
28 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
29 import eu.etaxonomy.taxeditor.editor.name.e4.operation.MoveSynonymToAnotherAcceptedTaxonOperationE4;
30 import eu.etaxonomy.taxeditor.editor.name.handler.NameEditorMenuPropertyTester;
31 import eu.etaxonomy.taxeditor.model.AbstractUtility;
32 import eu.etaxonomy.taxeditor.model.MessagingUtils;
33 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
34 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
35
36 public class MoveSynonymToAnotherAcceptedTaxonHandlerE4 implements IPostOperationEnabled{
37 private static final Logger logger = Logger
38 .getLogger(MoveSynonymToAnotherAcceptedTaxonHandlerE4.class);
39
40 private TaxonNameEditorE4 editor;
41
42 private TaxonNode newParentNode;
43
44 private EPartService partService;
45
46 @Inject
47 private EModelService modelService;
48
49 @Inject
50 private MApplication application;
51
52 @Inject
53 private MPart activePart;
54
55 @Execute
56 public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
57 @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
58 @Named(IServiceConstants.ACTIVE_SHELL)Shell shell, EPartService partService,
59 UISynchronize sync) {
60
61 this.activePart = activePart;
62 this.partService = partService;
63
64 editor = (TaxonNameEditorE4) activePart.getObject();
65
66 TaxonEditorInputE4 input = editor.getEditorInput();
67
68 if (!EditorUtil.forceUserSaveE4Editor(editor, shell)) {
69 return ;
70 }
71
72 if (selection==null || !(selection.getFirstElement() instanceof Synonym)) {
73 MessagingUtils.warningDialog(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION, this, Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION_MESSAGE);
74 logger.error("Selection does not contain a Synonym"); //$NON-NLS-1$
75 return ;
76 }
77
78 Synonym synonym = (Synonym) selection.getFirstElement();
79 TaxonNode oldParent = input.getTaxonNode();
80 Set<UUID> excludeTaxa = new HashSet<>();
81 excludeTaxa.add(oldParent.getUuid());
82
83
84 newParentNode = TaxonNodeSelectionDialog.select(shell, //editor.getConversationHolder(),
85 Messages.MoveSynonymToAnotherAcceptedTaxonHandler_SELECT_ACC_TAXON, excludeTaxa, input.getTaxonNode(), input.getTaxonNode().getClassification().getUuid());
86
87 if(newParentNode!=null){
88 MoveSynonymToAnotherAcceptedTaxonOperationE4 operation = new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_CHANGE_ACC_TAXON, EditorUtil.getUndoContext(),
89 synonym.getUuid(), newParentNode.getTaxon(), this, editor);
90
91 AbstractUtility.executeOperation(operation, sync);
92 }
93 }
94
95 @CanExecute
96 public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
97 MHandledMenuItem menuItem){
98 boolean canExecute = false;
99 if(selection.size()==1){
100 Object selectedElement = selection.getFirstElement();
101 canExecute =
102 NameEditorMenuPropertyTester.isSynonym(selectedElement)
103 && NameEditorMenuPropertyTester.isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
104 }
105 menuItem.setVisible(canExecute);
106 return canExecute;
107 }
108
109 @Override
110 public boolean postOperation(Object objectAffectedByOperation) {
111 editor.redraw();
112 return false;
113 }
114
115 @Override
116 public boolean onComplete() {
117 partService.hidePart(activePart);
118 EditorUtil.openTaxonNodeE4(newParentNode.getUuid(), modelService, partService, application);
119 return true;
120 }
121
122 }