Project

General

Profile

Download (6.41 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.taxeditor.navigation.navigator.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 org.apache.log4j.Logger;
14
import org.eclipse.core.commands.AbstractHandler;
15
import org.eclipse.core.commands.ExecutionEvent;
16
import org.eclipse.core.commands.ExecutionException;
17
import org.eclipse.core.commands.IHandler;
18
import org.eclipse.core.commands.common.NotDefinedException;
19
import org.eclipse.core.commands.operations.IUndoContext;
20
import org.eclipse.jface.dialogs.MessageDialog;
21
import org.eclipse.jface.viewers.TreeSelection;
22
import org.eclipse.swt.widgets.Display;
23
import org.eclipse.ui.PartInitException;
24
import org.eclipse.ui.handlers.HandlerUtil;
25

    
26
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
27
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.taxon.Classification;
30
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
31
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
32
import eu.etaxonomy.taxeditor.editor.EditorUtil;
33
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
34
import eu.etaxonomy.taxeditor.editor.Page;
35
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
36
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
37
import eu.etaxonomy.taxeditor.model.MessagingUtils;
38
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
39
import eu.etaxonomy.taxeditor.navigation.navigator.operation.ChangeAcceptedTaxonToSynonymOperation;
40
import eu.etaxonomy.taxeditor.navigation.navigator.operation.DeleteOperation;
41
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
42
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
43
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
44

    
45
/**
46
 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
47
 *
48
 * @author n.hoffmann
49
 * @created Jan 4, 2010
50
 * @version 1.0
51
 */
52
public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler
53
		implements IHandler, IPostOperationEnabled {
54
	private static final Logger logger = Logger
55
			.getLogger(ChangeAcceptedTaxonToSynonymHandler.class);
56
	private ChangeAcceptedTaxonToSynonymOperation operation;
57

    
58
	private UUID newAcceptedTaxonNodeUuid;
59
	private TaxonNameEditor editor;
60
	
61
	/* (non-Javadoc)
62
	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
63
	 */
64
	/** {@inheritDoc} */
65
	public Object execute(ExecutionEvent event) throws ExecutionException {
66
		
67
		
68
		 activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
69

    
70
		taxonNavigator = NavigationUtil.showNavigator();
71

    
72
		TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
73

    
74
		String plural = selection.size() > 1 ? "s" : "";
75
		// Prompt user for confirmation
76
		
77
		
78

    
79
		Iterator selectionIterator = selection.iterator();
80
		Set<ITaxonTreeNode> treeNodes = new HashSet<ITaxonTreeNode>();
81

    
82
		while (selectionIterator.hasNext()){
83
			Object object = selectionIterator.next();
84
			if(object instanceof ITaxonTreeNode) {
85
                treeNodes.add((ITaxonTreeNode) object);
86
            }
87
		}
88
		boolean allEditorsClosed = true;
89
		for (ITaxonTreeNode treeNode : treeNodes){
90
			if(treeNode instanceof TaxonNode) {
91
				allEditorsClosed &= closeObsoleteEditor((TaxonNode) treeNode);
92
			}
93
		}
94
		AbstractPostOperation operation = null;
95
		if (treeNodes.size() == 1 ){
96
			try {
97
				
98
				ITaxonTreeNode treeNode = treeNodes.iterator().next();
99
				ITaxonTreeNode oldAcceptedTaxonNode =treeNode;
100
				
101
				// check if taxon has no children
102
				if(((TaxonNode)oldAcceptedTaxonNode).getCountChildren() > 0) {
103
					MessagingUtils.warningDialog("Prerequisite not met", this, 
104
							"The accepted taxon must not have any childen. You need to move all childen to " +
105
							"another taxon node in the TaxonNavigator before attempting to turn the accepted " +
106
							"taxon into a synonym.");
107
					return null;
108
				}
109
				/*if(((TaxonNode)oldAcceptedTaxonNode).getTaxon().hasSynonyms()) {
110
					EditorUtil.warningDialog("Prerequisite not met", this, 
111
							"The accepted taxon must not have any synonyms. You need to move all synonyms to " +
112
							"another taxon before attempting to turn the accepted " +
113
							"taxon into a synonym.");
114
					return null;
115
				}*/
116
				
117
				List<UUID> excludeTaxa = new ArrayList<UUID>();
118
				excludeTaxa.add(oldAcceptedTaxonNode.getUuid());
119
				TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), 
120
						taxonNavigator.getConversationHolder(), 
121
						"Choose the accepted taxon", 
122
						excludeTaxa, 
123
						null, 
124
						((TaxonNode)oldAcceptedTaxonNode).getClassification());			
125

    
126
				if (newAcceptedTaxonNode == null) {
127
					return null;
128
				}
129
	
130
				if (allEditorsClosed){
131
					
132
						operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(), NavigationUtil.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode,
133
								taxonNavigator, taxonNavigator);
134
			
135
						NavigationUtil.executeOperation(operation);
136
						//}
137
				}
138
	
139
		
140
	
141
			} catch (NotDefinedException e) {
142
				MessagingUtils.warn(getClass(), "Command name not set");
143
			}
144
		} else{
145
			if( MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Moving to synonymy", "The operation move accepted taxon to synonymy is available only for a single taxon.")){
146
				return null;
147
			}
148
		}
149
		
150
		
151
		return null;
152
		
153
	}
154

    
155
	/* (non-Javadoc)
156
	 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
157
	 */
158
	/** {@inheritDoc} */
159
	public boolean postOperation(CdmBase objectAffectedByOperation) {
160
		Display.getDefault().asyncExec(new Runnable(){
161

    
162
			public void run() {
163
				EditorUtil.close(editor.getMultiPageTaxonEditor());
164
				
165
				try {
166
					MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
167
					if(possibleOpenEditor != null){
168
						EditorUtil.close(possibleOpenEditor);
169
					}
170
					EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
171
				} catch (PartInitException e) {
172
					MessagingUtils.error(this.getClass(), e);
173
					throw new RuntimeException(e);
174
				} catch (Exception e) {
175
					MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage());
176
				}
177
			}
178
			
179
		});
180
		
181
		
182
		return true;
183
	}
184

    
185
	/**
186
	 * <p>onComplete</p>
187
	 *
188
	 * @return a boolean.
189
	 */
190
	public boolean onComplete() {
191
		// TODO Auto-generated method stub
192
		return false;
193
	}	
194
}
(1-1/10)