- added command, handler, double click listener to open taxa from associated taxa...
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 3 Dec 2014 15:24:36 +0000 (15:24 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 3 Dec 2014 15:24:36 +0000 (15:24 +0000)
 - caught runtime exception for orphaned taxa

.gitattributes
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenTaxonEditorHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/TaxonParameterConverter.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/TaxonParameterConverter.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/association/TaxonAssociationDetailElement.java

index 6d6bec283ad097789a85df1487eacf0c68a5ab6c..a4527e0a6e67032cfac29f197d3946f130dca1f2 100644 (file)
@@ -386,8 +386,10 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handle
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenChecklistEditorHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenParentHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenTaxonEditorHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveAllHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveTaxonHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/TaxonParameterConverter.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewNameHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewPersonHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewReferenceHandler.java -text
@@ -959,6 +961,7 @@ eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigatio
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NewClassificationHandler.java -text
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NewTaxonNodeHandler.java -text
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RefreshTreeHandler.java -text
+eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/TaxonParameterConverter.java -text
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java -text
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/CopyOperation.java -text
 eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/DeleteOperation.java -text
index e0dc27452a6e82856dd48cd39980258a16e69300..86f824d1fed26ffe08f5dab5c83ca0b934d85ca3 100644 (file)
             id="eu.etaxonomy.taxeditor.editor.handler.showOnlyIndividualAssociations"
             name="Show Only Individual Associations">
       </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.OpenTaxonEditorHandler"
+            id="eu.etaxonomy.taxeditor.editor.openTaxonEditor"
+            name="Open Taxon Editor">
+         <commandParameter
+               id="eu.etaxonomy.taxeditor.editor.taxonParameter"
+               name="taxonUUID"
+               optional="false"
+               typeId="eu.etaxonomy.taxeditor.editor.taxonParameterType">
+         </commandParameter>
+      </command>
+      <commandParameterType
+            converter="eu.etaxonomy.taxeditor.editor.handler.TaxonParameterConverter"
+            id="eu.etaxonomy.taxeditor.editor.taxonParameterType"
+            type="eu.etaxonomy.cdm.model.taxon.TaxonBase">
+      </commandParameterType>
    </extension>
    <extension
          point="org.eclipse.core.expressions.definitions">
index d3f414a0334e9c9f93ee75f1216c7e1ea9d12b9a..c9350145261000221c842ae1127f8c5d96779a32 100644 (file)
@@ -27,16 +27,18 @@ import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditor;
 import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
 import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
-import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditorInput;
 import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
+import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditorInput;
 import eu.etaxonomy.taxeditor.editor.view.dataimport.BioCaseEditorInput;
 import eu.etaxonomy.taxeditor.editor.view.dataimport.DataImportEditor;
 import eu.etaxonomy.taxeditor.editor.view.dataimport.DataImportEditorInput;
@@ -46,6 +48,8 @@ import eu.etaxonomy.taxeditor.editor.view.dataimport.SpecimenImportEditor;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Utility for the editor package
@@ -157,6 +161,11 @@ public class EditorUtil extends AbstractUtility {
         */
        public static void openTaxonBase(UUID taxonBaseUuid)
                        throws PartInitException {
+           TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid);
+        if (taxonBase != null && taxonBase.isOrphaned()) {
+                MessagingUtils.warningDialog("Orphaned Taxon", TaxonEditorInput.class, "This is an orphaned taxon i.e. a taxon that is not connected to a classification and not having any taxonomic relationships. Editing of orphaned taxon is currently not supported.");
+                return;
+        }
                TaxonEditorInput input = TaxonEditorInput
                                .NewInstanceFromTaxonBase(taxonBaseUuid);
                open(input);
@@ -433,4 +442,15 @@ public class EditorUtil extends AbstractUtility {
         }
         return null;
     }
+
+    /**
+     * Opens a taxon editor for the given object if the given object is a valid input.
+     * @param object the object for which the editor will be opened
+     * @throws PartInitException
+     */
+    public static void openTaxonEditor(Object object) throws PartInitException {
+        if(object instanceof TaxonBase<?>){
+            openTaxonBase(((TaxonBase<?>) object).getUuid());
+        }
+    }
 }
