Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 27f03c15696172f23d6b70f5603f6f9b1110e14f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15














                                                                                       
















                                                            

                                                                 















                                                                                   



                                                                                          















                                             

                                                                                  











                                                                                     


                                                                                                       


                                                                                        

                                                                                            









                                                                                        


                                                                                                    


                                                                                        


                                                                                                   




                                                                                        


                                                                                                     




                                                                                        


                                                                                                  





                                                                                                      


                                                                                                       

                                                                     



                                                                                                         

































































                                                                                                        
                          


                                                      



                                                                                   







                                                            
/*******************************************************************************
 * Copyright (c) 2007 Conselleria de Infraestructuras y Transporte, Generalitat 
 * de la Comunitat Valenciana . 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 http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors: Gabriel Merin Cubero (Prodevelop) – Sequence Diagram Implementation
 *
 ******************************************************************************/
package org.eclipse.papyrus.diagram.sequence.edit.commands;

import org.eclipse.gmf.runtime.emf.type.core.commands.CreateElementCommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.uml2.uml.BehaviorExecutionSpecification;
import org.eclipse.uml2.uml.CallEvent;
import org.eclipse.uml2.uml.CreationEvent;
import org.eclipse.uml2.uml.DestructionEvent;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Event;
import org.eclipse.uml2.uml.Interaction;
import org.eclipse.uml2.uml.Lifeline;
import org.eclipse.uml2.uml.Message;
import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
import org.eclipse.uml2.uml.MessageSort;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.SendOperationEvent;
import org.eclipse.uml2.uml.SendSignalEvent;
import org.eclipse.uml2.uml.SignalEvent;
import org.eclipse.uml2.uml.UMLPackage;

import org.eclipse.papyrus.diagram.common.util.MultiDiagramUtil;
import org.eclipse.papyrus.diagram.common.actions.LabelHelper;

/**
 * @generated
 */
public class MessageTypeLinkCreateCommandCommon extends CreateElementCommand {

	/**
	 * @generated
	 */
	public MessageTypeLinkCreateCommandCommon(CreateRelationshipRequest req) {
		super(req);
	}

	private Package getPackageFromInteraction(Interaction myContainer) {
		Package interactionPackage = myContainer.getPackage();
		while (interactionPackage == null) {
			if (myContainer.getPackage() == null
					&& myContainer.getEnclosingInteraction() != null)
				return getPackageFromInteraction(myContainer
						.getEnclosingInteraction());
			else
				return null;
		}

		return interactionPackage;
	}

