Project

General

Profile

Download (6.87 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.List;
8
import java.util.UUID;
9

    
10
import javax.inject.Named;
11

    
12
import org.eclipse.e4.core.di.annotations.CanExecute;
13
import org.eclipse.e4.core.di.annotations.Execute;
14
import org.eclipse.e4.core.di.annotations.Optional;
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.model.application.ui.menu.MMenuItem;
18
import org.eclipse.e4.ui.services.IServiceConstants;
19
import org.eclipse.jface.dialogs.MessageDialog;
20
import org.eclipse.jface.viewers.ISelection;
21
import org.eclipse.jface.viewers.IStructuredSelection;
22
import org.eclipse.swt.widgets.Display;
23
import org.eclipse.swt.widgets.Shell;
24
import org.eclipse.ui.PartInitException;
25

    
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.description.DescriptionBase;
28
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
29
import eu.etaxonomy.cdm.model.description.TaxonDescription;
30
import eu.etaxonomy.cdm.model.taxon.Classification;
31
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
32
import eu.etaxonomy.taxeditor.editor.EditorUtil;
33
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
34
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
35
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
36
import eu.etaxonomy.taxeditor.editor.view.descriptive.e4.FactualDataPartE4;
37
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
38
import eu.etaxonomy.taxeditor.model.AbstractUtility;
39
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
40
import eu.etaxonomy.taxeditor.model.MessagingUtils;
41
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
42
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
43
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
44
import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
45

    
46
/**
47
 *
48
 * @author pplitzner
49
 * @date 15.08.2017
50
 *
51
 */
52
public class MoveDescriptionToOtherTaxonHandler implements IPostOperationEnabled {
53

    
54
    private MoveDescriptionToOtherTaxonOperation operation;
55

    
56
    private UUID newAcceptedTaxonNodeUuid;
57
    private MultiPageTaxonEditor editor;
58

    
59
    @Execute
60
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart,
61
            @Optional@Named(IServiceConstants.ACTIVE_SELECTION) TaxonDescription description,
62
            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell, MMenuItem menuItem) {
63

    
64

    
65
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
66
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
67
        if(e4WrappedPart instanceof MultiPageTaxonEditor){
68
            editor = (MultiPageTaxonEditor) e4WrappedPart;
69
            if (this.editor.isDirty()){
70
                boolean proceed = MessageDialog.openQuestion(null,
71
                        Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
72
                if (proceed) {
73
                    editor.doSave(AbstractUtility.getMonitor());
74
                } else {
75
                    return;
76
                }
77

    
78
            }
79
        }
80

    
81
        List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
82
        descriptions.add(description);
83

    
84
        // Choose the target taxon
85
        List<UUID> excludeTaxa = new ArrayList<UUID>();
86
        excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
87

    
88
        //get current taxon node
89
        TaxonNode node = null;
90
        Classification classification = null;
91
        MultiPageTaxonEditor taxonEditor = EditorUtil.getActiveMultiPageTaxonEditor();
92
        if(taxonEditor!=null){
93
            node = ((TaxonEditorInput) taxonEditor.getEditorInput()).getTaxonNode();
94
            classification = node.getClassification();
95
        }
96
        TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
97
                editor.getConversationHolder(),
98
                Messages.MoveDescriptionToOtherTaxonHandler_CHOOSE_ACC_TAXON,
99
                excludeTaxa,
100
                node,
101
                classification);
102

    
103
        if (newAcceptedTaxonNode == null) {
104
            return ;
105
        }
106

    
107
        newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
108

    
109
        for(TaxonDescription taxonDescription : descriptions){
110
            operation = new MoveDescriptionToOtherTaxonOperation(menuItem.getLocalizedLabel(),
111
                    editor.getUndoContext(),
112
                    taxonDescription,
113
                    newAcceptedTaxonNode,
114
                    this,
115
                    editor,
116
                    (ICdmEntitySessionEnabled)editor.getEditorInput());
117
            AbstractUtility.executeOperation(operation);
118
        }
119

    
120

    
121
    }
122

    
123
    /** {@inheritDoc} */
124
    @Override
125
    public boolean postOperation(CdmBase objectAffectedByOperation) {
126
        Display.getDefault().asyncExec(new Runnable(){
127

    
128
            @Override
129
            public void run() {
130
                AbstractUtility.close(editor);
131

    
132
                try {
133
                    MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
134
                    if(possibleOpenEditor != null){
135
                        AbstractUtility.close(possibleOpenEditor);
136
                    }
137
                    EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
138
                } catch (PartInitException e) {
139
                    MessagingUtils.error(this.getClass(), e);
140
                    throw new RuntimeException(e);
141
                } catch (Exception e) {
142
                    MessagingUtils.warningDialog(Messages.MoveDescriptionToOtherTaxonHandler_CREATE_FAILED, this, e.getMessage());
143
                }
144
            }
145

    
146
        });
147

    
148

    
149
        return true;
150
    }
151

    
152
    @Override
153
    public boolean onComplete() {
154
        return false;
155
    }
156

    
157
    @CanExecute
158
    public boolean canExecute(@Optional @Named(IServiceConstants.ACTIVE_PART) MPart activePart,
159
            MHandledMenuItem menuItem){
160
        boolean canExecute = false;
161
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
162

    
163
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
164
        if(e4WrappedPart instanceof MultiPageTaxonEditor){
165
            ISelection selection = factualDataPart.getViewer().getSelection();
166
            if(selection instanceof IStructuredSelection){
167
                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
168
                canExecute = firstElement instanceof FeatureNodeContainer
169
                        || firstElement instanceof DescriptionElementBase
170
                        || firstElement instanceof DescriptionBase;
171
                menuItem.setVisible(canExecute);
172
            }
173
        }
174
        return canExecute;
175
    }
176
}
(7-7/8)