Project

General

Profile

Download (8.92 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.editor.view.descriptive.e4.handler;
5

    
6
import java.util.ArrayList;
7
import java.util.Collection;
8
import java.util.HashSet;
9
import java.util.List;
10
import java.util.Set;
11
import java.util.UUID;
12

    
13
import javax.inject.Named;
14

    
15
import org.eclipse.e4.core.di.annotations.CanExecute;
16
import org.eclipse.e4.core.di.annotations.Execute;
17
import org.eclipse.e4.core.di.annotations.Optional;
18
import org.eclipse.e4.ui.di.UISynchronize;
19
import org.eclipse.e4.ui.model.application.MApplication;
20
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
21
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
22
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
23
import org.eclipse.e4.ui.services.IServiceConstants;
24
import org.eclipse.e4.ui.workbench.modeling.EModelService;
25
import org.eclipse.e4.ui.workbench.modeling.EPartService;
26
import org.eclipse.jface.dialogs.MessageDialog;
27
import org.eclipse.jface.viewers.ISelection;
28
import org.eclipse.jface.viewers.IStructuredSelection;
29
import org.eclipse.swt.widgets.Display;
30
import org.eclipse.swt.widgets.Shell;
31

    
32
import eu.etaxonomy.cdm.model.description.DescriptionBase;
33
import eu.etaxonomy.cdm.model.description.TaxonDescription;
34
import eu.etaxonomy.cdm.model.taxon.Classification;
35
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
36
import eu.etaxonomy.taxeditor.editor.EditorUtil;
37
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
38
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
39
import eu.etaxonomy.taxeditor.editor.view.descriptive.e4.FactualDataPartE4;
40
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
41
import eu.etaxonomy.taxeditor.model.AbstractUtility;
42
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
43
import eu.etaxonomy.taxeditor.model.MessagingUtils;
44
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
45
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
46
import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
47

    
48
/**
49
 *
50
 * @author pplitzner
51
 * @date 15.08.2017
52
 *
53
 */
54
public class MoveDescriptionToOtherTaxonHandlerE4 implements IPostOperationEnabled {
55

    
56
    private MoveDescriptionToOtherTaxonOperation operation;
57

    
58
    private UUID newAcceptedTaxonNodeUuid;
59
    private UUID oldAcceptedTaxonNodeUuid;
60
    private UUID newAcceptedTaxonUuid;
61
    private UUID oldAcceptedTaxonUuid;
62
    private TaxonNameEditorE4 editor;
63
    private MApplication application;
64
    private EModelService modelService;
65
    private EPartService partService;
66

    
67
    @Execute
68
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart,
69
            @Optional @Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection,
70
            @Named(IServiceConstants.ACTIVE_SHELL) Shell shell, MMenuItem menuItem, EPartService partService,
71
            EModelService modelService, MApplication application, UISynchronize sync) {
72

    
73
        this.modelService = modelService;
74
        this.application = application;
75
        this.partService = partService;
76

    
77
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
78
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
79
        if(e4WrappedPart instanceof TaxonNameEditorE4){
80
            editor = (TaxonNameEditorE4) e4WrappedPart;
81

    
82
        }
83

    
84
        List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
85
        TaxonDescription description = null;
86
        Object selectedElement = selection.getFirstElement();
87
        if (selectedElement instanceof FeatureNodeContainer){
88
        	FeatureNodeContainer container = (FeatureNodeContainer)selectedElement;
89
        	description = (TaxonDescription) container.getDescription();
90
        }else if (selectedElement instanceof TaxonDescription){
91
        	description = (TaxonDescription)selectedElement;
92
        }
93
        descriptions.add(description);
94

    
95
        // Choose the target taxon
96

    
97

    
98
        //get current taxon node
99
        TaxonNode node = null;
100
        Classification classification = null;
101
        if(editor!=null){
102
            node = editor.getEditorInput().getTaxonNode();
103
            oldAcceptedTaxonUuid = editor.getTaxon().getUuid();
104
            oldAcceptedTaxonNodeUuid = node.getUuid();
105
            classification = node.getClassification();
106
        }
107

    
108
        Set<UUID> excludeTaxa = new HashSet<>();
109
        excludeTaxa.add(oldAcceptedTaxonNodeUuid);
110
        TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
111
//                editor.getConversationHolder(),
112
                Messages.MoveDescriptionToOtherTaxonHandler_CHOOSE_ACC_TAXON,
113
                excludeTaxa,
114
                node,
115
                classification.getUuid());
116

    
117
        if (newAcceptedTaxonNode == null) {
118
            return ;
119
        }
120

    
121
        newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
122
        newAcceptedTaxonUuid = newAcceptedTaxonNode.getTaxon().getUuid();
123

    
124
        Collection<MPart> targetEditors = EditorUtil.checkForChanges(newAcceptedTaxonUuid, partService);
125

    
126
        if (targetEditors != null || this.editor.isDirty()){
127
            boolean proceed = MessageDialog.openQuestion(null,
128
                    Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
129
            if( targetEditors.iterator().hasNext() ){
130
                MPart part = targetEditors.iterator().next();
131
                if (proceed) {
132
                    if (part != null){
133
                        if (part.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")){
134
                            TaxonNameEditorE4 targetEditor = (TaxonNameEditorE4) WorkbenchUtility.getE4WrappedPart(part);
135
                            targetEditor.save(AbstractUtility.getMonitor());
136
                        }
137
                        if (editor.isDirty()){
138
                            editor.save(AbstractUtility.getMonitor());
139
                        }
140
                    } else {
141
                        return;
142
                    }
143
                }
144
            }
145
        }
146

    
147
        for(TaxonDescription taxonDescription : descriptions){
148
            operation = new MoveDescriptionToOtherTaxonOperation(menuItem.getLocalizedLabel(),
149
                    editor.getUndoContext(),
150
                    taxonDescription,
151
                    newAcceptedTaxonNode,
152
                    this,
153
                    editor,
154
                    editor.getEditorInput());
155
            AbstractUtility.executeOperation(operation, sync);
156
        }
157

    
158

    
159
    }
160

    
161
    /** {@inheritDoc} */
162
    @Override
163
    public boolean postOperation(Object objectAffectedByOperation) {
164
        Display.getDefault().asyncExec(new Runnable(){
165

    
166
            @Override
167
            public void run() {
168
                //FIXME E4 migrate
169
//                AbstractUtility.close(editor);
170
//
171
                try {
172
//                    MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
173
//                    if(possibleOpenEditor != null){
174
//                        AbstractUtility.close(possibleOpenEditor);
175
//                    }
176
//                    EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, oldAcceptedTaxonNodeUuid);
177
//                    EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, newAcceptedTaxonNodeUuid);
178
                    EditorUtil.openTaxonNodeE4(newAcceptedTaxonNodeUuid, modelService, partService, application);
179
                    EditorUtil.openTaxonNodeE4(oldAcceptedTaxonNodeUuid, modelService, partService, application);
180
//                } catch (PartInitException e) {
181
//                    MessagingUtils.error(this.getClass(), e);
182
//                    throw new RuntimeException(e);
183
                } catch (Exception e) {
184
                    MessagingUtils.warningDialog(Messages.MoveDescriptionToOtherTaxonHandler_CREATE_FAILED, this, e.getMessage());
185
                }
186
            }
187

    
188
        });
189

    
190

    
191
        return true;
192
    }
193

    
194
    @Override
195
    public boolean onComplete() {
196
        return false;
197
    }
198

    
199
    @CanExecute
200
    public boolean canExecute(@Optional @Named(IServiceConstants.ACTIVE_PART) MPart activePart,
201
            MHandledMenuItem menuItem){
202
        boolean canExecute = false;
203
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
204

    
205
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
206
        if(e4WrappedPart instanceof TaxonNameEditorE4){
207
            ISelection selection = factualDataPart.getViewer().getSelection();
208
            if(selection instanceof IStructuredSelection){
209
                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
210
                canExecute = ((IStructuredSelection) selection).size()==1
211
                        && firstElement instanceof DescriptionBase;
212
                menuItem.setVisible(canExecute);
213
            }
214
        }
215
        return canExecute;
216
    }
217
}
(8-8/9)