package org.eclipse.papyrus.uml.diagram.sequence.edit.parts; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.ConnectionLocator; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.DragTracker; import org.eclipse.gef.EditPart; import org.eclipse.gef.Request; import org.eclipse.gef.requests.ReconnectRequest; import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEditPolicy; import org.eclipse.papyrus.uml.diagram.common.figure.edge.UMLEdgeFigure; import org.eclipse.papyrus.uml.diagram.sequence.apex.tools.ApexSelectConnectionEditPartTracker; import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.MessageLabelEditPolicy; import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes; import org.eclipse.uml2.uml.Message; public abstract class AbstractMessageEditPart extends ConnectionNodeEditPart { /* apex added start */ // Jiho: MessageSync~MessageFound�� ��� �������̽� public interface MessageFigure { } /* apex added end */ private List messageEventParts; public AbstractMessageEditPart(View view) { super(view); } public View findChildByModel(EObject model) { List list = getModelChildren(); if(list != null && list.size() > 0) { for(Object o : list) { if(!(o instanceof View) ) continue; View view = (View) o; if(view.getElement() == model){ return view; } } } return null; } @Override public List getChildren() { if (messageEventParts == null) { initMessageEventPart(); } return super.getChildren(); } protected void initMessageEventPart() { messageEventParts = new ArrayList(); EObject element = this.resolveSemanticElement(); if (!(element instanceof Message)) return; Message message = (Message) element; UMLEdgeFigure edgeFigure = (UMLEdgeFigure) this.getFigure(); final MessageEndEditPart sendEventPart = new MessageEndEditPart( message.getSendEvent(), this, new ConnectionLocator(edgeFigure, ConnectionLocator.SOURCE)); messageEventParts.add(sendEventPart); final MessageEndEditPart receiveEventPart = new MessageEndEditPart( message.getReceiveEvent(), this, new ConnectionLocator( edgeFigure, ConnectionLocator.TARGET)); messageEventParts.add(receiveEventPart); Diagram diagram = ((View) this.getModel()).getDiagram(); sendEventPart.rebuildLinks(diagram); receiveEventPart.rebuildLinks(diagram); addChild(sendEventPart, -1); addChild(receiveEventPart, -1); } @Override protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy(IMaskManagedLabelEditPolicy.MASK_MANAGED_LABEL_EDIT_POLICY, new MessageLabelEditPolicy()); } @Override public EditPart getTargetEditPart(Request request) { if(request instanceof CreateUnspecifiedTypeConnectionRequest){ List types = ((CreateUnspecifiedTypeConnectionRequest) request).getElementTypes(); if(types.contains(UMLElementTypes.Message_4009) || types.contains(UMLElementTypes.Message_4008)){ return null; } }else if(request instanceof ReconnectRequest){ ConnectionEditPart con = ((ReconnectRequest)request).getConnectionEditPart(); if(con instanceof Message7EditPart || con instanceof Message6EditPart){ return null; } } return super.getTargetEditPart(request); } /** * apex updated */ @Override public DragTracker getDragTracker(Request req) { /* apex improved start */ return new ApexSelectConnectionEditPartTracker(this); /* apex improved end */ /* apex replaced return super.getDragTracker(req); //*/ } }