From f547d4c1263ee1dec3ce3a1bb0def5a30515254f Mon Sep 17 00:00:00 2001
From: nullsub <chrisudeussen@gmail.com>
Date: Sun, 24 Jun 2018 20:33:50 +0200
Subject: [PATCH] add policy for connection in IntraRelationships #19

---
 ...actInterRelationshipConstraintPattern.java |  2 +-
 ...actIntraRelationshipConstraintPattern.java | 14 ++-------
 .../IntraRelationship.ecl                     | 22 ++++++-------
 .../IntraRelationship.editpolicy              | 20 ++++++------
 .../ui/editPolicy/ConstraintRuleVisitor.java  | 31 +++++++++++++------
 5 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/AbstractInterRelationshipConstraintPattern.java b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/AbstractInterRelationshipConstraintPattern.java
index 98aadb15..3f5ed17d 100644
--- a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/AbstractInterRelationshipConstraintPattern.java
+++ b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/AbstractInterRelationshipConstraintPattern.java
@@ -179,7 +179,7 @@ public abstract class AbstractInterRelationshipConstraintPattern extends FRaMEDC
 		org.framed.iorm.model.ModelElement sourceConnection = UIUtil.getModelElementForAnchor(sourceAnchor);
 		if(sourceConnection != null){	
 			if(sourceConnection.getType() == Type.RELATIONSHIP)
-				return EditPolicyService.getHandler(this.getDiagram()).canStart(createContext, this.getModelType() );
+				return EditPolicyService.getHandler(this.getDiagram()).canStart(createContext, this.getModelType());
 		}	
 		return false;
 	}
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 8bee86e7..f43cf5c7 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
@@ -114,14 +114,7 @@ public abstract class AbstractIntraRelationshipConstraintPattern extends FRaMEDS
 		if (addContext.getNewObject() instanceof Relation) {
 			Relation relation = (Relation) addContext.getNewObject();
 			if (relation.getType() == type) {
-				Connection targetConnection = addContext.getTargetConnection();
-				if (targetConnection != null) {
-					Object m = getBusinessObjectForPictogramElement(targetConnection);
-					if (m instanceof Relation && ((Relation) m).getType() == Type.RELATIONSHIP) { 
-						// TODO: Create EditPolicy rule for this case
-						return EditPolicyService.getHandler(this.getDiagram()).canAdd(addContext, type);
-					}
-				}
+				return EditPolicyService.getHandler(this.getDiagram()).canAdd(addContext, type);
 			}
 		}
 		return false;
@@ -164,10 +157,7 @@ public abstract class AbstractIntraRelationshipConstraintPattern extends FRaMEDS
 	public boolean canCreate(ICreateContext createContext) {
 		Connection targetConnection = createContext.getTargetConnection();
 		if(targetConnection != null) {
-			Object m = getBusinessObjectForPictogramElement(targetConnection);
-			if(m instanceof Relation && ((Relation) m).getType() == Type.RELATIONSHIP) { //TODO: Create EditPolicy rule for this case
-				return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.getModelType());
-			}
+			return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.getModelType());
 		}
 	    return false;
 	}
diff --git a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.ecl b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.ecl
index 0de8445a..b41512ba 100644
--- a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.ecl
+++ b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.ecl
@@ -1,20 +1,20 @@
 //IntraRelationshipConstraint 
-Add Irreflexive (Intra_Relationship_Constraints) when true; 
+Add Irreflexive (Intra_Relationship_Constraints) when IsTargetConnectionType(Relationship); 
 Start Irreflexive (Intra_Relationship_Constraints) when true;
