Add "Open in..." to taxon search #5616
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / CdmViewerUtil.java
index 8113b9703dca8d066640d50ec9957dc895d3b5a8..698f94233e6309f5ca1ac70eebfaaa8b31699df1 100644 (file)
@@ -19,7 +19,14 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.commands.ICommandService;
 
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Scans eu.etaxonomy.taxeditor.store.cdmViewer extension point.
@@ -42,6 +49,19 @@ public class CdmViewerUtil {
         Map<Command, String> commandViewerNameMap = new HashMap<Command, String>();
 
         if(input!=null){
+            //for generic UuidAndTitleCache objects try to load the object
+            if (input instanceof UuidAndTitleCache){
+                UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache)input;
+                Class type = uuidAndTitleCache.getType();
+                if(type == Taxon.class || type == Synonym.class){
+                    input = CdmStore.getService(ITaxonService.class).load(uuidAndTitleCache.getUuid());
+                }
+                else if(SpecimenOrObservationBase.class.isAssignableFrom(type)){
+                    input = CdmStore.getService(IOccurrenceService.class).load(uuidAndTitleCache.getUuid());
+                }
+            }
+
+
             IExtensionRegistry reg = Platform.getExtensionRegistry();
             IConfigurationElement[] extensions = reg
                     .getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.cdmViewer"); //$NON-NLS-1$