package org.eclipse.papyrus.uml.diagram.statemachine.custom.commands; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gmf.runtime.common.core.command.CommandResult; import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; import org.eclipse.papyrus.uml.diagram.statemachine.edit.commands.PseudostateExitPointCreateCommand; import org.eclipse.papyrus.uml.diagram.statemachine.providers.ElementInitializers; import org.eclipse.uml2.uml.Pseudostate; import org.eclipse.uml2.uml.State; import org.eclipse.uml2.uml.UMLFactory; public class CustomPseudostateExitPointCreateCommand extends PseudostateExitPointCreateCommand { public CustomPseudostateExitPointCreateCommand(CreateElementRequest req) { super(req); // TODO Auto-generated constructor stub } @Override public boolean canExecute() { State owner = (State)getElementToEdit(); if(owner.getRegions().isEmpty()) return false; return true; } @Override protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { Pseudostate newElement = UMLFactory.eINSTANCE.createPseudostate(); State owner = (State)getElementToEdit(); owner.getConnectionPoints().add(newElement); ElementInitializers.getInstance().init_Pseudostate_17000(newElement); doConfigure(newElement, monitor, info); ((CreateElementRequest)getRequest()).setNewElement(newElement); return CommandResult.newOKCommandResult(newElement); } }