PSCS11-6: Any EventOccurrence should be associatable as an
interaction point.

Change-Id: I9e31366b3a87ddb33e34b5dee88e8579a05e0f88
Signed-off-by: jeremie.tatibouet <jeremie.tatibouet@cea.fr>
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Object.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Object.java
index 752744e..4901bb1 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Object.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Object.java
@@ -19,11 +19,10 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;

 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;

-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

 import org.eclipse.uml2.uml.ConnectorKind;

 import org.eclipse.uml2.uml.Operation;

 import org.eclipse.uml2.uml.Port;

-import org.eclipse.uml2.uml.Signal;

 

 public interface ICS_Object extends IObject_ {

 

@@ -35,15 +34,15 @@
 

 	public IExecution dispatchOut(Operation operation, Port onPort);

 

-	public void sendIn(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint);

+	public void sendIn(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint);

 

-	public void sendIn(ISignalInstance signalInstance, Port onPort);

+	public void sendIn(IEventOccurrence eventOccurrence, Port onPort);

 

-	public void sendOut(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint);

+	public void sendOut(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint);

 

-	public void sendOut(ISignalInstance signalInstance, Port onPort);

+	public void sendOut(IEventOccurrence eventOccurrence, Port onPort);

 

-	public List<IReference> selectTargetsForSending(ICS_Link link, ICS_InteractionPoint interactionPoint, ConnectorKind connectorKind, Signal signal, Boolean toInternal);

+	public List<IReference> selectTargetsForSending(ICS_Link link, ICS_InteractionPoint interactionPoint, ConnectorKind connectorKind, Boolean toInternal);

 

 	public List<IReference> selectTargetsForDispatching(ICS_Link link, ICS_InteractionPoint interactionPoint, ConnectorKind connectorKind, Operation operation, Boolean toInternal);

 

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Reference.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Reference.java
index 055342d..1ef670c 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Reference.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites.interfaces/src/org/eclipse/papyrus/moka/composites/interfaces/Semantics/CompositeStructures/StructuredClasses/ICS_Reference.java
@@ -15,7 +15,7 @@
 

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;

 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;

-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

 import org.eclipse.uml2.uml.Operation;

 import org.eclipse.uml2.uml.Port;

 

@@ -29,13 +29,13 @@
 

 	public IExecution dispatchOut(Operation operation, ICS_InteractionPoint interactionPoint);

 

-	public void sendIn(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint);

+	public void sendIn(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint);

 

-	public void sendIn(ISignalInstance signalInstance, Port onPort);

+	public void sendIn(IEventOccurrence eventOccurrence, Port onPort);

 

-	public void sendOut(ISignalInstance signalInstance, Port onPort);

+	public void sendOut(IEventOccurrence eventOccurrence, Port onPort);

 

-	public void sendOut(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint);

+	public void sendOut(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint);

 

 	public ICS_Object getCompositeReferent();

 

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Actions/CompleteActions/CS_ReadIsClassifiedObjectActionActivation.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Actions/CompleteActions/CS_ReadIsClassifiedObjectActionActivation.java
deleted file mode 100644
index f35c8e5..0000000
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Actions/CompleteActions/CS_ReadIsClassifiedObjectActionActivation.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2013 CEA LIST.
- *
- *
- * 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:
- *  CEA LIST - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.CompleteActions;
-
-import java.util.List;
-
-import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.CompleteActions.ReadIsClassifiedObjectActionActivation;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Classifier;
-import org.eclipse.uml2.uml.Interface;
-import org.eclipse.uml2.uml.InterfaceRealization;
-
-public class CS_ReadIsClassifiedObjectActionActivation extends ReadIsClassifiedObjectActionActivation {
-
-	@Override
-	public boolean checkAllParents(Classifier type, Classifier classifier) {
-		// If the given classifier is not an Interface, behaves like in fUML.
-		// Otherwise, check if the given type (or one of its direct or indirect ancestors)
-		// has an InterfaceRealization relationships with the given classifier.
-		boolean matched = false;
-		if (!(classifier instanceof Interface)) {
-			matched = super.checkAllParents(type, classifier);
-		} else if (!(type instanceof Class)) {
-			matched = false;
-		} else if (this.realizesInterface((Class) type, (Interface) classifier)) {
-			matched = true;
-		} else {
-			List<Classifier> directParents = type.getGenerals();
-			int i = 1;
-			while (!matched & i <= directParents.size()) {
-				Classifier directParent = directParents.get(i - 1);
-				matched = this.checkAllParents(directParent, classifier);
-				i = i + 1;
-			}
-		}
-		return matched;
-	}
-
-	public Boolean realizesInterface(Class type, Interface interface_) {
-		// Checks if the given type has an InterfaceRealization relationship
-		// with the given interface or a descendant of the interface.
-		List<InterfaceRealization> realizations = type.getInterfaceRealizations();
-		boolean realized = false;
-		int i = 1;
-		while (i <= realizations.size() && !realized) {
-			InterfaceRealization realization = realizations.get(i - 1);
-			Interface contract = realization.getContract();
-			if (contract == interface_) {
-				realized = true;
-			} else if (this.isDescendant(contract, interface_)) {
-				realized = true;
-			}
-			i = i + 1;
-		}
-		return realized;
-	}
-
-	public Boolean isDescendant(Interface contract, Interface interface_) {
-		// Checks if the given contract is a descendant of the given interface_
-		boolean matched = false;
-		List<Classifier> descendants = contract.getGenerals();
-		int i = 1;
-		while (i <= descendants.size() && !matched) {
-			if (descendants.get(i - 1) instanceof Interface) {
-				Interface descendant = (Interface) descendants.get(i - 1);
-				if (descendant == interface_) {
-					matched = true;
-				} else {
-					matched = this.isDescendant(descendant, interface_);
-				}
-			}
-			i = i + 1;
-		}
-		return matched;
-	}
-}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_AcceptEventActionActivation.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_AcceptEventActionActivation.java
index 9f2b4ce..c6509fa 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_AcceptEventActionActivation.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_AcceptEventActionActivation.java
@@ -13,54 +13,20 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions;
 
-// Imports
-import java.util.List;
-
-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.CompleteActions.AcceptEventActionActivation;
-import org.eclipse.uml2.uml.AcceptEventAction;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Signal;
-import org.eclipse.uml2.uml.SignalEvent;
-import org.eclipse.uml2.uml.Trigger;
-
 
 public class CS_AcceptEventActionActivation extends AcceptEventActionActivation {
 
 	@Override
-	public Boolean match(ISignalInstance signalInstance) {
-		// Return true if the given signal instance matches a trigger of the accept
-		// event action of this activation.
-		// Matching implies that the type of the signalInstance matches the Signal
-		// of one of the triggers.
-		// When the type matches with the Signal, and if the trigger specifies a
-		// list of ports,
-		// the signalInstance matches the trigger only if it occurred on a port
-		// identified in the list.
-
-		AcceptEventAction action = (AcceptEventAction) (this.node);
-		List<Trigger> triggers = action.getTriggers();
-		Signal signal = signalInstance.getType();
-
-		Boolean matches = false;
-		Integer i = 1;
-		while (!matches & i <= triggers.size()) {
-			Trigger t = triggers.get(i - 1);
-			matches = ((SignalEvent) t.getEvent()).getSignal() == signal;
-			if (matches && t.getPorts().size() > 0) {
-				List<Port> portsOfTrigger = t.getPorts();
-				Port onPort = ((CS_SignalInstance) signalInstance).interactionPoint.getDefiningPort();
-				Boolean portMatches = false;
-				Integer j = 1;
-				while (!portMatches & j <= portsOfTrigger.size()) {
-					portMatches = onPort == portsOfTrigger.get(j - 1);
-					j = j + 1;
-				}
-				matches = portMatches;
-			}
-			i = i + 1;
+	public void accept(IEventOccurrence eventOccurrence) {
+		// If the accepted event occurrence is a CS_EventOccurrence then the wrapped
+		// event occurrence is extracted. The acceptance process is the one define
+		// by AcceptEventActionActivation defined in fUML.
+		if (eventOccurrence instanceof CS_EventOccurrence) {
+			super.accept(((CS_EventOccurrence) eventOccurrence).wrappedEventOccurrence);
+		} else {
+			super.accept(eventOccurrence);
 		}
-
-		return matches;
 	}
 }
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SendSignalActionActivation.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SendSignalActionActivation.java
index cd52651..64bd501 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SendSignalActionActivation.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SendSignalActionActivation.java
@@ -18,9 +18,11 @@
 
 import org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.StructuredClasses.CS_Reference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
-import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.BasicActions.SendSignalActionActivation;
+import org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications.SignalEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications.SignalInstance;
 import org.eclipse.uml2.uml.InputPin;
 import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.SendSignalAction;
@@ -51,15 +53,15 @@
 
 		if (action.getOnPort() == null) {
 			// Behaves like in fUML
-			this.doActionDefault();
+			super.doAction();
 		} else {
 			IValue target = this.takeTokens(action.getTarget()).get(0);
 
 			if (target instanceof CS_Reference) {
 				// Constructs the signal instance
 				Signal signal = action.getSignal();
-				CS_SignalInstance signalInstance = new CS_SignalInstance();
-				signalInstance.type = signal;
+				ISignalInstance signalInstance = new SignalInstance();
+				signalInstance.setType(signal);
 
 				List<Property> attributes = signal.getOwnedAttributes();
 				List<InputPin> argumentPins = action.getArguments();
@@ -71,7 +73,9 @@
 					signalInstance.setFeatureValue(attribute, values, 0);
 					i = i + 1;
 				}
-
+				// Construct the signal event occurrence
+				SignalEventOccurrence signalEventOccurrence =  new SignalEventOccurrence();
+				signalEventOccurrence.signalInstance = (SignalInstance) signalInstance.copy();
 				// Tries to determine if the signal has to be
 				// sent to the environment or to the internals of
 				// target, through onPort
@@ -79,42 +83,12 @@
 				// Port onPort = action.onPort ;
 				IObject_ executionContext = this.group.getActivityExecution().getContext();
 				if (executionContext == targetReference.referent || targetReference.compositeReferent.contains(executionContext)) {
-					targetReference.sendOut(signalInstance, action.getOnPort());
+					targetReference.sendOut(signalEventOccurrence, action.getOnPort());
 				} else {
-					targetReference.sendIn(signalInstance, action.getOnPort());
+					targetReference.sendIn(signalEventOccurrence, action.getOnPort());
 				}
 			}
 		}
 	}
-
-	public void doActionDefault() {
-		// Get the value from the target pin. If the value is not a reference,
-		// then do nothing.
-		// Otherwise, construct a signal using the values from the argument pins
-		// and send it to the referent object.
-		// This operation captures same semantics as fUML
-		// SendSignalActionActivation.doAction() except that it constructs
-		// a CS_SignalInstance instead of a SignalInstance
-
-		SendSignalAction action = (SendSignalAction) (this.node);
-		IValue target = this.takeTokens(action.getTarget()).get(0);
-
-		if (target instanceof IReference) {
-			Signal signal = action.getSignal();
-
-			CS_SignalInstance signalInstance = new CS_SignalInstance();
-			signalInstance.type = signal;
-
-			List<Property> attributes = signal.getOwnedAttributes();
-			List<InputPin> argumentPins = action.getArguments();
-			for (int i = 0; i < attributes.size(); i++) {
-				Property attribute = attributes.get(i);
-				InputPin argumentPin = argumentPins.get(i);
-				List<IValue> values = this.takeTokens(argumentPin);
-				signalInstance.setFeatureValue(attribute, values, 0);
-			}
-
-			((IReference) target).send(signalInstance);
-		}
-	}
+	
 }
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SignalInstance.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SignalInstance.java
deleted file mode 100644
index 24e082e..0000000
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/InvocationActions/CS_SignalInstance.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2013 CEA LIST.
- *
- *
- * 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:
- *  CEA LIST - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions;
-
-import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
-import org.eclipse.papyrus.moka.fuml.Semantics.impl.Classes.Kernel.Value;
-import org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications.SignalInstance;
-
-
-public class CS_SignalInstance extends SignalInstance {
-
-	/*
-	 * The InteractionPoint on which this signal instance occured.
-	 */
-	public ICS_InteractionPoint interactionPoint;
-
-	@Override
-	public Value copy() {
-		// Create a new signal instance with the same type, interaction point and feature values as this signal instance.
-		CS_SignalInstance newValue = (CS_SignalInstance) (super.copy());
-		newValue.type = this.type;
-		newValue.interactionPoint = this.interactionPoint;
-		return newValue;
-	}
-
-	@Override
-	public Value new_() {
-		// Create a new signal instance with no type or feature values.
-		return new CS_SignalInstance();
-	}
-}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_InteractionPoint.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_InteractionPoint.java
index ce6c98d..f10108e 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_InteractionPoint.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_InteractionPoint.java
@@ -16,14 +16,17 @@
 // Imports
 import java.util.List;
 
