From: Patrick Plitzner
CreateConceptRelationHandler class.
- * * @author n.hoffmann * @created 16.04.2009 * @version 1.0 */ public class CreateConceptRelationHandler extends AbstractHandler { - - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ + /** {@inheritDoc} */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage( - Page.NAME); - - Taxon taxonToBeFiltered = editor.getTaxon(); - - /* we need to get the activePart before calling TaxonBaseSelectionDialog.selectTaxon(), otherwise the + IUndoContext undoContext = null; + ConversationHolder conversationHolder = null; + Taxon taxon = null; + IEditorPart activeEditor = AbstractUtility.getActiveEditor(); + if(activeEditor instanceof MultiPageTaxonEditor){ + MultiPageTaxonEditor taxonEditor = (MultiPageTaxonEditor)activeEditor; + taxon = taxonEditor.getTaxon(); + conversationHolder = taxonEditor.getConversationHolder(); + undoContext = taxonEditor.getUndoContext(); + } + else if(activeEditor instanceof BulkEditor){ + BulkEditor bulkEditor = (BulkEditor)activeEditor; + ISelection selection = bulkEditor.getSelectionProvider().getSelection(); + taxon = (Taxon) ((IStructuredSelection)selection).getFirstElement(); + conversationHolder = bulkEditor.getConversationHolder(); + undoContext = bulkEditor.getUndoContext(); + } + + + /* we need to get the activePart before calling TaxonBaseSelectionDialog.selectTaxon(), otherwise the * the variable of the parent applicationContext in event are overwritten during this method call * this is Linux specific bugfix see: #2685 ([LINUX] Editing concept relationships does not work under linux) */ IWorkbenchPart activePart = HandlerUtil.getActivePart(event); - Taxon relatedConcept = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), taxonToBeFiltered); - - + Taxon relatedConcept = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), conversationHolder, taxon); + + if(relatedConcept == null){ return Status.CANCEL_STATUS; } TaxonRelationshipType type = (TaxonRelationshipType) ((Event)event.getTrigger()).data; boolean isInverse = type.getInverseLabel().isEmpty()?false:true; TaxonRelationshipTypeInverseContainer typeInverseContainer =new TaxonRelationshipTypeInverseContainer(type, isInverse) ; - + IPostOperationEnabled postOperationEnabled = (activePart instanceof IPostOperationEnabled) ? (IPostOperationEnabled) activePart : null; - + try { - AbstractPostOperation operation = new CreateConceptRelationOperation(event.getCommand().getName(), - editor.getUndoContext(), editor.getTaxon(), relatedConcept, typeInverseContainer, postOperationEnabled); + AbstractPostOperation operation = new CreateConceptRelationOperation(event.getCommand().getName(), + undoContext, taxon, relatedConcept, typeInverseContainer, postOperationEnabled); AbstractUtility.executeOperation(operation); } catch (NotDefinedException e) { MessagingUtils.warn(getClass(), "Command name not set"); } - + return null; } }