Project

General

Profile

Download (5.76 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.model.application.ui.basic.MPart;
17
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
18
import org.eclipse.e4.ui.services.IServiceConstants;
19
import org.eclipse.jface.dialogs.MessageDialog;
20
import org.eclipse.jface.viewers.TreeSelection;
21
import org.eclipse.swt.widgets.Shell;
22

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

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

    
44
	private UUID newAcceptedTaxonNodeUuid;
45

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

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

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

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

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

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

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

    
101
            if (allEditorsClosed){
102

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

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

    
120
    @CanExecute
121
    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
122
        boolean canExecute = false;
123
        menuItem.setVisible(canExecute);
124
        canExecute = selection.getFirstElement() instanceof TaxonNode;
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/11)