-Create Irreflexive (Intra_Relationship_Constraints) when true;
+Create Irreflexive (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 
-Add Acyclic (Intra_Relationship_Constraints) when true;
+Add Acyclic (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 Start Acyclic (Intra_Relationship_Constraints) when true;
-Create Acyclic (Intra_Relationship_Constraints) when true;
+Create Acyclic (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 
-Add Cyclic (Intra_Relationship_Constraints) when true;
+Add Cyclic (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 Start Cyclic (Intra_Relationship_Constraints) when true;
-Create Cyclic (Intra_Relationship_Constraints) when true;
+Create Cyclic (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 
-Add Reflexive (Intra_Relationship_Constraints) when true;
-Start Reflexive (Intra_Relationship_Constraints) when true;
-Create Reflexive (Intra_Relationship_Constraints) when true;
+Add Reflexive (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
+Start Reflexive (Intra_Relationship_Constraints) when true; 
+Create Reflexive (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 
-Add Total (Intra_Relationship_Constraints) when true;
+Add Total (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
 Start Total (Intra_Relationship_Constraints) when true;
-Create Total (Intra_Relationship_Constraints) when true;
+Create Total (Intra_Relationship_Constraints) when  IsTargetConnectionType(Relationship);
diff --git a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.editpolicy b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.editpolicy
index 45510f0d..638a1664 100644
--- a/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.editpolicy
+++ b/org.framed.iorm.ui/modules/relationship/intra_relationship_constraints/IntraRelationship.editpolicy
@@ -2,7 +2,7 @@
 <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="Add" actionType="Irreflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Start" actionType="Irreflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
@@ -10,11 +10,11 @@
   </policies>
   <policies actionType="Irreflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Add">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Start">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
@@ -22,11 +22,11 @@
   </policies>
   <policies>
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Add" actionType="Cyclic">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Start" actionType="Cyclic">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
@@ -34,11 +34,11 @@
   </policies>
   <policies actionType="Cyclic">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Add" actionType="Reflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Start" actionType="Reflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
@@ -46,11 +46,11 @@
   </policies>
   <policies actionType="Reflexive">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Add" actionType="Total">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
   <policies action="Start" actionType="Total">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
@@ -58,6 +58,6 @@
   </policies>
   <policies actionType="Total">
     <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Intra_Relationship_Constraints"/>
-    <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/>
+    <constraintRule xsi:type="editpolicymodel:IsTargetConnectionType" type="Relationship"/>
   </policies>
 </editpolicymodel:Model>
diff --git a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/ConstraintRuleVisitor.java b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/ConstraintRuleVisitor.java
index 50489d6b..b72b9cb7 100644
--- a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/ConstraintRuleVisitor.java
+++ b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/ConstraintRuleVisitor.java
@@ -10,10 +10,12 @@ import org.eclipse.graphiti.features.context.impl.AddContext;
 import org.eclipse.graphiti.features.context.impl.CreateConnectionContext;
 import org.eclipse.graphiti.features.context.impl.CreateContext;
 import org.eclipse.graphiti.mm.pictograms.Anchor;
+import org.eclipse.graphiti.mm.pictograms.Connection;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.Shape;
 import org.framed.iorm.model.ModelElement;
+import org.framed.iorm.model.Relation;
 import org.framed.iorm.model.Type;
 import org.framed.iorm.ui.UIUtil;
 import org.framed.iorm.ui.exceptions.NoDiagramFoundException;
@@ -223,16 +225,14 @@ public class ConstraintRuleVisitor {
 	}
 	
 	private boolean isTargetConnectionTypeVisitor(IsTargetConnectionType rule) {
-		throw new IllegalStateException("TODO");
-		/*
-		Anchor anchor = this.getTargetAnchorFromContext(this.context);
-		if (anchor == null) {
-			System.out.println("failed isTargetType() anchor== null,  this.context: " + this.context.toString());
-			return false;
+		Connection targetConnection = this.getTargetConnectionFromContext(this.context);
+		if (targetConnection != null) {
+			Object m = UIUtil.getBusinessObjectForPictogramElement(targetConnection);
+			if (m instanceof Relation && ((Relation) m).getType().getLiteral().equals(rule.getType().getLiteral())) { 
+				return true;
+			}
 		}
-		ModelElement source = UIUtil.getModelElementForAnchor(anchor);
-		return rule.getType().getLiteral().equals(source.getType().getLiteral());
-		*/
+		return false;
 	}
 
 	private boolean containsTypeVisitor(ContainsType rule) {
@@ -292,6 +292,19 @@ public class ConstraintRuleVisitor {
 		}
 		return anchor;
 	}
+	
+
+	private Connection getTargetConnectionFromContext(Object context) {
+		Connection targetConnection = null;
+		if (this.context instanceof AddContext) {
+			AddContext addContext = (AddContext)this.context;
+			targetConnection = addContext.getTargetConnection();
+		} else if (this.context instanceof CreateContext) {
+			CreateContext createContext = (CreateContext)this.context;
+			targetConnection = createContext.getTargetConnection();
+		}
+		return targetConnection;
+	}
 
 	private boolean sourceEqualsTargetTypeVisitor(SourceEqualsTargetType rule) {
 		// System.out.println("class is: " + this.context.getClass());
-- 
GitLab