Project

General

Profile

Download (6.73 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.logging.log4j.LogManager;import org.apache.logging.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.metadata.SecReferenceHandlingEnum;
24
import eu.etaxonomy.cdm.model.reference.Reference;
25
import eu.etaxonomy.cdm.model.taxon.Synonym;
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.preference.PreferencesUtil;
37
import eu.etaxonomy.taxeditor.ui.dialog.selection.ReferenceSelectionDialog;
38
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
39

    
40
public class MoveSynonymToAnotherAcceptedTaxonHandlerE4 implements IPostOperationEnabled{
41

    
42
    private static final Logger logger = Logger.getLogger(MoveSynonymToAnotherAcceptedTaxonHandlerE4.class);
43

    
44
	private TaxonNameEditorE4 editor;
45

    
46
    private TaxonNode newParentNode;
47

    
48
    private EPartService partService;
49

    
50
    @Inject
51
    private EModelService modelService;
52

    
53
    @Inject
54
    private MApplication application;
55

    
56
    @Inject
57
    private MPart activePart;
58

    
59
	@Execute
60
    public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
61
            @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
62
            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell, EPartService partService,
63
            UISynchronize sync) {
64

    
65
	    this.activePart = activePart;
66
	    this.partService = partService;
67

    
68
        editor = (TaxonNameEditorE4) activePart.getObject();
69

    
70
        TaxonEditorInputE4 input = editor.getEditorInput();
71

    
72
		if (!EditorUtil.forceUserSaveE4Editor(editor, shell)) {
73
			return ;
74
		}
75

    
76
		if (selection==null || !(selection.getFirstElement() instanceof Synonym)) {
77
		    MessagingUtils.warningDialog(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION, this, Messages.MoveSynonymToAnotherAcceptedTaxonHandler_NO_SELECTION_MESSAGE);
78
			logger.error("Selection does not contain a Synonym"); //$NON-NLS-1$
79
			return ;
80
		}
81

    
82
		Synonym synonym = (Synonym) selection.getFirstElement();
83
		TaxonNode oldParent = input.getTaxonNode();
84
		Set<UUID> excludeTaxa = new HashSet<>();
85
		excludeTaxa.add(oldParent.getUuid());
86

    
87

    
88
		newParentNode = TaxonNodeSelectionDialog.select(shell, Messages.MoveSynonymToAnotherAcceptedTaxonHandler_SELECT_ACC_TAXON, excludeTaxa,  input.getTaxonNode(), input.getTaxonNode().getClassification().getUuid());
89
		if (newParentNode == null){
90
			return;
91
		}
92
		SecReferenceHandlingEnum secHandling = PreferencesUtil.getSecReferenceHandlingPreference();
93
        UUID newSecUuid = null;
94

    
95
        Reference synSecRef = synonym.getSec();
96

    
97
        Reference parentSecRef = newParentNode.getTaxon() != null? newParentNode.getTaxon().getSec():null;
98
        if ((synSecRef != parentSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepOrWarn) )|| secHandling.equals(SecReferenceHandlingEnum.KeepOrSelect)){
99

    
100
            if ((parentSecRef != synSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepOrWarn) )|| secHandling.equals(SecReferenceHandlingEnum.KeepOrSelect)){
101
                int result = MessagingUtils.confirmDialog(Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title, Messages.MoveSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message,
102
                        new String[]{Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select});
103
                if (result == 2){
104
                    Reference sec = ReferenceSelectionDialog.select(shell, null);
105
                    newSecUuid = sec != null? sec.getUuid(): null;
106
                }else if (result == 1){
107
                    newSecUuid = parentSecRef != null? parentSecRef.getUuid(): null;
108
                }else if (result == 0){
109
                    newSecUuid = synSecRef != null? synSecRef.getUuid(): null;
110
                }else{
111
                    return ;
112
                }
113

    
114
            }
115

    
116
        }
117
        boolean homotypicGroupPublish = true;
118
//        for (synonym.getName().getHomotypicalGroup().getTypifiedNames())
119
		if (synonym.isPublish() != newParentNode.getTaxon().isPublish()){
120
            MessagingUtils.warningDialog("Publish flag", this,Messages.ChangeSynonymToAcceptedHandler_Different_Publish_Flag);
121
        }
122
		if(newParentNode!=null){
123
		   MoveSynonymToAnotherAcceptedTaxonOperationE4 operation = new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.MoveSynonymToAnotherAcceptedTaxonHandler_CHANGE_ACC_TAXON, EditorUtil.getUndoContext(),
124
		            synonym.getUuid(), newParentNode.getTaxon(),newSecUuid, this, editor);
125

    
126
		    AbstractUtility.executeOperation(operation, sync);
127
		}
128
	}
129

    
130
    @CanExecute
131
    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
132
            MHandledMenuItem menuItem){
133
        boolean canExecute = false;
134
        if(selection.size()==1){
135
            Object selectedElement = selection.getFirstElement();
136
            canExecute =
137
                    NameEditorMenuPropertyTester.isSynonym(selectedElement)
138
                    && NameEditorMenuPropertyTester.isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
139
        }
140
        menuItem.setVisible(canExecute);
141
        return canExecute;
142
    }
143

    
144
	@Override
145
	public boolean postOperation(Object objectAffectedByOperation) {
146
	    editor.redraw();
147
		return false;
148
	}
149

    
150
	@Override
151
	public boolean onComplete() {
152
	    partService.hidePart(activePart);
153
	    EditorUtil.openTaxonNodeE4(newParentNode.getUuid(), modelService, partService, application);
154
		return true;
155
	}
156

    
157
}
(12-12/15)