From 3e2dce977e32dcbd9705741dc2061dc4ce9ceedb Mon Sep 17 00:00:00 2001
From: nullsub <chrisudeussen@gmail.com>
Date: Wed, 13 Jun 2018 10:18:09 +0200
Subject: [PATCH] fix Relationship policies and intraRelationship policiy
 handler call

---
 .../modules/relationship/Relationship.ecl     | 14 ++----
 .../relationship/Relationship.editpolicy      | 48 +++++++++++--------
 ...actIntraRelationshipConstraintPattern.java |  2 +-
 3 files changed, 33 insertions(+), 31 deletions(-)

diff --git a/org.framed.iorm.ui/modules/relationship/Relationship.ecl b/org.framed.iorm.ui/modules/relationship/Relationship.ecl
index 8d14b52c..8711b96d 100644
--- a/org.framed.iorm.ui/modules/relationship/Relationship.ecl
+++ b/org.framed.iorm.ui/modules/relationship/Relationship.ecl
@@ -1,11 +1,7 @@
 //Relationships  
-Start Relationship (Relationships) when true;
-Add Relationship (Relationships) when true; 
-Reconnect Relationship (Relationships) when true;
+Start Relationship (Relationships) when IsSourceType(RoleType);
+Add Relationship (Relationships) when IsTargetType(RoleType) and IsSourceType(RoleType) and !SourceEqualsTarget();
+Reconnect Relationship (Relationships) when IsTargetType(RoleType) and IsSourceType(RoleType) and !SourceEqualsTarget();
+Create Relationship (Relationships) when IsTargetType(RoleType) and IsSourceType(RoleType) and !SourceEqualsTarget();
  
-Start Relationship (true) when IsSourceType(RoleType);//For Relationship-Relation Source and Target must be Role-Type	
-Add Relationship (true) when IsTargetType(RoleType) and IsSourceType(RoleType);
-Reconnect Relationship (true) when IsTargetType(RoleType) and IsSourceType(RoleType);
-
-Execute Relationship (true) when true;
-Create Relationship (true) when true;
+Execute Relationship (Relationships) when true;
diff --git a/org.framed.iorm.ui/modules/relationship/Relationship.editpolicy b/org.framed.iorm.ui/modules/relationship/Relationship.editpolicy
index 3ab826e9..67c046f3 100644
--- a/org.framed.iorm.ui/modules/relationship/Relationship.editpolicy
+++ b/org.framed.iorm.ui/modules/relationship/Relationship.editpolicy
@@ -2,40 +2,46 @@
 <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="Relationship">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Relationships"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
   </policies>
   <policies action="Add" actionType="Relationship">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Relationships"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      </rules>
+      <rules xsi:type="editpolicymodel:NotConstraintRule">
+        <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+      </rules>
+    </constraintRule>
   </policies>
   <policies action="Reconnect" actionType="Relationship">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Relationships"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
-  </policies>
-  <policies action="Start" actionType="Relationship">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
-  </policies>
-  <policies action="Add" actionType="Relationship">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
-      <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
-      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      </rules>
+      <rules xsi:type="editpolicymodel:NotConstraintRule">
+        <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+      </rules>
     </constraintRule>
   </policies>
-  <policies action="Reconnect" actionType="Relationship">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
+  <policies actionType="Relationship">
+    <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Relationships"/>
     <constraintRule xsi:type="editpolicymodel:AndConstraintRule">
-      <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
-      <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="editpolicymodel:AndConstraintRule">
+        <rules xsi:type="editpolicymodel:IsTargetType" type="RoleType"/>
+        <rules xsi:type="editpolicymodel:IsSourceType" type="RoleType"/>
+      </rules>
+      <rules xsi:type="editpolicymodel:NotConstraintRule">
+        <rule xsi:type="editpolicymodel:SourceEqualsTarget"/>
+      </rules>
     </constraintRule>
   </policies>
   <policies action="Execute" actionType="Relationship">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
-  </policies>
-  <policies actionType="Relationship">
-    <featureRule xsi:type="editpolicymodel:TrueFeatureRule"/>
+    <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Relationships"/>
     <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
   </policies>
 </editpolicymodel:Model>
diff --git a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/AbstractIntraRelationshipConstraintPattern.java b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/AbstractIntraRelationshipConstraintPattern.java
index e38b375d..390b7ea2 100644
--- a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/AbstractIntraRelationshipConstraintPattern.java
+++ b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/AbstractIntraRelationshipConstraintPattern.java
@@ -158,7 +158,7 @@ public abstract class AbstractIntraRelationshipConstraintPattern extends FRaMEDS
 		if(targetConnection != null &&
 		   getBusinessObjectForPictogramElement(targetConnection) instanceof Relation) {
 			Relation relation = (Relation) getBusinessObjectForPictogramElement(targetConnection);
-			return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, relation.getType());
+			return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.getModelType());
 		}
 	    return false;
 	}
-- 
GitLab