Project

General

Profile

Download (4.55 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(14-14/16)