package org.eclipse.uml2.diagram.sequence.edit.create;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.UnexecutableCommand;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
import org.eclipse.uml2.diagram.sequence.edit.helpers.CoveredLifelineConfigurer;
import org.eclipse.uml2.diagram.sequence.edit.policies.InteractionNestedLayoutRequest;
import org.eclipse.uml2.diagram.sequence.providers.UMLElementTypes;
public class CreateStateInvariantEditPolicy extends AbstractCreateSDElementEditPolicy {
@Override
public boolean understandsRequest(Request req) {
if (req instanceof CreateStateInvariantRequest){
return true;
}
return super.understandsRequest(req);
}
@Override
public Command getCommand(Request request) {
if (request instanceof CreateStateInvariantRequest){
return createStateInvariant((CreateStateInvariantRequest)request);
}
return super.getCommand(request);
}
protected Command createStateInvariant(CreateStateInvariantRequest request){
GraphicalEditPart bracketEP = getHostImpl();
CoveredLifelineConfigurer.setCoveredLifeLines(request, findLifeLineEditPart(bracketEP));
Helper helper = getHelper(request);
CreateViewAndElementRequest semanticAndNodeInFrameRequest = helper.createNodeAndElement(UMLElementTypes.StateInvariant_3003);
Command semanticAndNodeInFrameCommand = bracketEP.getCommand(semanticAndNodeInFrameRequest);
if (!isValid(semanticAndNodeInFrameCommand)){
return UnexecutableCommand.INSTANCE;
}
return postScheduleLayout(semanticAndNodeInFrameCommand, getLayoutCommand(new InteractionNestedLayoutRequest()));
}
}