index b331b88f5d9ffd68c6809371900c98d2d7e1d91b..3f79f3a00a4566070076ad876293795714767a58 100644 (file)
@@ -48,9 +48,9 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
 public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement {
 
-       private ConversationHolder conversation;
+       private final ConversationHolder conversation;
 
-       private TaxonNode taxonNode;
+       private final TaxonNode taxonNode;
 
        private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
 
@@ -111,16 +111,13 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
 
        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid);
        if (taxonBase != null){
-               if(taxonBase.isOrphaned()) {
-                       MessagingUtils.warningDialog("Orphaned Taxon", TaxonEditorInput.class, "This is an orphaned taxon i.e. a taxon that is not connected to a classification and not having any taxonomic relationships. Editing of orphaned taxon is currently not supported.");
-               }
-               else if(taxonBase.isInstanceOf(Taxon.class)){
+               if(taxonBase.isInstanceOf(Taxon.class)){
                        Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class);
-       
+
                        if (taxon.getTaxonNodes().size() == 0 && taxon.isMisapplication()){
                                // TODO get accepted taxon
                                MessagingUtils.info("trying to open Mispplied Name ");
-       
+
                                Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
                                Set<TaxonRelationship> relations = taxon.getRelationsFromThisTaxon();
                                for(TaxonRelationship relation : relations){
@@ -129,13 +126,13 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                                        }
                                }
                                input =  getInputForMultipleTaxa(conversation, acceptedTaxa);
-       
+
                        }else{
                                input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
                        }
                }else if(taxonBase instanceof Synonym){
                        Synonym synonym = (Synonym) taxonBase;
-       
+
                        Set<Taxon> taxa = synonym.getAcceptedTaxa();
                        input = getInputForMultipleTaxa(conversation, taxa);
                }
@@ -143,7 +140,7 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                        input.setInitiallySelectedTaxonBase(taxonBase);
                }
        }
-       
+
 
        return input;
     }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenTaxonEditorHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenTaxonEditorHandler.java
