Correctly handle UuidAndTitleCache type in SearchResultView #5700
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / NavigationUtil.java
index a266c8d9249de70341c8ddebb3d14107d3c44dd8..47d63d05bcf014099f9e4d58b06bd5d226398a2c 100644 (file)
@@ -12,25 +12,27 @@ package eu.etaxonomy.taxeditor.navigation;
 import java.util.Set;
 import java.util.UUID;
 
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.NotEnabledException;
-import org.eclipse.core.commands.NotHandledException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.commands.operations.UndoContext;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.navigator.CommonViewer;
 
+import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -43,6 +45,8 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin;
 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
+import eu.etaxonomy.taxeditor.newWizard.NewClassificationWizard;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 /**
@@ -55,36 +59,45 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 public class NavigationUtil extends AbstractUtility{
        private static IUndoContext defaultUndoContext;
 
-       /**
-        * <p>executeEditHandler</p>
-        */
-       public static void executeEditHandler(){
-
-               String commandId = "eu.etaxonomy.taxeditor.navigation.command.update.editSelection";
-
-               IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
-               try {
-                       handlerService.executeCommand(commandId, null);
-               } catch (ExecutionException e) {
-                       MessagingUtils.error(NavigationUtil.class, e);
-               } catch (NotDefinedException e) {
-                       MessagingUtils.error(NavigationUtil.class, e);
-               } catch (NotEnabledException e) {
-                       MessagingUtils.error(NavigationUtil.class, e);
-               } catch (NotHandledException e) {
-                       MessagingUtils.error(NavigationUtil.class, e);
-               }
-       }
-
        /**
         * <p>openEditor</p>
         *
         * @param selectedObject a {@link eu.etaxonomy.cdm.model.common.CdmBase} object.
         */
+       public static void openEditor(UuidAndTitleCache uuidAndTitleCache){
+           Class type = uuidAndTitleCache.getType();
+           if(type.equals(Classification.class)){
+               Classification classification = CdmStore.getService(IClassificationService.class).load(uuidAndTitleCache.getUuid());
+               openEditor(classification);
+           }
+           else if(type.equals(TaxonNode.class)){
+               TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(uuidAndTitleCache.getUuid());
+               openEditor(taxonNode);
+           }
+           else if(type.equals(TaxonBase.class)){
+               TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(uuidAndTitleCache.getUuid());
+               openEditor(taxonBase);
+           }
+           else if(type.equals(TaxonNameBase.class)){
+               TaxonNameBase nameBase = CdmStore.getService(INameService.class).load(uuidAndTitleCache.getUuid());
+               openEditor(nameBase);
+           }
+           else{
+               MessagingUtils.warningDialog("Unknown type", NavigationUtil.class, "There is no editor available to open this object.");
+           }
+       }
+
        public static void openEditor(ICdmBase selectedObject){
                UUID entityUuid = selectedObject.getUuid();
                try {
-                       if(selectedObject instanceof TaxonNode){
+                       if(selectedObject instanceof Classification){
+                       NewClassificationWizard classificationWizard = new NewClassificationWizard();
+                       classificationWizard.init(null, null);
+                       classificationWizard.setEntity((Classification) selectedObject);
+                       WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), classificationWizard);
+                       dialog.open();
+                       }
+                       else if(selectedObject instanceof TaxonNode){
                                EditorUtil.openTaxonNode(entityUuid);
                        }else if(selectedObject instanceof TaxonBase){
                                EditorUtil.openTaxonBase(entityUuid);
@@ -108,23 +121,6 @@ public class NavigationUtil extends AbstractUtility{
                }
        }
 
-       public static void openEditor(Object selectedObject){
-               if (selectedObject instanceof UuidAndTitleCache){
-                       Class type = ((UuidAndTitleCache) selectedObject).getType();
-                       if(type == Taxon.class || type == Synonym.class){
-                               try {
-                                       EditorUtil.openTaxonBase(((UuidAndTitleCache) selectedObject).getUuid());
-                               } catch (PartInitException e) {
-                                       MessagingUtils.error(NavigationUtil.class, "Error opening the editor", e);
-                               }
-                       }
-               }else if(selectedObject instanceof ICdmBase){
-                       openEditor((ICdmBase) selectedObject);
-               }else{
-                       MessagingUtils.error(NavigationUtil.class, new IllegalArgumentException("Selected object is not supported: " + selectedObject));
-               }
-       }
-
        /**
         * <p>openEmpty</p>
         *