Project

General

Profile

Download (7.05 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.di.UISynchronize;
16
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
17
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
18
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
19
import org.eclipse.e4.ui.services.IServiceConstants;
20
import org.eclipse.jface.dialogs.MessageDialog;
21
import org.eclipse.jface.viewers.ISelection;
22
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.swt.widgets.Display;
24
import org.eclipse.swt.widgets.Shell;
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.l10n.Messages;
34
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
35
import eu.etaxonomy.taxeditor.editor.view.descriptive.e4.FactualDataPartE4;
36
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
37
import eu.etaxonomy.taxeditor.model.AbstractUtility;
38
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
39
import eu.etaxonomy.taxeditor.model.MessagingUtils;
40
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
41
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
42
import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
43

    
44
/**
45
 *
46
 * @author pplitzner
47
 * @date 15.08.2017
48
 *
49
 */
50
public class MoveDescriptionToOtherTaxonHandlerE4 implements IPostOperationEnabled {
51

    
52
    private MoveDescriptionToOtherTaxonOperation operation;
53

    
54
    private UUID newAcceptedTaxonNodeUuid;
55
    private TaxonNameEditorE4 editor;
56

    
57
    @Execute
58
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart,
59
            @Optional@Named(IServiceConstants.ACTIVE_SELECTION) Object selection,
60
            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell, MMenuItem menuItem,
61
            UISynchronize sync) {
62

    
63

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

    
77
            }
78
        }
79

    
80
        List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
81
        TaxonDescription description = null;
82
        if (selection instanceof FeatureNodeContainer){
83
        	FeatureNodeContainer container = (FeatureNodeContainer)selection;
84
        	description = (TaxonDescription) container.getDescription();
85
        }else if (selection instanceof TaxonDescription){
86
        	description = (TaxonDescription)selection;
87
        }
88
        descriptions.add(description);
89

    
90
        // Choose the target taxon
91
        List<UUID> excludeTaxa = new ArrayList<UUID>();
92

    
93
        excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
94

    
95
        //get current taxon node
96
        TaxonNode node = null;
97
        Classification classification = null;
98
        if(editor!=null){
99
            node = editor.getEditorInput().getTaxonNode();
100
            classification = node.getClassification();
101
        }
102
        TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
103
                editor.getConversationHolder(),
104
                Messages.MoveDescriptionToOtherTaxonHandler_CHOOSE_ACC_TAXON,
105
                excludeTaxa,
106
                node,
107
                classification);
108

    
109
        if (newAcceptedTaxonNode == null) {
110
            return ;
111
        }
112

    
113
        newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
114

    
115
        for(TaxonDescription taxonDescription : descriptions){
116
            operation = new MoveDescriptionToOtherTaxonOperation(menuItem.getLocalizedLabel(),
117
                    editor.getUndoContext(),
118
                    taxonDescription,
119
                    newAcceptedTaxonNode,
120
                    this,
121
                    editor,
122
                    editor.getEditorInput());
123
            AbstractUtility.executeOperation(operation, sync);
124
        }
125

    
126

    
127
    }
128

    
129
    /** {@inheritDoc} */
130
    @Override
131
    public boolean postOperation(CdmBase objectAffectedByOperation) {
132
        Display.getDefault().asyncExec(new Runnable(){
133

    
134
            @Override
135
            public void run() {
136
                //FIXME E4 migrate
137
//                AbstractUtility.close(editor);
138
//
139
                try {
140
//                    MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
141
//                    if(possibleOpenEditor != null){
142
//                        AbstractUtility.close(possibleOpenEditor);
143
//                    }
144
                    EditorUtil.openTaxonNodeE4(newAcceptedTaxonNodeUuid);
145
//                } catch (PartInitException e) {
146
//                    MessagingUtils.error(this.getClass(), e);
147
//                    throw new RuntimeException(e);
148
                } catch (Exception e) {
149
                    MessagingUtils.warningDialog(Messages.MoveDescriptionToOtherTaxonHandler_CREATE_FAILED, this, e.getMessage());
150
                }
151
            }
152

    
153
        });
154

    
155

    
156
        return true;
157
    }
158

    
159
    @Override
160
    public boolean onComplete() {
161
        return false;
162
    }
163

    
164
    @CanExecute
165
    public boolean canExecute(@Optional @Named(IServiceConstants.ACTIVE_PART) MPart activePart,
166
            MHandledMenuItem menuItem){
167
        boolean canExecute = false;
168
        FactualDataPartE4 factualDataPart = (FactualDataPartE4) activePart.getObject();
169

    
170
        Object e4WrappedPart = WorkbenchUtility.getE4WrappedPart(factualDataPart.getSelectionProvidingPart());
171
        if(e4WrappedPart instanceof TaxonNameEditorE4){
172
            ISelection selection = factualDataPart.getViewer().getSelection();
173
            if(selection instanceof IStructuredSelection){
174
                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
175
                canExecute = firstElement instanceof FeatureNodeContainer
176
                        || firstElement instanceof DescriptionElementBase
177
                        || firstElement instanceof DescriptionBase;
178
                menuItem.setVisible(canExecute);
179
            }
180
        }
181
        return canExecute;
182
    }
183
}
(7-7/8)