new file mode 100644 (file)
index 0000000..b416726
--- /dev/null
@@ -0,0 +1,32 @@
+package eu.etaxonomy.taxeditor.editor.handler;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.ParameterType;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.ui.PartInitException;
+
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+
+
+public class OpenTaxonEditorHandler extends AbstractHandler {
+
+    @Override
+    public Object execute(ExecutionEvent event) throws ExecutionException {
+        Object object = event.getObjectParameterForExecution("eu.etaxonomy.taxeditor.editor.taxonParameter");
+
+        try {
+            ParameterType parameterType = event.getCommand().getParameterType("eu.etaxonomy.taxeditor.editor.taxonParameter");
+            if(parameterType.isCompatible(object)){
+                EditorUtil.openTaxonEditor(object);
+            }
+        } catch (NotDefinedException e) {
+            MessagingUtils.error(this.getClass(), "Parameter type not defined", e);
+        } catch (PartInitException e) {
+            MessagingUtils.error(OpenTaxonEditorHandler.class, "Error opening the editor", e);
+        }
+        return null;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/TaxonParameterConverter.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/TaxonParameterConverter.java
new file mode 100644 (file)
index 0000000..0283f4d
--- /dev/null
@@ -0,0 +1,30 @@
+package eu.etaxonomy.taxeditor.editor.handler;
+
+import java.util.UUID;
+
+import org.eclipse.core.commands.AbstractParameterValueConverter;
+import org.eclipse.core.commands.ParameterValueConversionException;
+
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+public class TaxonParameterConverter extends AbstractParameterValueConverter {
+
+    public TaxonParameterConverter() {
+    }
+
+    @Override
+    public Object convertToObject(String parameterValue) throws ParameterValueConversionException {
+        return CdmStore.getService(ITaxonService.class).load(UUID.fromString(parameterValue));
+    }
+
+    @Override
+    public String convertToString(Object parameterValue) throws ParameterValueConversionException {
+        if(parameterValue instanceof TaxonBase<?>){
+            return ((TaxonBase<?>) parameterValue).getUuid().toString();
+        }
+        return null;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/TaxonParameterConverter.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/TaxonParameterConverter.java
new file mode 100644 (file)
index 0000000..c166012
--- /dev/null
@@ -0,0 +1,30 @@
+package eu.etaxonomy.taxeditor.navigation.navigator.handler;
+
+import java.util.UUID;
+
+import org.eclipse.core.commands.AbstractParameterValueConverter;
+import org.eclipse.core.commands.ParameterValueConversionException;
+
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+public class TaxonParameterConverter extends AbstractParameterValueConverter {
+
+    public TaxonParameterConverter() {
+    }
+
+    @Override
+    public Object convertToObject(String parameterValue) throws ParameterValueConversionException {
+        return CdmStore.getService(ITaxonService.class).load(UUID.fromString(parameterValue));
+    }
+
+    @Override
+    public String convertToString(Object parameterValue) throws ParameterValueConversionException {
+        if(parameterValue instanceof TaxonBase<?>){
+            return ((TaxonBase) parameterValue).getUuid().toString();
+        }
+        return null;
+    }
+
+}
index d313360a4570eb868d019f569272939a8f818feb..eacf2c694ebdf079ac68a23eaa4e708a2ff7c310 100644 (file)
@@ -9,18 +9,33 @@
  */
 package eu.etaxonomy.taxeditor.ui.section.occurrence.association;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.Parameterization;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
 
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -35,6 +50,9 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> implements IDoubleClickListener{
 
 
+    private TableViewer associationsViewer;
+    private TableViewer typeDesignationViewer;
+
     public TaxonAssociationDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
         super(formFactory, formElement);
     }
@@ -43,10 +61,12 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<Deri
     @Override
     protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
 
+        //TODO add context menu for deleting associations
+
         Label associationsLabel = formFactory.createLabel(getLayoutComposite(), "Individuals Associations");
         associationsLabel.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
 
-        TableViewer associationsViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
+        associationsViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
         associationsViewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
         associationsViewer.setContentProvider(new ArrayContentProvider());
         Collection<TaxonBase<?>> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listAssociatedTaxa(entity.innerDerivedUnit(), null, null, null, null);
@@ -56,7 +76,7 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<Deri
         Label typeLabel = formFactory.createLabel(getLayoutComposite(), "Type Designations");
         typeLabel.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
 
-        TableViewer typeDesignationViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
+        typeDesignationViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
         typeDesignationViewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
         typeDesignationViewer.setContentProvider(new ArrayContentProvider());
         Collection<TaxonBase<?>> typedTaxa = CdmStore.getService(IOccurrenceService.class).listTypedTaxa(entity.innerDerivedUnit(), null, null, null, null);
@@ -67,7 +87,7 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<Deri
     /** {@inheritDoc} */
     @Override
     public void handleEvent(Object eventSource) {
-
+        //empty
     }
 
     /* (non-Javadoc)
@@ -75,32 +95,48 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<Deri
      */
     @Override
     public void doubleClick(DoubleClickEvent event) {
-//        String commandId = "eu.etaxonomy.taxeditor.navigation.command.update.editSelection";
-//
-//        IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
-//        try {
-//            handlerService.executeCommand(commandId, null);
-//        } catch (ExecutionException e) {
-//            // TODO Auto-generated catch block
-//            e.printStackTrace();
-//        } catch (NotDefinedException e) {
-//            // TODO Auto-generated catch block
-//            e.printStackTrace();
-//        } catch (NotEnabledException e) {
-//            // TODO Auto-generated catch block
-//            e.printStackTrace();
-//        } catch (NotHandledException e) {
-//            // TODO Auto-generated catch block
-//            e.printStackTrace();
-//        }
-
-
-//        if(event.getSelection() instanceof StructuredSelection){
-//            StructuredSelection selection = (StructuredSelection)event.getSelection();
-//            if(selection.getFirstElement() instanceof TaxonBase<?>){
-//                UUID taxonBaseUUID = ((TaxonBase<?>) selection.getFirstElement()).getUuid();
-//            }
-//        }
+        if(associationsViewer.getSelection() instanceof IStructuredSelection){
+            Object firstElement = ((IStructuredSelection) associationsViewer.getSelection()).getFirstElement();
+            if(firstElement instanceof TaxonBase<?>){
+                TaxonBase<?> taxonBase = (TaxonBase<?>)firstElement;
+                String commandId = "eu.etaxonomy.taxeditor.editor.openTaxonEditor";
+
+
+                ArrayList parameters = new ArrayList();
+                IParameter iparam = null;
+
+                //get the command from plugin.xml
+                IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+                ICommandService cmdService = (ICommandService)window.getService(ICommandService.class);
+                Command cmd = cmdService.getCommand(commandId);
+
+                //get the parameter
+                try {
+                    iparam = cmd.getParameter("eu.etaxonomy.taxeditor.editor.taxonParameter");
+                } catch (NotDefinedException e1) {
+                    MessagingUtils.error(this.getClass(), "Command not defined", e1);
+                }
+                Parameterization params = new Parameterization(iparam, (taxonBase).getUuid().toString());
+                parameters.add(params);
+
+                //build the parameterized command
+                ParameterizedCommand pc = new ParameterizedCommand(cmd, (Parameterization[]) parameters.toArray(new Parameterization[parameters.size()]));
+
+                //execute the command
+                IHandlerService handlerService = (IHandlerService)window.getService(IHandlerService.class);
+                try {
+                    handlerService.executeCommand(pc, null);
+                } catch (ExecutionException e) {
+                    MessagingUtils.error(TaxonAssociationDetailElement.class, e);
+                } catch (NotDefinedException e) {
+                    MessagingUtils.error(TaxonAssociationDetailElement.class, e);
+                } catch (NotEnabledException e) {
+                    MessagingUtils.error(TaxonAssociationDetailElement.class, e);
+                } catch (NotHandledException e) {
+                    MessagingUtils.error(TaxonAssociationDetailElement.class, e);
+                }
+            }
+        }
     }
 
 }