Add generic default command for opening taxon editor for taxa and taxon
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / handler / defaultHandler / DefaultOpenTaxonEditorHandler.java
1 package eu.etaxonomy.taxeditor.editor.handler.defaultHandler;
2 import java.util.UUID;
3
4 import org.eclipse.core.commands.AbstractHandler;
5 import org.eclipse.core.commands.ExecutionEvent;
6 import org.eclipse.core.commands.ExecutionException;
7 import org.eclipse.core.commands.ParameterType;
8 import org.eclipse.core.commands.common.NotDefinedException;
9 import org.eclipse.jface.viewers.ISelection;
10 import org.eclipse.jface.viewers.IStructuredSelection;
11 import org.eclipse.ui.PartInitException;
12 import org.eclipse.ui.handlers.HandlerUtil;
13
14 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
15 import eu.etaxonomy.cdm.api.service.ITaxonService;
16 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
17 import eu.etaxonomy.cdm.model.taxon.Taxon;
18 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
19 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
20 import eu.etaxonomy.taxeditor.editor.EditorUtil;
21 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
22 import eu.etaxonomy.taxeditor.handler.defaultHandler.DefaultOpenClassificationWizardHandler;
23 import eu.etaxonomy.taxeditor.model.MessagingUtils;
24 import eu.etaxonomy.taxeditor.store.CdmStore;
25
26
27 public class DefaultOpenTaxonEditorHandler extends AbstractHandler {
28
29 @Override
30 public Object execute(ExecutionEvent event) throws ExecutionException {
31 String commandId = event.getCommand().getId();
32 String uuidParameterId = commandId+".uuid";
33 //check if uuid parameter is set
34 if(event.getParameter(uuidParameterId)!=null){
35 Object object = event.getObjectParameterForExecution(uuidParameterId);
36 ParameterType parameterType;
37 try {
38 parameterType = event.getCommand().getParameterType(uuidParameterId);
39 if(parameterType.isCompatible(object)){
40 TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load((UUID) object);
41 if(taxonNode!=null){
42 openTaxonEditor(event, taxonNode.getTaxon().getUuid());
43 }
44 else {
45 TaxonBase taxon = CdmStore.getService(ITaxonService.class).load((UUID) object);
46 openTaxonEditor(event, taxon.getUuid());
47 }
48 }
49 } catch (NotDefinedException e) {
50 MessagingUtils.error(DefaultOpenClassificationWizardHandler.class, "Error while opening classification!", e);
51 }
52 }
53 //if not try current selection
54 else{
55 ISelection selection = HandlerUtil.getCurrentSelection(event);
56
57 if(selection instanceof IStructuredSelection){
58 final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
59
60 Taxon taxon = null;
61 Object firstElement = structuredSelection.getFirstElement();
62 if(firstElement instanceof TaxonBase){
63 openTaxonEditor(event, (HibernateProxyHelper.deproxy(firstElement, TaxonBase.class).getUuid()));
64 }
65 else if(firstElement instanceof TaxonNode){
66 taxon = (HibernateProxyHelper.deproxy(firstElement, TaxonNode.class)).getTaxon();
67 openTaxonEditor(event, taxon.getUuid());
68 }
69 }
70 }
71 return null;
72 }
73
74 private void openTaxonEditor(ExecutionEvent event, UUID taxonUuid) {
75 TaxonEditorInput input = TaxonEditorInput.NewInstanceFromTaxonBase(taxonUuid);
76 try {
77 EditorUtil.open(input);
78 } catch (PartInitException e) {
79 MessagingUtils.error(DefaultOpenTaxonEditorHandler.class, "Could not open taxon editor for taxon "+input.getTaxon(), e);
80 }
81 }
82
83
84 }