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.notation.Node; import org.eclipse.uml2.diagram.sequence.edit.policies.TieFrameRequest; import org.eclipse.uml2.diagram.sequence.edit.policies.TieFrameRequest.Completed; import org.eclipse.uml2.diagram.sequence.model.SDModelAccess; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDCombinedFragment; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDModel; import org.eclipse.uml2.uml.CombinedFragment; public class TieCombinedFragmentToLifeLineEditPolicy extends AbstractCreateSDElementEditPolicy { @Override public boolean understandsRequest(Request req) { return req instanceof TieFrameRequest.Completed; } @Override public Command getCommand(Request request) { if (request instanceof TieFrameRequest.Completed) { return getCompleteTieFrameCommand((TieFrameRequest.Completed) request); } return super.getCommand(request); } private Command getCompleteTieFrameCommand(Completed request) { GraphicalEditPart frameEP = request.getSubjectFrameEditPart(); if (false == frameEP.resolveSemanticElement() instanceof CombinedFragment) { //allow TieInteractionUse to run return null; } CombinedFragment umlCombined = (CombinedFragment) frameEP.resolveSemanticElement(); final SDModel sdModel = SDModelAccess.findSDModel(getHostImpl().getNotationView()); if (sdModel == null) { return UnexecutableCommand.INSTANCE; } SDCombinedFragment sdFragment = sdModel.getUMLTracing().findCombinedFragment(umlCombined); GraphicalEditPart bracketEP = getHostImpl(); GraphicalEditPart lifelineEP = findLifeLineEditPart(bracketEP); if (lifelineEP == null) { return UnexecutableCommand.INSTANCE; } CreateCombinedFragmentRequest createRequest = new CreateCombinedFragmentRequest(getHostImpl().getDiagramPreferencesHint()); createRequest.setCombinedFragmentToTie(sdFragment, (Node) frameEP.getNotationView()); createRequest.setExtendedData(request.getExtendedData()); createRequest.setLocation(request.getLocation()); Command creation = lifelineEP.getCommand(createRequest); return creation; } }