Project

General

Profile

Download (5.87 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
5

    
6
import java.util.ArrayList;
7
import java.util.HashSet;
8
import java.util.Iterator;
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.e4.core.di.annotations.CanExecute;
16
import org.eclipse.e4.ui.di.UISynchronize;
17
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
18
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
19
import org.eclipse.e4.ui.services.IServiceConstants;
20
import org.eclipse.jface.dialogs.MessageDialog;
21
import org.eclipse.jface.viewers.TreeSelection;
22
import org.eclipse.swt.widgets.Shell;
23

    
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
26
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27
import eu.etaxonomy.taxeditor.model.AbstractUtility;
28
import eu.etaxonomy.taxeditor.model.MessagingUtils;
29
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
30
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
31
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
32
import eu.etaxonomy.taxeditor.navigation.navigator.operation.ChangeAcceptedTaxonToSynonymOperation;
33
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
34
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
35
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
36

    
37
/**
38
 *
39
 * @author pplitzner
40
 * @date 05.09.2017
41
 *
42
 */
43
public class ChangeAcceptedTaxonToSynonymHandlerE4 extends DeleteHandlerE4 implements IPostOperationEnabled {
44

    
45
    @Override
46
    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection,
47
            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
48
            @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
49
            MHandledMenuItem menuItem, UISynchronize sync) {
50

    
51
        TaxonNavigatorE4 taxonNavigator = (TaxonNavigatorE4) activePart.getObject();
52

    
53
		Iterator selectionIterator = selection.iterator();
54
		Set<ITaxonTreeNode> treeNodes = new HashSet<ITaxonTreeNode>();
55

    
56
		while (selectionIterator.hasNext()){
57
			Object object = selectionIterator.next();
58
			if(object instanceof ITaxonTreeNode) {
59
                treeNodes.add((ITaxonTreeNode) object);
60
            }
61
		}
62
		boolean allEditorsClosed = true;
63
		for (ITaxonTreeNode treeNode : treeNodes){
64
			if(treeNode instanceof TaxonNode) {
65
				allEditorsClosed &= closeObsoleteEditor((TaxonNode) treeNode);
66
			}
67
		}
68
		AbstractPostOperation operation = null;
69
		if (treeNodes.size() == 1 ){
70
			ITaxonTreeNode treeNode = treeNodes.iterator().next();
71
            ITaxonTreeNode oldAcceptedTaxonNode =treeNode;
72

    
73
            // check if taxon has no children
74
            if(((TaxonNode)oldAcceptedTaxonNode).getCountChildren() > 0) {
75
            	MessagingUtils.warningDialog(Messages.ChangeAcceptedTaxonToSynonymHandler_PREREQUISITE, this,
76
            			Messages.ChangeAcceptedTaxonToSynonymHandler_PREREQUISITE_MESSAGE);
77
            	return;
78
            }
79
            /*if(((TaxonNode)oldAcceptedTaxonNode).getTaxon().hasSynonyms()) {
80
            	EditorUtil.warningDialog("Prerequisite not met", this,
81
            			"The accepted taxon must not have any synonyms. You need to move all synonyms to " +
82
            			"another taxon before attempting to turn the accepted " +
83
            			"taxon into a synonym.");
84
            	return null;
85
            }*/
86

    
87
            List<UUID> excludeTaxa = new ArrayList<UUID>();
88
            excludeTaxa.add(((TaxonNode)oldAcceptedTaxonNode).getTaxon().getUuid());
89
            TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
90
            		taxonNavigator.getConversationHolder(),
91
            		Messages.ChangeAcceptedTaxonToSynonymHandler_CHOOSE_TAXON,
92
            		excludeTaxa,
93
            		null,
94
            		((TaxonNode)oldAcceptedTaxonNode).getClassification());
95

    
96
            if (newAcceptedTaxonNode == null) {
97
            	return;
98
            }
99

    
100
            if (allEditorsClosed){
101

    
102
            		operation = new ChangeAcceptedTaxonToSynonymOperation(menuItem.getLocalizedLabel(),
103
            		        NavigationUtil.getUndoContext(),
104
            		        oldAcceptedTaxonNode,
105
            		        newAcceptedTaxonNode,
106
            				taxonNavigator,
107
            				taxonNavigator,
108
            				taxonNavigator);
109

    
110
            		AbstractUtility.executeOperation(operation, sync);
111
            }
112
		} else{
113
			if( MessageDialog.openConfirm(shell, Messages.ChangeAcceptedTaxonToSynonymHandler_MOVE_SYNONYMY, Messages.ChangeAcceptedTaxonToSynonymHandler_MOVE_SYNONYMY_MESSAGE)){
114
				return;
115
			}
116
		}
117
	}
118

    
119
    @CanExecute
120
    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
121
        boolean canExecute = false;
122
        canExecute = selection.getFirstElement() instanceof TaxonNode
123
                && ((TaxonNode) selection.getFirstElement()).getTaxon()!=null;
124
        menuItem.setVisible(canExecute);
125
        return canExecute;
126
    }
127

    
128
	/** {@inheritDoc} */
129
	@Override
130
    public boolean postOperation(CdmBase objectAffectedByOperation) {
131
	    //FIXME E4 migrate
132
//		Display.getDefault().asyncExec(new Runnable(){
133
//
134
//			@Override
135
//            public void run() {
136
//				EditorUtil.close(editor.getMultiPageTaxonEditor());
137
//
138
//				try {
139
//					MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
140
//					if(possibleOpenEditor != null){
141
//						EditorUtil.close(possibleOpenEditor);
142
//					}
143
//					EditorUtil.openTaxonNodeE4(newAcceptedTaxonNodeUuid);
144
//				} catch (PartInitException e) {
145
//					MessagingUtils.error(this.getClass(), e);
146
//					throw new RuntimeException(e);
147
//				} catch (Exception e) {
148
//					MessagingUtils.warningDialog(Messages.ChangeAcceptedTaxonToSynonymHandler_CREATE_FAILED, this, e.getMessage());
149
//				}
150
//			}
151
//
152
//		});
153
		return true;
154
	}
155

    
156
	@Override
157
    public boolean onComplete() {
158
		return false;
159
	}
160
}
(1-1/17)