package org.eclipse.uml2.diagram.sequence.internal.layout.model; import org.eclipse.uml2.diagram.sequence.internal.layout.GeometryConstants; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsElementPropertyAccess; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsLink; import org.eclipse.uml2.diagram.sequence.internal.layout.vertical.input.LifeLineElement; import org.eclipse.uml2.diagram.sequence.internal.layout.vertical.input.OrderingConstraint; /** * */ public class LMCallMessageAsynch extends LMCallMessage { public LMCallMessageAsynch(AbsLink gdeLink) { super(gdeLink); } void becomeLayoutConstraint(boolean on) { final LMMessageEnd.ConnectableLifeLineElement sendElement = getSendVerticalPositioning().getTopLifeLineElement(); final LMMessageEnd.ConnectableLifeLineElement receiveElement = getReceiveVerticalPositioning().getTopLifeLineElement(); if (on) { myOrderingConstraint = new OrderingConstraint() { public LifeLineElement getBeforeElement() { return sendElement; } public LifeLineElement getAfterElement() { return receiveElement; } public void setInvalid(boolean invalid) { LMCallMessageAsynch.this.setVerticalConstraintViolationState(invalid); } public int getMinSlopeValue() { if (AbsElementPropertyAccess.getInstance().canAsynchCallBeStraight(getGdeLink())) { return 0; } return GeometryConstants.Message.MIN_ASYNCHRONOUS_SLOPE_VALUE; } }; sendElement.addAfterConstraint(myOrderingConstraint); receiveElement.addBeforeConstraint(myOrderingConstraint); } else { sendElement.removeAfterConstraint(myOrderingConstraint); receiveElement.removeBeforeConstraint(myOrderingConstraint); myOrderingConstraint = null; } } boolean isLayoutConstraint() { return myOrderingConstraint != null; } private OrderingConstraint myOrderingConstraint; }