Project

General

Profile

Download (5.71 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
10

    
11
import java.util.Collection;
12
import java.util.Iterator;
13

    
14
import javax.inject.Named;
15

    
16
import org.eclipse.core.commands.operations.AbstractOperation;
17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.NullProgressMonitor;
19
import org.eclipse.core.runtime.Status;
20
import org.eclipse.e4.core.di.annotations.CanExecute;
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.services.IServiceConstants;
24
import org.eclipse.jface.dialogs.MessageDialog;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.TreeSelection;
27
import org.eclipse.jface.window.Window;
28
import org.eclipse.jface.wizard.WizardDialog;
29
import org.eclipse.swt.widgets.Shell;
30

    
31
import eu.etaxonomy.cdm.api.service.description.AggregationMode;
32
import eu.etaxonomy.cdm.api.service.description.DistributionAggregationConfiguration;
33
import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
34
import eu.etaxonomy.cdm.model.taxon.Classification;
35
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
36
import eu.etaxonomy.taxeditor.editor.EditorUtil;
37
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
38
import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
39
import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
40
import eu.etaxonomy.taxeditor.ui.dialog.configurator.DistributionAggregationConfiguratorWizard;
41
import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
42

    
43
/**
44
 * @author k.luther
45
 * @since 15.11.2019
46
 */
47
public class AggregateDistributionForSubTreeHandler extends RemotingCdmHandlerE4 {
48

    
49

    
50

    
51
    private TaxonNodeDto taxonNode;
52
    private DistributionAggregationConfiguration configurator;
53
    private static final String NO = Messages.NO;
54
    private static final String CANCEL = Messages.RemotingMoveTaxonNodeHandler_CANCEL;
55
    private static final String YES = Messages.YES;
56

    
57
    /**
58
     * @param label
59
     */
60
    public AggregateDistributionForSubTreeHandler() {
61
        super("");
62

    
63
    }
64

    
65

    
66
    @Override
67
    public IStatus allowOperations(IStructuredSelection selection, Shell shell, MPart activePart,
68
            MHandledMenuItem menuItem) {
69
     // check that only a single taxon tree node has been selected
70
        if(selection.size() > 1) {  }
71

    
72
        // check for no taxon tree node selected
73
        if(selection.size() == 0) {
74
            return new Status(IStatus.ERROR,
75
                    "unknown", //$NON-NLS-1$
76
                    TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE);
77
        }
78

    
79
        // check that selected object is a taxon node
80
        Object obj = selection.iterator().next();
81
        if(obj instanceof TaxonNodeDto) {
82
             taxonNode = (TaxonNodeDto)obj;
83
        } else if(obj instanceof Classification){
84
            taxonNode = new TaxonNodeDto(((Classification)obj).getRootNode());
85
        }else{
86
            return new Status(IStatus.ERROR,
87
                    "unknown", //$NON-NLS-1$
88
                    TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
89
        }
90
        Collection<IE4SavablePart> dirtyParts = EditorUtil.checkForTaxonChanges(null, partService);
91

    
92
        if (dirtyParts != null && !dirtyParts.isEmpty()){
93
            String[] buttonLables = {YES, NO,CANCEL};
94
            MessageDialog dialog = new MessageDialog(null,  Messages.SetPublishFlagForSubtreeHandlerE4_UnsavedChanges, null, Messages.SetPublishFlagForSubtreeHandlerE4_UnsavedChangesQuestion, MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
95
            dialog.open();
96
            int returnCode = dialog.getReturnCode();
97
            boolean proceed = false;
98
            if (returnCode == 0){
99
                proceed = true;
100
            }else if (returnCode == 2){
101
                return Status.CANCEL_STATUS;
102
            }
103

    
104
            Iterator<IE4SavablePart> partIterator = dirtyParts.iterator();
105
            while( partIterator.hasNext() ){
106
                IE4SavablePart part = partIterator.next();
107
                if (proceed) {
108
                    if (part != null){
109
                        part.save(new NullProgressMonitor());
110
                    }
111
                }
112
            }
113
        }
114

    
115

    
116
        configurator = DistributionAggregationConfiguration.NewInstance(AggregationMode.byAreasAndRanks(), null, TaxonNodeFilter.NewSubtreeInstance(taxonNode.getUuid()), null);
117
        DistributionAggregationConfiguratorWizard wizard = new DistributionAggregationConfiguratorWizard(configurator);
118

    
119
        WizardDialog dialog = new WizardDialog(shell, wizard);
120

    
121
        if (dialog.open() == Window.OK) {
122
            return Status.OK_STATUS;
123
        }else{
124
            return Status.CANCEL_STATUS;
125
        }
126
    }
127

    
128
    @Override
129
    public AbstractOperation prepareOperation(IStructuredSelection selection, Shell shell, MPart activePart,
130
            MHandledMenuItem menuItem) {
131
        // TODO Auto-generated method stub
132
        return null;
133
    }
134

    
135
    @Override
136
    public void onComplete() {
137
        // TODO Auto-generated method stub
138

    
139
    }
140

    
141
    @Override
142
    protected Object getTrigger() {
143
        // TODO Auto-generated method stub
144
        return null;
145
    }
146

    
147
    @CanExecute
148
    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
149
        boolean canExecute = false;
150
        canExecute = selection.size()==1
151
                && selection.getFirstElement() instanceof TaxonNodeDto;
152
        menuItem.setEnabled(canExecute);
153
        return canExecute;
154
    }
155

    
156
}
(1-1/24)