package org.eclipse.uml2.diagram.sequence.internal.layout.model; import java.util.Collection; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsNode; /** * */ public class LMFoundInvocationOccurence implements LMSendMessageEnd { LMFoundInvocationOccurence(AbsNode gdeNode, LMFrame enclosingFrame) { myGdeNode = gdeNode; myEnclosingFrame = enclosingFrame; } void delete() { setContainer(null); } public LMFrame getContainingFrame() { return myEnclosingFrame; } public LMFrameContainer getContainer() { if (myContainerFriendly == null) { return null; } return myContainerFriendly.getLMFrameContainer(); } void setContainer(LMFrameContainer.ContainerFriendly containerFriendly) { if (containerFriendly == null) { if (myContainerFriendly != null) { myContainerFriendly.childRemove(this); myContainerFriendly = null; } } else { if (myContainerFriendly != null) { throw new IllegalStateException("Parent already set"); //$NON-NLS-1$ } myContainerFriendly = containerFriendly; } } public LMReturnMessage findReturnMessage(LMCallMessage lmCallMessage) { return myMessagesContainer.findReturnMessage(lmCallMessage); } public Collection getOutgoingLMMessages() { return myMessagesContainer.getOutgoingLMMessages(this); } public void addMessage(LMMessage lmMessage) { myMessagesContainer.addMessage(lmMessage); } public void removeMessage(LMMessage lmMessage) { myMessagesContainer.removeMessage(lmMessage); } public Positioning getPositioning() { return myFloatingPositioning; } public void messageIsJustReshaped(LMMessage lmMessage, JustReshapedState justReshapedState) { } AbsNode getGdeNode() { return myGdeNode; } private final AbsNode myGdeNode; private final LMFrame myEnclosingFrame; private LMFrameContainer.ContainerFriendly myContainerFriendly; private final SendReceiveMessagesContainer myMessagesContainer = new SendReceiveMessagesContainer(); private final LMSendMessageEnd.FloatingPositioning myFloatingPositioning = new FloatingPositioning() { public int getXPos() { int width = myGdeNode.getPreferredSize().width; return myGdeNode.getX() + width/2; } public void setXPos(int xPos) { int width = myGdeNode.getPreferredSize().width; int gdeXPos = xPos - width/2; int leftBorder; int rightBorder; if (getContainer() instanceof LMFrame) { LMFrame containerFrame = (LMFrame) getContainer(); AbsNode containerFrameGdeNode = containerFrame.getGdeNode(); leftBorder = containerFrameGdeNode.getX() + 5; rightBorder = containerFrameGdeNode.getX() + containerFrameGdeNode.getWidth() - 5; } else { leftBorder = 5; rightBorder = Integer.MAX_VALUE; } if (gdeXPos < leftBorder) { gdeXPos = leftBorder; } if (gdeXPos+width > rightBorder) { gdeXPos = rightBorder - width; } myGdeNode.setX(gdeXPos); } public void setYPos(int yPos) { int height = myGdeNode.getPreferredSize().height; myGdeNode.setY(yPos - height/2); } }; }