Project

General

Profile

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

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

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

    
43
	private UUID newAcceptedTaxonNodeUuid;
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) {
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);
111
            }
112
		} else{
113
			if( MessageDialog.openConfirm(shell, Messages.ChangeAcceptedTaxonToSynonymHandler_MOVE_SYNONYMY, Messages.ChangeAcceptedTaxonToSynonymHandler_MOVE_SYNONYMY_MESSAGE)){
114
				return;
115
			}
116
		}
117
	}
118

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

    
147
	@Override
148
    public boolean onComplete() {
149
		return false;
150
	}
151
}
(1-1/11)