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();
+ }
+ }
+ }
}