Project

General

Profile

Download (8.45 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.HashSet;
8
import java.util.List;
9
import java.util.Set;
10
import java.util.UUID;
11

    
12
import javax.inject.Named;
13

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

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

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

    
57
    private MoveDescriptionToOtherTaxonOperation operation;
58

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

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

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

    
78
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
79
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
80
        if(e4WrappedPart instanceof TaxonNameEditorE4){
81
            editor = (TaxonNameEditorE4) e4WrappedPart;
82
            if (this.editor.isDirty()){
83
                boolean proceed = MessageDialog.openQuestion(null,
84
                        Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
85
                if (proceed) {
86
                    editor.save(AbstractUtility.getMonitor());
87
                } else {
88
                    return;
89
                }
90

    
91
            }
92
        }
93

    
94
        List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
95
        TaxonDescription description = null;
96
        Object selectedElement = selection.getFirstElement();
97
        if (selectedElement instanceof FeatureNodeContainer){
98
        	FeatureNodeContainer container = (FeatureNodeContainer)selectedElement;
99
        	description = (TaxonDescription) container.getDescription();
100
        }else if (selectedElement instanceof TaxonDescription){
101
        	description = (TaxonDescription)selectedElement;
102
        }
103
        descriptions.add(description);
104

    
105
        // Choose the target taxon
106

    
107

    
108
        //get current taxon node
109
        TaxonNode node = null;
110
        Classification classification = null;
111
        if(editor!=null){
112
            node = editor.getEditorInput().getTaxonNode();
113
            oldAcceptedTaxonUuid = editor.getTaxon().getUuid();
114
            oldAcceptedTaxonNodeUuid = node.getUuid();
115
            classification = node.getClassification();
116
        }
117

    
118
        Set<UUID> excludeTaxa = new HashSet<>();
119
        excludeTaxa.add(oldAcceptedTaxonNodeUuid);
120
        TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
121
//                editor.getConversationHolder(),
122
                Messages.MoveDescriptionToOtherTaxonHandler_CHOOSE_ACC_TAXON,
123
                excludeTaxa,
124
                node,
125
                classification.getUuid());
126

    
127
        if (newAcceptedTaxonNode == null) {
128
            return ;
129
        }
130

    
131
        newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
132
        newAcceptedTaxonUuid = newAcceptedTaxonNode.getTaxon().getUuid();
133
        for(TaxonDescription taxonDescription : descriptions){
134
            operation = new MoveDescriptionToOtherTaxonOperation(menuItem.getLocalizedLabel(),
135
                    editor.getUndoContext(),
136
                    taxonDescription,
137
                    newAcceptedTaxonNode,
138
                    this,
139
                    editor,
140
                    editor.getEditorInput());
141
            AbstractUtility.executeOperation(operation, sync);
142
        }
143

    
144

    
145
    }
146

    
147
    /** {@inheritDoc} */
148
    @Override
149
    public boolean postOperation(CdmBase objectAffectedByOperation) {
150
        Display.getDefault().asyncExec(new Runnable(){
151

    
152
            @Override
153
            public void run() {
154
                //FIXME E4 migrate
155
//                AbstractUtility.close(editor);
156
//
157
                try {
158
//                    MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
159
//                    if(possibleOpenEditor != null){
160
//                        AbstractUtility.close(possibleOpenEditor);
161
//                    }
162
//                    EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, oldAcceptedTaxonNodeUuid);
163
//                    EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, newAcceptedTaxonNodeUuid);
164
                    EditorUtil.openTaxonNodeE4(newAcceptedTaxonNodeUuid, modelService, partService, application);
165
                    EditorUtil.openTaxonNodeE4(oldAcceptedTaxonNodeUuid, modelService, partService, application);
166
//                } catch (PartInitException e) {
167
//                    MessagingUtils.error(this.getClass(), e);
168
//                    throw new RuntimeException(e);
169
                } catch (Exception e) {
170
                    MessagingUtils.warningDialog(Messages.MoveDescriptionToOtherTaxonHandler_CREATE_FAILED, this, e.getMessage());
171
                }
172
            }
173

    
174
        });
175

    
176

    
177
        return true;
178
    }
179

    
180
    @Override
181
    public boolean onComplete() {
182
        return false;
183
    }
184

    
185
    @CanExecute
186
    public boolean canExecute(@Optional @Named(IServiceConstants.ACTIVE_PART) MPart activePart,
187
            MHandledMenuItem menuItem){
188
        boolean canExecute = false;
189
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
190

    
191
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
192
        if(e4WrappedPart instanceof TaxonNameEditorE4){
193
            ISelection selection = factualDataPart.getViewer().getSelection();
194
            if(selection instanceof IStructuredSelection){
195
                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
196
                canExecute = ((IStructuredSelection) selection).size()==1
197
                        &&
198
                        (firstElement instanceof FeatureNodeContainer
199
                        || firstElement instanceof DescriptionElementBase
200
                        || firstElement instanceof DescriptionBase);
201
                menuItem.setVisible(canExecute);
202
            }
203
        }
204
        return canExecute;
205
    }
206
}
(7-7/8)