Merge "remove parameter in rule if es is deleted"
diff --git a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/commands/InvocationDeleteCommand.java b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/commands/InvocationDeleteCommand.java
index db717bd..db555ed 100644
--- a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/commands/InvocationDeleteCommand.java
+++ b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/commands/InvocationDeleteCommand.java
@@ -9,13 +9,20 @@
  */
 package org.eclipse.emf.henshin.diagram.edit.commands;
 
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.henshin.diagram.edit.helpers.UnitEditHelper;
 import org.eclipse.emf.henshin.diagram.part.HenshinDiagramEditorPlugin;
 import org.eclipse.emf.henshin.diagram.part.HenshinLinkUpdater;
 import org.eclipse.emf.henshin.diagram.part.HenshinSymbolUpdater;
 import org.eclipse.emf.henshin.model.MultiUnit;
+import org.eclipse.emf.henshin.model.Parameter;
+import org.eclipse.emf.henshin.model.ParameterMapping;
 import org.eclipse.emf.henshin.model.Unit;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.gmf.runtime.common.core.command.CommandResult;
@@ -71,12 +78,17 @@
 		
 		// Check the unit type:
 		if (unit instanceof MultiUnit) {
+			
+			//remove invocation
 			((MultiUnit) unit).getSubUnits().remove(invocation);
+			
+			// delete the corresponding Mapping in Unit
+			UnitEditHelper.removeParameterMappingsToInvocation(unit, invocation);
 		}
 		else {
+			
 			return CommandResult.newErrorCommandResult("Unsupport unit type: " + unit.eClass().getName());
 		}
-		
 		// Delete the invocation view and update the unit view:
 		ViewUtil.destroy(invocationView);
 		PreferencesHint prefHint = HenshinDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT;
diff --git a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/helpers/UnitEditHelper.java b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/helpers/UnitEditHelper.java
index 9bf88ee..a202d99 100644
--- a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/helpers/UnitEditHelper.java
+++ b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/edit/helpers/UnitEditHelper.java
@@ -11,6 +11,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.emf.henshin.diagram.edit.parts.InvocationEditPart;
@@ -18,6 +19,8 @@
 import org.eclipse.emf.henshin.diagram.part.HenshinVisualIDRegistry;
 import org.eclipse.emf.henshin.model.ConditionalUnit;
 import org.eclipse.emf.henshin.model.MultiUnit;
+import org.eclipse.emf.henshin.model.Parameter;
+import org.eclipse.emf.henshin.model.ParameterMapping;
 import org.eclipse.emf.henshin.model.UnaryUnit;
 import org.eclipse.emf.henshin.model.Unit;
 import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
@@ -122,5 +125,25 @@
 		// Otherwise search the compartment:
 		return ViewUtil.getChildBySemanticHint(view, type);
 	}
+	
+	/** delete the corresponding Mapping to invocation in Unit
+	 * @param unit
+	 * @param invocation
+	 */
+	public static void  removeParameterMappingsToInvocation(Unit unit,Unit invocation)
+	{
+		final List<Parameter>  invocationParams =invocation.getParameters();
+		ParameterMapping mapping;
+		Iterator<ParameterMapping> mappings = unit.getParameterMappings().iterator();
+		while (mappings.hasNext()) {
+			mapping = mappings.next();
+			Parameter srcParam=mapping.getSource();
+			Parameter tarParam=mapping.getTarget();
+			if(invocationParams.contains(srcParam)||invocationParams.contains(tarParam))
+			{
+				mappings.remove();
+			}
+		}
+	}
 
 }