Project

General

Profile

Download (4.22 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.taxeditor.editor.name.handler;
5

    
6
import java.util.ArrayList;
7
import java.util.List;
8
import java.util.UUID;
9

    
10
import org.apache.log4j.Logger;
11
import org.eclipse.core.commands.AbstractHandler;
12
import org.eclipse.core.commands.ExecutionEvent;
13
import org.eclipse.core.commands.ExecutionException;
14
import org.eclipse.core.commands.IHandler;
15
import org.eclipse.core.commands.common.NotDefinedException;
16
import org.eclipse.swt.widgets.Display;
17
import org.eclipse.ui.PartInitException;
18
import org.eclipse.ui.handlers.HandlerUtil;
19

    
20
import eu.etaxonomy.cdm.model.common.CdmBase;
21
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
22
import eu.etaxonomy.taxeditor.editor.EditorUtil;
23
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
24
import eu.etaxonomy.taxeditor.editor.Page;
25
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
26
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
27
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation;
28
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
29
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
30

    
31
/**
32
 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
33
 *
34
 * @author n.hoffmann
35
 * @created Jan 4, 2010
36
 * @version 1.0
37
 */
38
public class ChangeAcceptedTaxonToSynonymHandler extends AbstractHandler
39
		implements IHandler, IPostOperationEnabled {
40
	private static final Logger logger = Logger
41
			.getLogger(ChangeAcceptedTaxonToSynonymHandler.class);
42
	private ChangeAcceptedTaxonToSynonymOperation operation;
43

    
44
	private UUID newAcceptedTaxonNodeUuid;
45
	private TaxonNameEditor editor;
46
	
47
	/* (non-Javadoc)
48
	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
49
	 */
50
	/** {@inheritDoc} */
51
	public Object execute(ExecutionEvent event) throws ExecutionException {
52
		
53
		editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(
54
				Page.NAME);
55
		TaxonNode oldAcceptedTaxonNode = ((TaxonEditorInput) editor.getEditorInput()).getTaxonNode();
56
		
57
		// check if taxon has no children
58
		if(oldAcceptedTaxonNode.getCountChildren() > 0) {
59
			EditorUtil.warningDialog("Prerequisite not met", this, 
60
					"The accepted taxon must not have any childen. You need to move all childen to " +
61
					"another taxon node in the TaxonNavigator before attempting to turn the accepted " +
62
					"taxon into a synonym.");
63
			return null;
64
		}
65
		
66
		// Choose new accepted taxon	
67
		List<UUID> excludeTaxa = new ArrayList<UUID>();
68
		excludeTaxa.add(oldAcceptedTaxonNode.getUuid());
69
		TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), 
70
				editor.getConversationHolder(), 
71
				"Choose the accepted taxon", 
72
				excludeTaxa, 
73
				null, 
74
				oldAcceptedTaxonNode.getClassification());			
75

    
76
		if (newAcceptedTaxonNode == null) {
77
			return null;
78
		}
79
		
80
		newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
81
				
82
		try {
83
			operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(), 
84
									editor.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, this, editor);
85
			EditorUtil.executeOperation(operation);
86
			
87
		} catch (NotDefinedException e) {
88
			logger.warn("Command name not set");
89
		}
90
		
91
		return null;
92
		
93
	}
94

    
95
	/* (non-Javadoc)
96
	 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
97
	 */
98
	/** {@inheritDoc} */
99
	public boolean postOperation(CdmBase objectAffectedByOperation) {
100
		Display.getDefault().asyncExec(new Runnable(){
101

    
102
			public void run() {
103
				EditorUtil.close(editor.getMultiPageTaxonEditor());
104
				
105
				try {
106
					MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
107
					if(possibleOpenEditor != null){
108
						EditorUtil.close(possibleOpenEditor);
109
					}
110
					EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
111
				} catch (PartInitException e) {
112
					EditorUtil.error(this.getClass(), e);
113
					throw new RuntimeException(e);
114
				} catch (Exception e) {
115
					EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
116
				}
117
			}
118
			
119
		});
120
		
121
		
122
		return true;
123
	}
124

    
125
	/**
126
	 * <p>onComplete</p>
127
	 *
128
	 * @return a boolean.
129
	 */
130
	public boolean onComplete() {
131
		// TODO Auto-generated method stub
132
		return false;
133
	}	
134
}
(1-1/16)