From 8aa999625e70b902ed9a806d0d3f1b5b473ee458 Mon Sep 17 00:00:00 2001
From: tkuehn <thomas.kuehn3@tu-dresden.de>
Date: Wed, 13 Jun 2018 20:55:48 +0200
Subject: [PATCH] Fixed RoleConstraints edit policies and added case for
 RoleConstraints and RoleGroups

---
 .../RoleConstraintsAndRoleGroups.ecl          |  36 +++
 .../RoleConstraintsAndRoleGroups.editpolicy   | 222 ++++++++++++++++++
 .../AbstractRoleConstraintPattern.java        |   8 +-
 .../role_constraints/RoleConstraints.ecl      |   6 +-
 .../RoleConstraints.editpolicy                |  40 +++-
 5 files changed, 297 insertions(+), 15 deletions(-)
 create mode 100644 org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.ecl
 create mode 100644 org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.editpolicy

diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.ecl b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.ecl
new file mode 100644
index 00000000..1c66ead9
--- /dev/null
+++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.ecl
@@ -0,0 +1,36 @@
+//RoleConstraints and RoleGroups
+Start RoleImplication (Role_Implication and Group_Constraints) when
+  IsSourceType(RoleType) or IsSourceType(RoleGroup); 
+Add RoleImplication (Role_Implication and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Reconnect RoleImplication (Role_Implication and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Create RoleImplication (Role_Implication and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup));
+ 
+Start RoleEquivalence (Role_Equivalence and Group_Constraints) when
+  IsSourceType(RoleType) or IsSourceType(RoleGroup); 
+Add RoleEquivalence (Role_Equivalence and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Reconnect RoleEquivalence (Role_Equivalence and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Create RoleEquivalence (Role_Equivalence and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup));
+  
+Start RoleProhibition (Role_Prohibition and Group_Constraints) when
+  IsSourceType(RoleType) or IsSourceType(RoleGroup); 
+Add RoleProhibition (Role_Prohibition and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Reconnect RoleProhibition (Role_Prohibition and Group_Constraints) when
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup)); 
+Create RoleProhibition (Role_Prohibition and Group_Constraints) when 
+  (IsSourceType(RoleType) or IsSourceType(RoleGroup)) and !SourceEqualsTarget() and
+  (IsTargetType(RoleType) or IsTargetType(RoleGroup));
\ No newline at end of file
diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.editpolicy b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.editpolicy
new file mode 100644
index 00000000..6630ab19
--- /dev/null
+++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleConstraintsAndRoleGroups.editpolicy
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="ASCII"?>
+<editpolicymodel:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:editpolicymodel="http://framed/editpolicymodel">
+  <policies action="Start" actionType="RoleImplication">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Implication"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:OrConstraintRule">
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+    </constraintRule>
+  </policies>
+  <policies action="Add" actionType="RoleImplication">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Implication"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies action="Reconnect" actionType="RoleImplication">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Implication"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies actionType="RoleImplication">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Implication"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies action="Start" actionType="RoleEquivalence">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:OrConstraintRule">
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+    </constraintRule>
+  </policies>
+  <policies action="Add" actionType="RoleEquivalence">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies action="Reconnect" actionType="RoleEquivalence">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies actionType="RoleEquivalence">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies action="Start" actionType="RoleProhibition">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:OrConstraintRule">
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+    </constraintRule>
+  </policies>
+  <policies action="Add" actionType="RoleProhibition">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies action="Reconnect" actionType="RoleProhibition">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+  <policies actionType="RoleProhibition">
+    <featureRule xsi:type="editpolicymodel:AndFeatureRule">
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
+      <rules xsi:type="editpolicymodel:IsFeature" featureName="Group_Constraints"/>
+    </featureRule>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:OrConstraintRule">
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+          <rules xsi:type="editpolicymodel:IsSourceType" type="RoleGroup"/>
+        </rules>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:OrConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleGroup"/>
+      </rules>
+    </constraintRule>
+  </policies>
+</editpolicymodel:Model>
diff --git a/org.framed.iorm.ui/modules/roletype/role_constraints/AbstractRoleConstraintPattern.java b/org.framed.iorm.ui/modules/roletype/role_constraints/AbstractRoleConstraintPattern.java
index 2f40db8c..6b5aea2b 100644
--- a/org.framed.iorm.ui/modules/roletype/role_constraints/AbstractRoleConstraintPattern.java
+++ b/org.framed.iorm.ui/modules/roletype/role_constraints/AbstractRoleConstraintPattern.java
@@ -43,7 +43,7 @@ public abstract class AbstractRoleConstraintPattern extends FRaMEDConnectionPatt
 	    org.framed.iorm.model.ModelElement oldShape = UIUtil.getModelElementForAnchor(oldAnchor);
 	    if(newShape != null && oldShape != null) {
 	    	if(newShape.getContainer() == oldShape.getContainer()) {
-	    		return EditPolicyService.getHandler(this.getDiagram()).canReconnect(context, this.modelType);
+	    		return EditPolicyService.getHandler(this.getDiagram()).canReconnect(context, this.getModelType());
 		}	}
 	    return false;
 	}
