Merge branch 'release/4.12.0'
[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.ArrayList;
4 import java.util.List;
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.common.CdmBase;
24 import eu.etaxonomy.cdm.model.taxon.Synonym;
25 import eu.etaxonomy.cdm.model.taxon.Taxon;
26 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 import eu.etaxonomy.taxeditor.editor.EditorUtil;
28 import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4;
29 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
30 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
31 import eu.etaxonomy.taxeditor.editor.name.e4.operation.MoveSynonymToAnotherAcceptedTaxonOperationE4;
32 import eu.etaxonomy.taxeditor.editor.name.handler.NameEditorMenuPropertyTester;
33 import eu.etaxonomy.taxeditor.model.AbstractUtility;
34 import eu.etaxonomy.taxeditor.model.MessagingUtils;
35 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
36 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
37
38 public class MoveSynonymToAnotherAcceptedTaxonHandlerE4 implements IPostOperationEnabled{
39 private static final Logger logger = Logger
40 .getLogger(MoveSynonymToAnotherAcceptedTaxonHandlerE4.class);
41
42 private TaxonNameEditorE4 editor;
43
44 private TaxonNode newParentNode;
45
46 private EPartService partService;
47
48 @Inject
49 private EModelService modelService;
50
51 @Inject
52 private MApplication application;
53
54 @Inject
55 private MPart activePart;
56
57 @Execute
58 public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
59 @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
60 @Named(IServiceConstants.ACTIVE_SHELL)Shell shell, EPartService partService,
61 UISynchronize sync) {
62
63 this.activePart = activePart;
64 this.partService = partService;
65
66 editor = (TaxonNameEditorE4) activePart.getObject();
67
68 TaxonEditorInputE4 input = editor.getEditorInput();
69
70 if (!EditorUtil.forceUserSaveE4Editor(editor, shell)) {
71 return ;
72 }
73
74 if (selection==null || !(selection.getFirstElement() instanceof Synonym)) {
75 MessagingUtils.warningDialog(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION, this, Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION_MESSAGE);
76 logger.error("Selection does not contain a Synonym"); //$NON-NLS-1$
77 return ;
78 }
79
80 Synonym synonym = (Synonym) selection.getFirstElement();
81 Taxon oldParent = input.getTaxon();
82 List<UUID> excludeTaxa = new ArrayList<UUID>();
83 excludeTaxa.add(oldParent.getUuid());
84
85
86 newParentNode = TaxonNodeSelectionDialog.select(shell, //editor.getConversationHolder(),
87 Messages.MoveSynonymToAnotherAcceptedTaxonHandler_SELECT_ACC_TAXON, excludeTaxa, input.getTaxonNode(), input.getTaxonNode().getClassification());
88
89 if(newParentNode!=null){
90 MoveSynonymToAnotherAcceptedTaxonOperationE4 operation = new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_CHANGE_ACC_TAXON, EditorUtil.getUndoContext(),
91 synonym.getUuid(), newParentNode.getTaxon(), this, editor);
92
93 AbstractUtility.executeOperation(operation, sync);
94 }
95 }
96
97 @CanExecute
98 public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
99 MHandledMenuItem menuItem){
100 boolean canExecute = false;
101 Object selectedElement = selection.getFirstElement();
102 canExecute =
103 NameEditorMenuPropertyTester.isSynonym(selectedElement)
104 && NameEditorMenuPropertyTester.isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
105
106 menuItem.setVisible(canExecute);
107 return canExecute;
108 }
109
110 @Override
111 public boolean postOperation(CdmBase objectAffectedByOperation) {
112 editor.redraw();
113 return false;
114 }
115
116 @Override
117 public boolean onComplete() {
118 partService.hidePart(activePart);
119 EditorUtil.openTaxonNodeE4(newParentNode.getUuid(), modelService, partService, application);
120 return true;
121 }
122
123 }