Project

General

Profile

Download (7.86 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.core.runtime.NullProgressMonitor;
16
import org.eclipse.e4.core.di.annotations.CanExecute;
17
import org.eclipse.e4.core.di.annotations.Execute;
18
import org.eclipse.e4.core.di.annotations.Optional;
19
import org.eclipse.e4.ui.di.UISynchronize;
20
import org.eclipse.e4.ui.model.application.MApplication;
21
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
22
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
23
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
24
import org.eclipse.e4.ui.services.IServiceConstants;
25
import org.eclipse.e4.ui.workbench.modeling.EModelService;
26
import org.eclipse.e4.ui.workbench.modeling.EPartService;
27
import org.eclipse.jface.dialogs.MessageDialog;
28
import org.eclipse.jface.viewers.ISelection;
29
import org.eclipse.jface.viewers.IStructuredSelection;
30
import org.eclipse.swt.widgets.Display;
31
import org.eclipse.swt.widgets.Shell;
32

    
33
import eu.etaxonomy.cdm.model.description.DescriptionBase;
34
import eu.etaxonomy.cdm.model.description.TaxonDescription;
35
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
36
import eu.etaxonomy.cdm.model.taxon.Classification;
37
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
38
import eu.etaxonomy.taxeditor.editor.EditorUtil;
39
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
40
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
41
import eu.etaxonomy.taxeditor.editor.view.descriptive.e4.FactualDataPartE4;
42
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
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
import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
49

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

    
58
    private MoveDescriptionToOtherTaxonOperation operation;
59

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

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

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

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

    
84
        }
85

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

    
97
        // Choose the target taxon
98

    
99

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

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

    
119
        if (newAcceptedTaxonNode == null) {
120
            return ;
121
        }
122

    
123
        newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
124
        newAcceptedTaxonUuid = newAcceptedTaxonNode.getTaxon().getUuid();
125

    
126
        Collection<IE4SavablePart> targetEditors = EditorUtil.checkForTaxonChanges(newAcceptedTaxonUuid, partService);
127

    
128
        if (!targetEditors.isEmpty() || this.editor.isDirty()){
129
            if(MessageDialog.openQuestion(null,Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE)) {
130
                this.editor.save(new NullProgressMonitor());
131
                targetEditors.forEach(editor->editor.save(new NullProgressMonitor()));
132
            }
133
            else{
134
                return;
135
            }
136
        }
137

    
138
        for(TaxonDescription taxonDescription : descriptions){
139
            operation = new MoveDescriptionToOtherTaxonOperation(menuItem.getLocalizedLabel(),
140
                    editor.getUndoContext(),
141
                    taxonDescription,
142
                    newAcceptedTaxonNode,
143
                    this,
144
                    editor,
145
                    editor.getEditorInput());
146
            editor.getEditorInput().addOperation(operation);
147
            editor.setDirty();
148
            editor.getTaxon().removeDescription(taxonDescription);
149
            editor.redraw();
150
           // AbstractUtility.executeOperation(operation, sync);
151
        }
152

    
153

    
154
    }
155

    
156
    /** {@inheritDoc} */
157
    @Override
158
    public boolean postOperation(Object objectAffectedByOperation) {
159
        Display.getDefault().asyncExec(new Runnable(){
160

    
161
            @Override
162
            public void run() {
163
                //FIXME E4 migrate
164
                try {
165
                    EditorUtil.openTaxonNodeE4(newAcceptedTaxonNodeUuid, modelService, partService, application);
166
                } catch (Exception e) {
167
                    MessagingUtils.warningDialog(Messages.MoveDescriptionToOtherTaxonHandler_CREATE_FAILED, this, e.getMessage());
168
                }
169
            }
170

    
171
        });
172

    
173

    
174
        return true;
175
    }
176

    
177
    @Override
178
    public boolean onComplete() {
179
        return false;
180
    }
181

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

    
188
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
189
        if(e4WrappedPart instanceof TaxonNameEditorE4){
190
            ISelection selection = factualDataPart.getViewer().getSelection();
191
            if(selection instanceof IStructuredSelection){
192
                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
193
                canExecute = ((IStructuredSelection) selection).size()==1
194
                        && firstElement instanceof DescriptionBase && !(firstElement instanceof TaxonNameDescription);
195
                menuItem.setVisible(canExecute);
196
            }
197
        }
198
        return canExecute;
199
    }
200
}
(8-8/9)