+import org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions.CS_EventOccurrence;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_Reference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;
-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Classes.Kernel.Reference;
 import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.Port;
 
@@ -44,7 +47,7 @@
 
 	@Override
 	public void startBehavior(Class classifier, List<IParameterValue> inputs) {
-		// Overriden to do nothing
+		// Overridden to do nothing
 	}
 
 	@Override
@@ -54,9 +57,19 @@
 	}
 
 	@Override
-	public void send(ISignalInstance signalInstance) {
-		// Delegates sending to the owning object
-		this.owner.sendIn(signalInstance, this);
+	public void send(IEventOccurrence eventOccurrence) {
+		// An event occurrence that passes through a CS_InteractionPoint is
+		// (if necessary) wrapped in a CS_EventOccurrence. This event occurrence
+		// is then sent to the owning object. 
+		ICS_EventOccurrence wrappingEventOccurrence = null;
+		if(eventOccurrence instanceof ICS_EventOccurrence){
+			wrappingEventOccurrence = (ICS_EventOccurrence) eventOccurrence; 
+		}else{
+			wrappingEventOccurrence = new CS_EventOccurrence();
+			wrappingEventOccurrence.setWrappedEventOccurrence(eventOccurrence);
+		}
+		wrappingEventOccurrence.setInteractionPoint(this);
+		this.owner.sendIn(wrappingEventOccurrence, this);
 	}
 
 	@Override
@@ -89,4 +102,10 @@
 	public void setDefiningPort(Port definingPort) {
 		this.definingPort = definingPort;
 	}
+	
+	@Override
+	public boolean checkAllParents(Classifier type, Classifier classifier) {
+		// Delegates the type checking to the reference
+		return this.referent.checkAllParents(type, classifier);
+	}
 }
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Object.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Object.java
index 2009060..24bd3dd 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Object.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Object.java
@@ -20,7 +20,6 @@
 import org.eclipse.papyrus.moka.composites.Semantics.impl.CommonBehaviors.Communications.CS_DispatchOperationOfInterfaceStrategy;
 import org.eclipse.papyrus.moka.composites.Semantics.impl.CommonBehaviors.Communications.CS_StructuralFeatureOfInterfaceAccessStrategy;
 import org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions.CS_RequestPropagationStrategy;