	/**
	 * Main method
	 * 
	 * @param myContainer
	 * @param mySource
	 * @param myTarget
	 * @param newMessage
	 * @generated NOT
	 */
	protected void doDefaultMessageInitialize(Interaction myContainer,
			Element mySource, Element myTarget, Message newMessage) {
		// Events
		Event sourceEvent = null;
		Event targetEvent = null;

		// Package where the interaction is contained. Remeber that an
		// interaction may be contained withind another interaction.
		Package interactionPackage = getPackageFromInteraction(myContainer);

		switch (newMessage.getMessageSort().getValue()) {
		case MessageSort.SYNCH_CALL:
		case MessageSort.ASYNCH_CALL:
			// Create the SendOperationEvent
			sourceEvent = (SendOperationEvent) interactionPackage
					.createPackagedElement("SendOperationEvent",
							UMLPackage.eINSTANCE.getSendOperationEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, sourceEvent);

			// Create the CallEvent
			targetEvent = (CallEvent) interactionPackage.createPackagedElement(
					"CallEvent", UMLPackage.eINSTANCE.getCallEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, targetEvent);
			break;

		case MessageSort.REPLY:
			sourceEvent = null;
			targetEvent = null;
			break;

		case MessageSort.ASYNCH_SIGNAL:
			// Create the SendSignalEvent
			sourceEvent = (SendSignalEvent) interactionPackage
					.createPackagedElement("SendSignalEvent",
							UMLPackage.eINSTANCE.getSendSignalEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, sourceEvent);

			// create the SignalEvent (equal to RecieveSignalEvent)
			targetEvent = (SignalEvent) interactionPackage
					.createPackagedElement("SignalEvent", UMLPackage.eINSTANCE
							.getSignalEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, targetEvent);
			break;

		case MessageSort.DELETE_MESSAGE:
			// create the SignalEvent (equal to RecieveSignalEvent)
			targetEvent = (DestructionEvent) interactionPackage
					.createPackagedElement("DestructionEvent",
							UMLPackage.eINSTANCE.getDestructionEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, targetEvent);
			break;

		case MessageSort.CREATE_MESSAGE:
			// Create the CreationEvent
			targetEvent = (CreationEvent) interactionPackage
					.createPackagedElement("CreationEvent",
							UMLPackage.eINSTANCE.getCreationEvent());
			LabelHelper.INSTANCE.initName(interactionPackage, targetEvent);
			break;
		}

		// Create the 2 MessageOcurrenceSpecification
		MessageOccurrenceSpecification msgSend = (MessageOccurrenceSpecification) myContainer
				.createFragment("MessageOccurrenceSpecification",
						UMLPackage.eINSTANCE
								.getMessageOccurrenceSpecification());
		LabelHelper.INSTANCE.initName(myContainer, msgSend);

		MessageOccurrenceSpecification msgReceive = (MessageOccurrenceSpecification) myContainer
				.createFragment("MessageOccurrenceSpecification",
						UMLPackage.eINSTANCE
								.getMessageOccurrenceSpecification());
		LabelHelper.INSTANCE.initName(myContainer, msgReceive);

		// Initialization of the Message
		newMessage.setSendEvent(msgSend);
		newMessage.setReceiveEvent(msgReceive);

		// Initialization of the MessageOccurrenceSpecifications

		// msgSend
		if (sourceEvent != null)
			msgSend.setEvent(sourceEvent);
		msgSend.setMessage(newMessage);
		// Initialize the covered reference
		Lifeline lifeLine = null;
		if (mySource instanceof BehaviorExecutionSpecification) {
			BehaviorExecutionSpecification bes = (BehaviorExecutionSpecification) mySource;
			if (bes.getCovereds().size() > 0) {
				lifeLine = bes.getCovereds().get(0);
				msgSend.getCovereds().add(lifeLine);
			}
		} else {
			lifeLine = (Lifeline) mySource;
			msgSend.getCovereds().add(lifeLine);
		}

		// msgReceive
		if (targetEvent != null)
			msgReceive.setEvent(targetEvent);
		msgReceive.setMessage(newMessage);
		// Initialize the covered reference
		lifeLine = null;
		if (myTarget instanceof BehaviorExecutionSpecification) {
			BehaviorExecutionSpecification bes = (BehaviorExecutionSpecification) myTarget;
			if (bes.getCovereds().size() > 0) {
				lifeLine = bes.getCovereds().get(0);
				msgReceive.getCovereds().add(lifeLine);
			}
		} else {
			lifeLine = (Lifeline) myTarget;
			msgReceive.getCovereds().add(lifeLine);
		}

		// NOT DONE HERE ANYMORE - Now is responsibility of MessageOrderCommand
		// Initialization of the BehaviorExecutionSpecifications
		// BehaviorExecutionSpecification bes;
		// if (mySource instanceof BehaviorExecutionSpecification) {
		// bes = (BehaviorExecutionSpecification) mySource;
		// if (bes.getStart() == null)
		// bes.setStart(msgSend);
		//
		// bes.setFinish(msgSend);
		// }
		//
		// if (myTarget instanceof BehaviorExecutionSpecification) {
		// bes = (BehaviorExecutionSpecification) myTarget;
		// if (bes.getStart() == null)
		// bes.setStart(msgReceive);
		//
		// bes.setFinish(msgReceive);
		// }

	}

	/**
	 * @generated
	 * 
	 * @author fjcano
	 */
	protected Diagram getDiagramFromRequest() {
		// used in doDefaultElementCreation()
		if (getRequest().getParameters().get(
				MultiDiagramUtil.BelongToDiagramSource) != null) {
			Object parameter = getRequest().getParameters().get(
					MultiDiagramUtil.BelongToDiagramSource);
			if (parameter instanceof Diagram) {
				return (Diagram) parameter;
			}
		}
		return null;
	}

}

Back to the top