@@ -58,7 +58,7 @@ public abstract class AbstractRoleConstraintPattern extends FRaMEDConnectionPatt
 		if(addContext.getNewObject() instanceof Relation) {
 		   Relation relation = (Relation) addContext.getNewObject();
 		   if(relation != null && relation.getType() != null) {
-				return EditPolicyService.getHandler(this.getDiagram()).canAdd(addContext, this.modelType);
+				return EditPolicyService.getHandler(this.getDiagram()).canAdd(addContext, this.getModelType());
 		   }
 		}
 		return false;
@@ -82,7 +82,7 @@ public abstract class AbstractRoleConstraintPattern extends FRaMEDConnectionPatt
 	    org.framed.iorm.model.ModelElement sourceShape = UIUtil.getModelElementForAnchor(sourceAnchor);
 	    org.framed.iorm.model.ModelElement targetShape = UIUtil.getModelElementForAnchor(targetAnchor);
 	    if(sourceShape != null && targetShape != null) {
-	    		return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.modelType);
+	    		return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.getModelType());
 		}	
 	    return false;
 	}
@@ -100,7 +100,7 @@ public abstract class AbstractRoleConstraintPattern extends FRaMEDConnectionPatt
 		Anchor sourceAnchor = createContext.getSourceAnchor();
 		org.framed.iorm.model.ModelElement sourceShape = UIUtil.getModelElementForAnchor(sourceAnchor);
 		if(sourceShape != null){	
-	    	return EditPolicyService.getHandler(this.getDiagram()).canStart(createContext, this.modelType);
+	    	return EditPolicyService.getHandler(this.getDiagram()).canStart(createContext, this.getModelType());
 		}	
 		return false;
 	}
diff --git a/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.ecl b/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.ecl
index 21169077..151ba1aa 100644
--- a/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.ecl
+++ b/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.ecl
@@ -2,14 +2,14 @@
 Start RoleImplication (Role_Implication) when IsSourceType(RoleType); 
 Add RoleImplication (Role_Implication) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
 Reconnect RoleImplication (Role_Implication) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
-Create RoleProhibition (true) when true;
+Create RoleImplication (Role_Implication) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
  
 Start RoleEquivalence (Role_Equivalence) when IsSourceType(RoleType); 
 Add RoleEquivalence (Role_Equivalence) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
 Reconnect RoleEquivalence (Role_Equivalence) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
-Create RoleProhibition (true) when true;
+Create RoleEquivalence (Role_Equivalence) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
 
 Start RoleProhibition (Role_Prohibition) when IsSourceType(RoleType); 
 Add RoleProhibition (Role_Prohibition) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
 Reconnect RoleProhibition (Role_Prohibition) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType(); 
-Create RoleProhibition (true) when true;
\ No newline at end of file
+Create RoleProhibition (Role_Prohibition) when IsSourceType(RoleType) and !SourceEqualsTarget() and SourceEqualsTargetType();
\ No newline at end of file
diff --git a/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.editpolicy b/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.editpolicy
index 9302f433..bef68bc3 100644
--- a/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.editpolicy
+++ b/org.framed.iorm.ui/modules/roletype/role_constraints/RoleConstraints.editpolicy
@@ -28,9 +28,17 @@
       <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/>
     </constraintRule>
   </policies>
-  <policies actionType="RoleProhibition">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+  <policies actionType="RoleImplication">
+    <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Role_Implication"/>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/>
+    </constraintRule>
   </policies>
   <policies action="Start" actionType="RoleEquivalence">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
@@ -60,9 +68,17 @@
       <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/>
     </constraintRule>
   </policies>
-  <policies actionType="RoleProhibition">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+  <policies actionType="RoleEquivalence">
+    <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Role_Equivalence"/>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/>
+    </constraintRule>
   </policies>
   <policies action="Start" actionType="RoleProhibition">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
@@ -93,7 +109,15 @@
     </constraintRule>
   </policies>
   <policies actionType="RoleProhibition">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Role_Prohibition"/>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:NotConstraintRule">
+          <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+        </rules>
+      </rules>
+      <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/>
+    </constraintRule>
   </policies>
 </editpolicymodel:Model>
-- 
GitLab