-import org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions.CS_SignalInstance;
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.CS_LinkKind;
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_Link;
@@ -32,7 +31,7 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;
-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.BasicActions.CallOperationActionActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.BasicActions.SendSignalActionActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Classes.Kernel.Object_;
@@ -45,7 +44,6 @@
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Signal;
 import org.eclipse.uml2.uml.StructuralFeature;
 
 
@@ -88,25 +86,20 @@
 	}
 
 
-	public void sendIn(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint) {
-		// If the interaction is a behavior port,
-		// creates a CS_SignalInstance from the signal instance,
-		// sets its interaction point,
-		// and sends it to the target object using operation send
-		// If this is not a behavior port,
-		// select appropriate delegation targets from interactionPoint,
-		// and propagates the signal to these targets
+	public void sendIn(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint) {
+		// 1] If the interaction is a behavior port then sends the event occurrence to the target
+		// object using operation send.
+		// 2] If this is not a behavior port, select appropriate delegation targets from interactionPoint,
+		// and propagates the event occurrence to these targets
 		if (interactionPoint.getDefiningPort().isBehavior()) {
-			CS_SignalInstance newSignalInstance = (CS_SignalInstance) signalInstance.copy();
-			newSignalInstance.interactionPoint = interactionPoint;
-			this.send(newSignalInstance);
+			this.send(eventOccurrence);
 		} else {
 			boolean toInternal = true;
 			List<IReference> potentialTargets = new ArrayList<IReference>();
 			List<ICS_Link> cddLinks = this.getLinks(interactionPoint);
 			Integer linkIndex = 1;
 			while (linkIndex <= cddLinks.size()) {
-				List<IReference> validTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.DELEGATION_LITERAL, signalInstance.getType(), toInternal);
+				List<IReference> validTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.DELEGATION_LITERAL, toInternal);
 				Integer targetIndex = 1;
 				while (targetIndex <= validTargets.size()) {
 					potentialTargets.add(validTargets.get(targetIndex - 1));
@@ -119,15 +112,13 @@
 			// Otherwise, do the following concurrently
 			for (int i = 0; i < potentialTargets.size(); i++) {
 				IReference target = potentialTargets.get(i);
-				CS_SignalInstance newSignalInstance = (CS_SignalInstance) signalInstance.copy();
-				newSignalInstance.interactionPoint = interactionPoint;
-				target.send(newSignalInstance);
+				target.send(eventOccurrence);
 			}
 		}
 	}
 
 
-	public List<IReference> selectTargetsForSending(ICS_Link link, ICS_InteractionPoint interactionPoint, ConnectorKind connectorKind, Signal signal, Boolean toInternal) {
+	public List<IReference> selectTargetsForSending(ICS_Link link, ICS_InteractionPoint interactionPoint, ConnectorKind connectorKind, Boolean toInternal) {
 		// From the given link, signal and interaction point, retrieves potential targets (i.e. end values of link)
 		// through which request can be propagated
 		// These targets are attached to interaction point through the given link, and respect the following rules:
@@ -298,15 +289,14 @@
 		return potentialTargets;
 	}
 
-	public void sendOut(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint) {
+	public void sendOut(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint) {
 		// Select appropriate delegation links from interactionPoint,
-		// and propagates the signal instance through these links
+		// and propagates the event occurrence through these links
 		// Appropriate links are links which target elements
 		// in the environment of this CS_Object.
 		// These can be delegation links (i.e, the targeted elements must
 		// require a reception for the signal) or assembly links (i.e., the target elements
 		// must provide a reception for the signal)
-
 		boolean notToInternal = false; // i.e. to environment
 		List<IReference> allPotentialTargets = new ArrayList<IReference>();
 		List<IReference> targetsForSendingIn = new ArrayList<IReference>();
@@ -315,14 +305,14 @@
 		List<ICS_Link> cddLinks = this.getLinks(interactionPoint);
 		Integer linkIndex = 1;
 		while (linkIndex <= cddLinks.size()) {
-			List<IReference> validAssemblyTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.ASSEMBLY_LITERAL, signalInstance.getType(), notToInternal);
+			List<IReference> validAssemblyTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.ASSEMBLY_LITERAL, notToInternal);
 			Integer targetIndex = 1;
 			while (targetIndex <= validAssemblyTargets.size()) {
 				allPotentialTargets.add(validAssemblyTargets.get(targetIndex - 1));
 				targetsForSendingIn.add(validAssemblyTargets.get(targetIndex - 1));
 				targetIndex = targetIndex + 1;
 			}
-			List<IReference> validDelegationTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.DELEGATION_LITERAL, signalInstance.getType(), notToInternal);
+			List<IReference> validDelegationTargets = this.selectTargetsForSending(cddLinks.get(linkIndex - 1), interactionPoint, ConnectorKind.DELEGATION_LITERAL, notToInternal);
 			targetIndex = 1;
 			while (targetIndex <= validDelegationTargets.size()) {
 				allPotentialTargets.add(validDelegationTargets.get(targetIndex - 1));
@@ -340,7 +330,7 @@
 			for (int k = 0; k < targetsForSendingIn.size(); k++) {
 				IReference cddTarget = targetsForSendingIn.get(k);
 				if (cddTarget == target) {
-					target.send(signalInstance);
+					target.send(eventOccurrence);
 				}
 			}
 			for (int k = 0; k < targetsForSendingOut.size(); k++) {
@@ -349,7 +339,7 @@
 				ICS_InteractionPoint cddTarget = (ICS_InteractionPoint) targetsForSendingOut.get(k);
 				if (cddTarget == target) {
 					ICS_Reference owner = cddTarget.getOwner();
-					owner.sendOut(signalInstance, cddTarget);
+					owner.sendOut(eventOccurrence, cddTarget);
 				}
 			}
 		}
@@ -658,9 +648,9 @@
 		return isAValue;
 	}
 
-	public void sendOut(ISignalInstance signalInstance, Port onPort) {
+	public void sendOut(IEventOccurrence eventOccurrence, Port onPort) {
 		// Select a CS_InteractionPoint value playing onPort,
-		// and send the signal instance to this interaction point
+		// and send the event occurrence to this interaction point
 		IFeatureValue featureValue = this.getFeatureValue(onPort);
 		List<IValue> values = featureValue.getValues();
 		List<IReference> potentialTargets = new ArrayList<IReference>();
@@ -671,7 +661,7 @@
 		List<IReference> targets = strategy.select(potentialTargets, new SendSignalActionActivation());
 		for (int i = 0; i < targets.size(); i++) {
 			CS_InteractionPoint target = (CS_InteractionPoint) targets.get(i);
-			this.sendOut(signalInstance, target);
+			this.sendOut(eventOccurrence, target);
 		}
 	}
 
@@ -707,7 +697,7 @@
 		return interactionPoint.dispatch(operation);
 	}
 
-	public void sendIn(ISignalInstance signalInstance, Port onPort) {
+	public void sendIn(IEventOccurrence eventOccurrence, Port onPort) {
 		// Select a Reference value playing onPort,
 		// and send the signal instance to this interaction point
 		IFeatureValue featureValue = this.getFeatureValue(onPort);
@@ -720,7 +710,7 @@
 		List<IReference> targets = strategy.select(potentialTargets, new SendSignalActionActivation());
 		for (int i = 0; i < targets.size(); i++) {
 			IReference target = targets.get(i);
-			target.send(signalInstance);
+			target.send(eventOccurrence);
 		}
 	}
 
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Reference.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Reference.java
index 905d211..c0d769e 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Reference.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/CompositeStructures/StructuredClasses/CS_Reference.java
@@ -18,7 +18,7 @@
 import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_Reference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;
-import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Classes.Kernel.Reference;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.Port;
@@ -36,14 +36,14 @@
 		return this.compositeReferent.dispatchIn(operation, interactionPoint);
 	}
 
-	public void sendIn(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint) {
+	public void sendIn(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint) {
 		// delegates sending to composite referent
-		this.compositeReferent.sendIn(signalInstance, interactionPoint);
+		this.compositeReferent.sendIn(eventOccurrence, interactionPoint);
 	}
 
-	public void sendOut(ISignalInstance signalInstance, Port onPort) {
+	public void sendOut(IEventOccurrence eventOccurrence, Port onPort) {
 		// delegates sending to composite referent
-		this.compositeReferent.sendOut(signalInstance, onPort);
+		this.compositeReferent.sendOut(eventOccurrence, onPort);
 	}
 
 	public IExecution dispatchOut(Operation operation, Port onPort) {
@@ -56,9 +56,9 @@
 		return this.compositeReferent.dispatchIn(operation, onPort);
 	}
 
-	public void sendIn(ISignalInstance signalInstance, Port onPort) {
+	public void sendIn(IEventOccurrence eventOccurrence, Port onPort) {
 		// delegates sending to composite referent
-		this.compositeReferent.sendIn(signalInstance, onPort);
+		this.compositeReferent.sendIn(eventOccurrence, onPort);
 	}
 
 	public IExecution dispatchOut(Operation operation, ICS_InteractionPoint interactionPoint) {
@@ -67,10 +67,10 @@
 		return this.compositeReferent.dispatchOut(operation, interactionPoint);
 	}
 
-	public void sendOut(ISignalInstance signalInstance, ICS_InteractionPoint interactionPoint) {
+	public void sendOut(IEventOccurrence eventOccurrence, ICS_InteractionPoint interactionPoint) {
 		// Delegates sending (through the interaction point, to the environment)
 		// to compositeReferent
-		this.compositeReferent.sendOut(signalInstance, interactionPoint);
+		this.compositeReferent.sendOut(eventOccurrence, interactionPoint);
 	}
 
 	@Override
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Loci/LociL3/CS_ExecutionFactory.java b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Loci/LociL3/CS_ExecutionFactory.java
index 985a95b..f20989b 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Loci/LociL3/CS_ExecutionFactory.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/generated/org/eclipse/papyrus/moka/composites/Semantics/impl/Loci/LociL3/CS_ExecutionFactory.java
@@ -14,7 +14,6 @@
 package org.eclipse.papyrus.moka.composites.Semantics.impl.Loci.LociL3;
 
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.CompleteActions.CS_ReadExtentActionActivation;
-import org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.CompleteActions.CS_ReadIsClassifiedObjectActionActivation;
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.IntermediateActions.CS_AddStructuralFeatureValueActionActivation;
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.IntermediateActions.CS_ClearStructuralFeatureValueActionActivation;
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Actions.IntermediateActions.CS_CreateLinkActionActivation;
@@ -37,7 +36,6 @@
 import org.eclipse.uml2.uml.InstanceValue;
 import org.eclipse.uml2.uml.OpaqueExpression;
 import org.eclipse.uml2.uml.ReadExtentAction;
-import org.eclipse.uml2.uml.ReadIsClassifiedObjectAction;
 import org.eclipse.uml2.uml.ReadSelfAction;
 import org.eclipse.uml2.uml.SendSignalAction;
 
@@ -52,8 +50,8 @@
 		ISemanticVisitor visitor = null;
 		if (element instanceof ReadExtentAction) {
 			visitor = new CS_ReadExtentActionActivation();
-		} else if (element instanceof ReadIsClassifiedObjectAction) {
-			visitor = new CS_ReadIsClassifiedObjectActionActivation();
+		}else if (element instanceof AcceptEventAction) {
+			visitor = new CS_AcceptEventActionActivation();
 		} else if (element instanceof AddStructuralFeatureValueAction) {
 			visitor = new CS_AddStructuralFeatureValueActionActivation();
 		} else if (element instanceof ClearStructuralFeatureAction) {
@@ -66,9 +64,7 @@
 			visitor = new CS_ReadSelfActionActivation();
 		} else if (element instanceof InstanceValue) {
 			visitor = new CS_InstanceValueEvaluation();
-		} else if (element instanceof AcceptEventAction) {
-			visitor = new CS_AcceptEventActionActivation();
-		} else if (element instanceof CallOperationAction) {
+		}  else if (element instanceof CallOperationAction) {
 			visitor = new CS_CallOperationActionActivation();
 		} else if (element instanceof SendSignalAction) {
 			visitor = new CS_SendSignalActionActivation();