Author: bobtarling Date: 2011-03-26 07:28:27-0700 New Revision: 19142 Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigActivation.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigClassifierRole.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigLifeLine.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigMessage.java trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java trunk/src/argouml-core-model/src/org/argouml/model/Facade.java
Log: Different message types are now allowed in UML2 Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigActivation.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigActivation.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigActivation.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigActivation.java 2011-03-26 07:28:27-0700 @@ -159,7 +159,7 @@ throw new IllegalArgumentException( "An instance of FigMessage is required"); } - if (!messageFig.isReturnAction()) { + if (!messageFig.isReplyMessage()) { return false; } if (activatingMessage == null) { Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigClassifierRole.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigClassifierRole.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigClassifierRole.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigClassifierRole.java 2011-03-26 07:28:27-0700 @@ -221,7 +221,7 @@ FigMessage createMessage = null; for (FigMessage message : messages) { if (message.getDestFigNode().equals(this) - && message.isCreateAction()) { + && message.isCreateMessage()) { createMessage = message; break; @@ -338,7 +338,7 @@ void positionHead(final FigMessage message) { // if the added edge is a Create Message it will affect the position // of the ClassifierRole so it should be repositioned - if (message.isCreateAction() + if (message.isCreateMessage() && equals(message.getDestFigNode()) && !equals(message.getSourceFigNode())) { updateHeadOffset(); Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigLifeLine.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigLifeLine.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigLifeLine.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigLifeLine.java 2011-03-26 07:28:27-0700 @@ -150,7 +150,7 @@ if (!figMessage.isSelfMessage()) { if (isIncoming(figMessage)) { if (currentActivation == null) { - if (figMessage.isCallAction()) { + if (figMessage.isSynchCallMessage()) { // if we are the dest and is a call action, create the // activation, but don't add it until the height is set. ySender = figMessage.getFinalY(); @@ -163,7 +163,7 @@ getSettings(), figMessage); activationsCount++; - } else if (figMessage.isCreateAction()) { + } else if (figMessage.isCreateMessage()) { // if we are the destination of a create action, // create the entire activation currentActivation = createActivationFig( @@ -177,12 +177,12 @@ activationsCount++; } } else { - if (figMessage.isCallAction() + if (figMessage.isSynchCallMessage() && isSameClassifierRoles( currentActivation.getActivatingMessage(), figMessage)) { activationsCount++; - } else if (figMessage.isDestroyAction()) { + } else if (figMessage.isDeleteMessage()) { // if we are the target of a destroy action // the figlifeline ends here and we add the activation ySender = figMessage.getFinalY(); @@ -277,14 +277,14 @@ // if we are the dest and is a call action, create the // activation, but don't add it until the height is set. if (figMessage.isSelfMessage()) { - if (figMessage.isCallAction()) { + if (figMessage.isSynchCallMessage()) { ySender = figMessage.getFinalY(); currentAct = new FigActivation(figMessage.getOwner(), new Rectangle(lineFig.getX() + FigActivation.DEFAULT_WIDTH / 2, ySender, 0, 0), getSettings(), figMessage, false); } else if (currentAct != null - && figMessage.isReturnAction()) { + && figMessage.isReplyMessage()) { ySender = figMessage.getStartY(); currentAct.setHeight(ySender - currentAct.getY()); newActivations.add(currentAct); @@ -306,7 +306,7 @@ FigMessage figMessage = figMessages.get(0); if (cr.equals(figMessage.getDestFigNode()) && !cr.equals(figMessage.getSourceFigNode()) - && figMessage.isCallAction()) { + && figMessage.isSynchCallMessage()) { return true; } return false; @@ -329,7 +329,11 @@ } @Override - protected void setBoundsImpl(int x, int y, int w, int h) { + // TODO: synchronized is required here as there can be some + // concurrent modification problems when drawing a call message and + // having that automatically draw the reply. Maybe fixing the TODO + // below will resolve this and the synch can go. + protected synchronized void setBoundsImpl(int x, int y, int w, int h) { final Rectangle oldBounds = getBounds(); rectFig.setBounds(x, y, w, h); Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigMessage.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigMessage.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigMessage.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/FigMessage.java 2011-03-26 07:28:27-0700 @@ -149,24 +149,28 @@ return notationSettings; } - boolean isCallAction() { - return Model.getFacade().isACallAction(getAction()); + boolean isSynchCallMessage() { + return Model.getFacade().isASynchCallMessage(getOwner()); } - boolean isCreateAction() { - return Model.getFacade().isACreateAction(getAction()); + boolean isASynchCallMessage() { + return Model.getFacade().isAASynchCallMessage(getOwner()); } - boolean isDestroyAction() { - return Model.getFacade().isADestroyAction(getAction()); + boolean isCreateMessage() { + return Model.getFacade().isACreateMessage(getOwner()); } - boolean isReturnAction() { - return Model.getFacade().isAReturnAction(getAction()); + boolean isDeleteMessage() { + return Model.getFacade().isADeleteMessage(getOwner()); } - boolean isSendAction() { - return Model.getFacade().isASendAction(getAction()); + boolean isReplyMessage() { + return Model.getFacade().isAReplyMessage(getOwner()); + } + + boolean isASynchSignalMessage() { + return Model.getFacade().isAASynchSignalMessage(getOwner()); } /** @@ -174,7 +178,10 @@ * to the action type.. */ private void updateArrow() { - getFig().setDashed(isReturnAction()); + if (getOwner() == null) { + return; + } + getFig().setDashed(isReplyMessage()); Object act = getAction(); if (act != null && Model.getFacade().isAsynchronous(getAction())) { setDestArrowHead(new ArrowHeadGreater()); @@ -297,7 +304,7 @@ public void convertToArc() { if (getPoints().length > 0) { FigMessageSpline spline = new FigMessageSpline(getPoint(0)); - spline.setDashed(isReturnAction()); + spline.setDashed(isReplyMessage()); super.setFig(spline); computeRoute(); } @@ -329,7 +336,7 @@ final Point startPoint = new Point(x, getYs()[0]); final FigMessageSpline spline = new FigMessageSpline(startPoint); spline.setComplete(true); - spline.setDashed(isReturnAction()); + spline.setDashed(isReplyMessage()); super.setFig(spline); } super.calcBounds(); @@ -456,14 +463,14 @@ Object activator = null; while (it.hasNext()) { FigMessage messageFig = it.next(); - if ((messageFig.isCreateAction() || messageFig.isCallAction()) + if ((messageFig.isCreateMessage() || messageFig.isSynchCallMessage()) && messageFig.getDestFigNode() == fcr) { activator = messageFig.getOwner(); } else if (messageFig == this) { Model.getCollaborationsHelper().setActivator( getOwner(), activator); return activator; - } else if (messageFig.isReturnAction()) { + } else if (messageFig.isReplyMessage()) { activator = null; } } Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java (original) +++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java 2011-03-26 07:28:27-0700 @@ -103,7 +103,7 @@ ensureSpace(figMessage); - if (figMessage.isCallAction()) { + if (figMessage.isSynchCallMessage()) { // Auto-create a return message for a call message // TODO: Maybe a return message already exists. Check first and @@ -122,7 +122,7 @@ final Object returnMessage = gm.connectMessage( returnMessageSource, returnMessageDest, - Model.getMetaTypes().getReturnAction()); + Model.getMessageSort().getReply()); // Correct the activator value Model.getCollaborationsHelper().setActivator( @@ -166,7 +166,7 @@ // contained poly FigPoly poly = (FigPoly) returnEdge.getFig(); poly.setComplete(true); - } else if (figMessage.isReturnAction()) { + } else if (figMessage.isReplyMessage()) { figMessage.determineActivator(); } FigPoly poly = (FigPoly) fe.getFig(); @@ -210,7 +210,7 @@ true); final int heightPlusGap; - if (figMessage.isCallAction()) { + if (figMessage.isSynchCallMessage()) { heightPlusGap = DEFAULT_ACTIVATION_HEIGHT + DEFAULT_MESSAGE_GAP; } else { @@ -229,7 +229,7 @@ for (FigMessage fig : getMessagesBelow(figMessage)) { fig.translateEdge(0, dy); - if (fig.isCreateAction()) { + if (fig.isCreateMessage()) { FigClassifierRole fcr = (FigClassifierRole) fig.getDestFigNode(); fcr.positionHead(fig); Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java 2011-03-26 07:28:27-0700 @@ -1,6 +1,6 @@ // $Id$ /******************************************************************************* - * Copyright (c) 2007,2010 Tom Morris and other contributors + * Copyright (c) 2007,2011 Tom Morris and other contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -2537,4 +2537,34 @@ public boolean isADirectedRelationship(Object handle) { return handle instanceof DirectedRelationship; } + + public boolean isAASynchCallMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.ASYNCH_CALL_LITERAL; + } + + public boolean isAASynchSignalMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.ASYNCH_SIGNAL_LITERAL; + } + + public boolean isACreateMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.CREATE_MESSAGE_LITERAL; + } + + public boolean isADeleteMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.DELETE_MESSAGE_LITERAL; + } + + public boolean isAReplyMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.REPLY_LITERAL; + } + + public boolean isASynchCallMessage(Object handle) { + Message m = (Message) handle; + return m.getMessageSort() == MessageSort.SYNCH_CALL_LITERAL; + } } Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java 2011-03-26 07:28:27-0700 @@ -4645,4 +4645,46 @@ public boolean isADirectedRelationship(Object handle) { return false; } + + public boolean isAASynchCallMessage(Object handle) { + Message message = (Message) handle; + if (message.getAction() instanceof CallAction) { + CallAction ca = (CallAction) message.getAction(); + return ca.isAsynchronous(); + } + return false; + } + + public boolean isAASynchSignalMessage(Object handle) { + Message message = (Message) handle; + if (message.getAction() instanceof SendAction) { + SendAction sa = (SendAction) message.getAction(); + return sa.isAsynchronous(); + } + return false; + } + + public boolean isACreateMessage(Object handle) { + Message message = (Message) handle; + return (message.getAction() instanceof CreateAction); + } + + public boolean isADeleteMessage(Object handle) { + Message message = (Message) handle; + return (message.getAction() instanceof DestroyAction); + } + + public boolean isAReplyMessage(Object handle) { + Message message = (Message) handle; + return (message.getAction() instanceof ReturnAction); + } + + public boolean isASynchCallMessage(Object handle) { + Message message = (Message) handle; + if (message.getAction() instanceof CallAction) { + CallAction ca = (CallAction) message.getAction(); + return !ca.isAsynchronous(); + } + return false; + } } Modified: trunk/src/argouml-core-model/src/org/argouml/model/Facade.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/Facade.java?view=diff&pathrev=19142&r1=19141&r2=19142 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/Facade.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/Facade.java 2011-03-26 07:28:27-0700 @@ -327,6 +327,55 @@ boolean isACallAction(Object handle); /** + * Recognizer for Message or sort ASynchCall. + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isAASynchCallMessage(Object handle); + + /** + * Recognizer for Message or sort ASynchSignal. + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isAASynchSignalMessage(Object handle); + + /** + * Recognizer for Message or sort Delete. + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isADeleteMessage(Object handle); + + /** + * Recognizer for Message or sort Create + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isACreateMessage(Object handle); + + /** + * Recognizer for Message or sort SynchCall. + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isASynchCallMessage(Object handle); + + /** + * Recognizer for Message or sort Reply. + * + * @param handle candidate + * @return true if handle is a CallAction + */ + boolean isAReplyMessage(Object handle); + + + /** * Recognizer for CallEvent. * * @param handle candidate ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2714357 To unsubscribe from this discussion, e-mail: [[email protected]].
