Create automatically an edge between two nodes [message #668607] |
Fri, 06 May 2011 12:10 |
nicolas h Messages: 60 Registered: February 2011 Location: Grenoble, France |
Member |
|
|
Hi there,
I want to create automatically an edge between the two nodes thanks to an action in a popup menu. I manage to get references of my two nodes and give its as parameters to my LinkCreateCommand. LinkCreateCommand::canExecute() return true, but when I try to execute the command, I got this error concerning the line "cmd.execute()" :
Quote: | !MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException
at org.eclipse.emf.workspace.AbstractEMFOperation.inheritedOpti ons(AbstractEMFOperation.java:252)
at org.eclipse.emf.workspace.AbstractEMFOperation.execute(Abstr actEMFOperation.java:138)
at am.diagram.part.EncloseObjectAction.run(LinkAction.java:138)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginActi on.java:251)
...
|
Does anyone have an idea to fix it ?
My code :
public class LinkAction implements IObjectActionDelegate {
private ISelection selectedElement = null;
public void selectionChanged(IAction action, ISelection selection) {
action.setEnabled(false);
if (selection instanceof IStructuredSelection == false || selection.isEmpty()) {
return;
}
selectedElement = selection;
action.setEnabled(true);
}
public void run(IAction action) {
EObject source = null;
ArrayList<EObject> targets = new ArrayList<EObject>();
if (selectedElement != null) {
for (Iterator<Object> i = ((IStructuredSelection) selectedElement).iterator (); i.hasNext ();) {
Object k = i.next ();
if (k instanceof aaaEditPart)
source = ((aaaEditPart)k).resolveSemanticElement();
else if (k instanceof bbbEditPart)
targets.add (((bbbEditPart)k).resolveSemanticElement ());
}
if (source != null && targets.size() > 0) {
CreateRelationshipRequest request = new CreateRelationshipRequest(xxxElementTypes.Link_4001);
LinkCreateCommand cmd = new LinkCreateCommand(request , (EObject)source, (EObject)targets.get(0));
if (cmd.canExecute()) {
try {
cmd.execute(new NullProgressMonitor(), null);
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
Best regards,
--
Nicolas
|
|
|
|
Powered by
FUDForum. Page generated in 0.02804 seconds