Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 265958

Summary: [Core] Problem in the build of context menu
Product: [Modeling] Papyrus Reporter: Patrick Tessier <Patrick.Tessier>
Component: CoreAssignee: Patrick Tessier <Patrick.Tessier>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 Keywords: plan
Version: 0.7.0   
Target Milestone: M1   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
mylyn/context/zip none

Description Patrick Tessier CLA 2009-02-24 09:19:48 EST
When you try to click right in a diagram, an error is raised.

Indeed,  we have the following message error:

java.lang.NullPointerException
at org.eclipse.gmf.runtime.diagram.ui.actions.AbstractDeleteFromAction.getDestroyElementRequest(AbstractDeleteFromAction.java:97)
at org.eclipse.gmf.runtime.diagram.ui.actions.AbstractDeleteFromAction.updateTargetRequest(AbstractDeleteFromAction.java:77)
at org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction.refresh(DiagramAction.java:113)
at org.eclipse.gmf.runtime.common.ui.action.AbstractActionHandler.init(AbstractActionHandler.java:190)
at org.eclipse.gmf.runtime.diagram.ui.actions.DeleteFromModelAction.init(DeleteFromModelAction.java:108)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider.getAction(AbstractContributionItemProvider.java:468)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider.getAction(AbstractContributionItemProvider.java:511)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider$ActionContributionItemAdapter.getAdapter(AbstractContributionItemProvider.java:873)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider.contributeItem(AbstractContributionItemProvider.java:744)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider.contributeToPopupMenu(AbstractContributionItemProvider.java:374)
at org.eclipse.gmf.runtime.common.ui.services.action.internal.contributionitem.ContributeToPopupMenuOperation.execute(ContributeToPopupMenuOperation.java:75)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrategy$4.execute(ExecutionStrategy.java:182)
at org.eclipse.gmf.runtime.common.core.service.Service.execute(Service.java:652)

at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.ContributionItemService.execute(ContributionItemService.java:293)
at org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.ContributionItemService.contributeToPopupMenu(ContributionItemService.java:254)
at org.eclipse.papyrus.diagram.clazz.part.DiagramEditorContextMenuProvider$1.run(DiagramEditorContextMenuProvider.java:70)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:289)
at org.eclipse.papyrus.diagram.clazz.part.DiagramEditorContextMenuProvider.buildContextMenu(DiagramEditorContextMenuProvider.java:67)
at org.eclipse.gef.ContextMenuProvider.menuAboutToShow(ContextMenuProvider.java:60)
at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:335)
at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:463)
Comment 1 Patrick Tessier CLA 2009-02-25 08:44:43 EST
Created attachment 126713 [details]
mylyn/context/zip

change in the editor to allow click right
Comment 2 Patrick Tessier CLA 2009-02-25 09:10:58 EST
The problem was not due to the ActionBar contributor. This problem xas raised by a bad editing domain.

In order to create a request of destruction, a transactionnal editing domain has to be used.

Somewhere in the code of GMF, the current editor is adapted to IEditingDomainProvider. The code in the backbone was:
return (IEditingDomainProvider) defaultContext.getTransactionalEditingDomain().getResourceSet();
But the provider of a transactionalEditingDomain  obtained by getResourceSet return a AdapterFactoryEditingDomainResourceSet.
But this resourceSet  has teh following code:

public EditingDomain getEditingDomain()
    {
      return AdapterFactoryEditingDomain.this;
    }

   In some words, if you ask to a transactionalEditingDomain his provider, the obtained provider can not give you the transactional editong domain.
   
   To solve it, I have done the same things as GMF editor:
   	- I have created an inner class :
   	/**
	 * My editing domain provider.
	 */
	private IEditingDomainProvider domainProvider = new IEditingDomainProvider() {

		public EditingDomain getEditingDomain() {
			return CoreMultiDiagramEditor.this.defaultContext.getTransactionalEditingDomain();
		}
	};
   	
   -In the method  getAdapter(), I return the local variable domainProvider.
   In this maner, this domain provider can return a TransactionalEditDomain and not an EditingDomain