From 5324f91dc668a1d0dbc756b100bf52368a1921ec Mon Sep 17 00:00:00 2001
From: nullsub <chrisudeussen@gmail.com>
Date: Wed, 2 May 2018 21:57:20 +0200
Subject: [PATCH] update constraint checker for all rules

---
 .../editpolicydsl/ide/.DslIdeModule.xtendbin  | Bin 1648 -> 1648 bytes
 .../editpolicydsl/ide/.DslIdeSetup.xtendbin   | Bin 2449 -> 2449 bytes
 .../editpolicydsl/ui/.DslUiModule.xtendbin    | Bin 2293 -> 2293 bytes
 .../.DslProposalProvider.xtendbin             | Bin 1754 -> 1754 bytes
 .../.DslDescriptionLabelProvider.xtendbin     | Bin 1934 -> 1934 bytes
 .../ui/labeling/.DslLabelProvider.xtendbin    | Bin 2371 -> 2371 bytes
 .../outline/.DslOutlineTreeProvider.xtendbin  | Bin 1781 -> 1781 bytes
 .../ui/quickfix/.DslQuickfixProvider.xtendbin | Bin 1747 -> 1747 bytes
 .../editpolicydsl/.DslRuntimeModule.xtendbin  | Bin 1679 -> 1679 bytes
 .../.DslStandaloneSetup.xtendbin              | Bin 2022 -> 2022 bytes
 .../formatting2/.DslFormatter.xtendbin        | Bin 2905 -> 2905 bytes
 .../generator/.DslGenerator.xtendbin          | Bin 3413 -> 3413 bytes
 .../scoping/.DslScopeProvider.xtendbin        | Bin 1719 -> 1719 bytes
 .../validation/.DslValidator.xtendbin         | Bin 1702 -> 1702 bytes
 .../core/standardPolicies.editpolicy          |  96 ++++++++++-----
 .../modules/datatype/simpleExample.editpolicy |   3 -
 .../ui/FRaMEDDeleteConnectionFeature.java     |   2 +-
 .../ui/editPolicy/ConstraintRuleVisitor.java  | 111 +++++++++++++-----
 .../iorm/ui/editPolicy/EditPolicyHandler.java |   9 +-
 .../ui/editPolicy/FeatureRuleVisitor.java     |   2 +-
 .../ui/subeditors/FRaMEDFeatureEditor.java    |   7 ++
 21 files changed, 165 insertions(+), 65 deletions(-)
 delete mode 100644 org.framed.iorm.ui/modules/datatype/simpleExample.editpolicy

diff --git a/org.framed.iorm.editpolicydsl.ide/xtend-gen/org/framed/iorm/editpolicydsl/ide/.DslIdeModule.xtendbin b/org.framed.iorm.editpolicydsl.ide/xtend-gen/org/framed/iorm/editpolicydsl/ide/.DslIdeModule.xtendbin
index f2f10de59fbaa6e06d0f81e12eb948b9f6d633c1..aa32725d2855ae1f9391b6de2239b5509be953b0 100644
GIT binary patch
delta 64
zcmeys^MQvqz?+#xgn@&DgF$@uqK&-VOw8i57j2ei3WPB7SsWQbB9k|>nuF=LtoC49
HpUn{fD%}!*

delta 64
zcmeys^MQvqz?+#xgn@&DgW>4P+Ks&2Ow31D)^3(&3WPB7SsWQbB9k|>nuF=LtoC49
HpUn{fj>Z-W

diff --git a/org.framed.iorm.editpolicydsl.ide/xtend-gen/org/framed/iorm/editpolicydsl/ide/.DslIdeSetup.xtendbin b/org.framed.iorm.editpolicydsl.ide/xtend-gen/org/framed/iorm/editpolicydsl/ide/.DslIdeSetup.xtendbin
index 7f9d61711a4c5dbfdad9308987ae823d485552bd..64d6baa46fcd9ff348ddfd8dcfa48ed61b581553 100644
GIT binary patch
delta 64
zcmbOzJW-f8z?+#xgn@&DgF$@uqK&+nEX?Aw7j3R&`N{-l6tX8Uf*6ypaF~N>K2Ccu
I9l+@b05O{q#Q*>R

delta 64
zcmbOzJW-f8z?+#xgn@&DgW>4P+Ks%KEX+q&)^4t3`N{-l6tX8Uf*6ypaF~N>K2Ccu
I9l+@b0F{ImPXGV_

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/.DslUiModule.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/.DslUiModule.xtendbin
index 6591c35a587206ede0fbbce5048d487f0a495cd1..0570f69559a72a3a084579f945c0db3b0b86f1e0 100644
GIT binary patch
delta 64
zcmew=_*IZMz?+#xgn@&DgF#~UqK&-gnV2PJFWP*c=?OEKaf~gW5yY5m!C?-ji#Y7T
I^cD_B0ECDX)Bpeg

delta 64
zcmew=_*IZMz?+#xgn@&DgW=f9+Ks&DnV65QtlfN{=?OEKaf~gW5yY5m!C?-ji#Y7T
I^cD_B0O)ZTUH||9

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/contentassist/.DslProposalProvider.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/contentassist/.DslProposalProvider.xtendbin
index b0d06ee57ca7bfc731451e286e64669f5d4c7afa..612710189fb6028827e25940652b680ded744bc2 100644
GIT binary patch
delta 64
zcmcb`dyAJhz?+#xgn@&DgF#~UqK&*xOw1Cq7i|t=YJo6rvN$q=L?+9!nS<$YHhVBV
Hlg$wTH0lzk

delta 64
zcmcb`dyAJhz?+#xgn@&DgTZ3%#Era8Ow1N@CvFa6YJo6rvN$q=L?+9!nS<$YHhVBV
Hlg$wTK*19Y

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/labeling/.DslDescriptionLabelProvider.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/labeling/.DslDescriptionLabelProvider.xtendbin
index 1c6c38a719a43df884bc58191d3b0fe93d49837e..46b24123b56ed4b9a8a265057047a10638ad8eef 100644
GIT binary patch
delta 64
zcmeC<@8jnU@MdNaVc_84V33%-Xd`bk6SKtZMVluxeTOi5SsfWcB9kw&nS*I=c6%`G
H%kBsOHO~^;

delta 64
zcmeC<@8jnU@MdNaVc_84U^uq2b|Y^y6Z5f^wVNk1eTOi5SsfWcB9kw&nS*I=c6%`G
H%kBsOnYb2Z

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/labeling/.DslLabelProvider.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/labeling/.DslLabelProvider.xtendbin
index d81311b19acb1d1aa40b85052071776cf3557a3a..ef1bf6b1d9321b5dce0ad8d85d696d8b0fb6c165 100644
GIT binary patch
delta 64
zcmX>sbXbTtz?+#xgn@&DgF#~UqK&*g%*+zA7j2%yYy)B3W?R7s5}Dk_VGgDbaM*)s
HCQe5HPqGt#

delta 64
zcmX>sbXbTtz?+#xgn@&DgW=f9+Ks$D%*@AD)^47|Yy)B3W?R7s5}Dk_VGgDbaM*)s
HCQe5Hvzr$Q

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/outline/.DslOutlineTreeProvider.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/outline/.DslOutlineTreeProvider.xtendbin
index a6a2e39cd0a76a8875ab4d9f8b9336c7ef8d8ee4..272077d13f463d3be823b2444910723041ed968d 100644
GIT binary patch
delta 64
zcmey$`<0hBz?+#xgn@&DgF#~UqK&+DOw1Cq7j5oiN`^4LusAY;L?&CXnS<#fHhVC=
Hh0PHFR~!?d

delta 64
zcmey$`<0hBz?+#xgn@&DgW=f9+Ks$*Ow7kt)^6@&N`^4LusAY;L?&CXnS<#fHhVC=
Hh0PHFy9F02

diff --git a/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/quickfix/.DslQuickfixProvider.xtendbin b/org.framed.iorm.editpolicydsl.ui/xtend-gen/org/framed/iorm/editpolicydsl/ui/quickfix/.DslQuickfixProvider.xtendbin
index d846d5153e8bbca5aa9df0da32ac4c616393b047..69082563a8cf5f01cf4c4f47098adb457e6a1934 100644
GIT binary patch
delta 64
zcmcc2dzqIvz?+#xgn@&DgF#~UqK&-SOw1Cq7j3R)3V|>#u{bh<L?(-|nS<#7HhVBV
HiOmrJHZ~HU

delta 64
zcmcc2dzqIvz?+#xgn@&DgW=f9+Ks%~Ow7kt)^4t53V|>#u{bh<L?(-|nS<#7HhVBV
HiOmrJnjaP^

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/.DslRuntimeModule.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/.DslRuntimeModule.xtendbin
index 7e3dd95056e62fa5b8db1cc9325ba54fac664bed..2026d1706c9d15216d1f645e7bd74acd5193a004 100644
GIT binary patch
delta 64
zcmeC@?dRnU@MdNaVc_84U=W+VXd|yK6SLUtMVoDz{2+`z7Dq;q$mC0`=3ttK%^pnq
Hu{i<&0lE=*

delta 64
zcmeC@?dRnU@MdNaVc_84U^ud}b|bGY6Z4UkwVQ33{2+`z7Dq;q$mC0`=3ttK%^pnq
Hu{i<&Wup}W

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/.DslStandaloneSetup.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/.DslStandaloneSetup.xtendbin
index 29421d2ac8ab9bb9dd99991769ddbe8c877e3a5b..3850c9ca13003fcf4c4c3564d2db1d7dfc42e84a 100644
GIT binary patch
delta 64
zcmaFH|BRnEz?+#xgn@&DgF$TeqK&)>%*<l57i}(Jwqyb`*05GFf*6xE+0DUpGP^yP
IUdrwW06eP_-T(jq

delta 64
zcmaFH|BRnEz?+#xgn@&DgW<@^+Ks#k%*;nt)^09fwqyb`*05GFf*6xE+0DUpGP^yP
IUdrwW0HBl>XaE2J

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/formatting2/.DslFormatter.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/formatting2/.DslFormatter.xtendbin
index 2e85ff0a63dcc74ee1216bd686f5e83dc32ccf40..0378a27a78be2680e1d2d5c9de68ca46ad18cf65 100644
GIT binary patch
delta 64
zcmca9c2kTuz?+#xgn@&DgF$TeqK&-$EX-oF7j2%;@}C*ZSjh2%5yY50hszvHU*oa|
I(-Pc{0DL19(f|Me

delta 64
zcmca9c2kTuz?+#xgn@&DgF$=d#ErcDEX>+7CvKk4@}C*ZSjh2%5yY50hszvHU*oa|
I(-Pc{0Degn-T(jq

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/generator/.DslGenerator.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/generator/.DslGenerator.xtendbin
index 3890e9883a0ea0d4d266e4bfcb4be9e363f6a1bf..274537cd1ddcb6815e77c5d664385e356f6da5dd 100644
GIT binary patch
delta 64
zcmcaAbybQtz?+#xgn@&DgF$TeqK&*f?95`b7j2edU&{<;oZ&jj2x3g0!D9}lFY(xe
IX%SvW07yF%cmMzZ

delta 64
zcmcaAbybQtz?+#xgn@&DgMn{V?M7Z6c4od+wVP$w*D`|{XShx>f*6x$@R)<?OFZ^q
IT7=gT05%H}!~g&Q

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/scoping/.DslScopeProvider.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/scoping/.DslScopeProvider.xtendbin
index 5af6f6719df6d31d504ee27d155e69491590afc4..36a73fc2e0cc4176fb1567e4f70317a7e5596470 100644
GIT binary patch
delta 64
zcmdnayPcOez?+#xgn@&DgF$TeqK&-4Ow3}l7i~^v3V<-Su{bh<L?-`YH3!osZ1!Nf
HjLi`MD?Spo

delta 64
zcmdnayPcOez?+#xgn@&DgW<@^+Ks%yOw31C)^1K_3V<-Su{bh<L?-`YH3!osZ1!Nf
HjLi`Mk0%yD

diff --git a/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/validation/.DslValidator.xtendbin b/org.framed.iorm.editpolicydsl/xtend-gen/org/framed/iorm/editpolicydsl/validation/.DslValidator.xtendbin
index a5541dd3a73c2120af8484f02eb204d1ce15b133..53af2c8def45966333c988734dbd0e6e46c05624 100644
GIT binary patch
delta 64
zcmZ3+yNs7Nz?+#xgn@&DgF$TeqK&-fOw3}l7j1TDiiR+jvN$q=L?*vvH3!qmZ1!L}
HmCX?V7kCmQ

delta 64
zcmZ3+yNs7Nz?+#xgn@&DgW<@^+Ks&COw31C)^2uZiiR+jvN$q=L?*vvH3!qmZ1!L}
HmCX?Vdtnu=

diff --git a/org.framed.iorm.ui/core/standardPolicies.editpolicy b/org.framed.iorm.ui/core/standardPolicies.editpolicy
index eef06cef..3b7f10c4 100644
--- a/org.framed.iorm.ui/core/standardPolicies.editpolicy
+++ b/org.framed.iorm.ui/core/standardPolicies.editpolicy
@@ -1,5 +1,9 @@
 <?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="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Playable_by_Defining_Compartment"/>
+    <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="CompartmentType"/>
+  </policies>
   <policies action="Add" actionType="Fulfillment">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Playable_by_Defining_Compartment"/>
     <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
@@ -23,6 +27,10 @@
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartment_Behavior"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
+  <policies action="Add_Property" actionType="CompartmentType">
+    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
+    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
+  </policies>
   <policies action="Create_Property" actionType="RoleType">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Role_Properties"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -35,6 +43,10 @@
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartment_Behavior"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
+  <policies action="Add_Property" actionType="RoleType">
+    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
+    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
+  </policies>
   <policies action="Add" actionType="Relationship">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Relationships"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -46,6 +58,13 @@
       <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
     </constraintRule>
   </policies>
+  <policies actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Naturals"/>
+    <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
+      <rules xsi:type="Editpolicymodel:IsSourceType" type="NaturalType"/>
+      <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
+    </constraintRule>
+  </policies>
   <policies action="Add" actionType="Fulfillment">
     <featureRule xsi:type="Editpolicymodel:IsFeature"/>
     <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
@@ -53,6 +72,13 @@
       <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
     </constraintRule>
   </policies>
+  <policies actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature"/>
+    <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
+      <rules xsi:type="Editpolicymodel:IsSourceType" type="RoleType"/>
+      <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
+    </constraintRule>
+  </policies>
   <policies action="Add" actionType="Fulfillment">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartments"/>
     <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
@@ -65,10 +91,26 @@
       </rules>
     </constraintRule>
   </policies>
+  <policies actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartments"/>
+    <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
+      <rules xsi:type="Editpolicymodel:AndConstraintRule">
+        <rules xsi:type="Editpolicymodel:IsSourceType" type="CompartmentType"/>
+        <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
+      </rules>
+      <rules xsi:type="Editpolicymodel:NotConstraintRule">
+        <rule xsi:type="Editpolicymodel:SourceEqualsTarget"/>
+      </rules>
+    </constraintRule>
+  </policies>
   <policies action="Add" actionType="Fulfillment">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Dates"/>
     <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="DataType"/>
   </policies>
+  <policies actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Dates"/>
+    <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="DataType"/>
+  </policies>
   <policies action="Add" actionType="RelationshipExclusion">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -113,21 +155,13 @@
       <rules xsi:type="Editpolicymodel:SourceEqualsTargetType"/>
     </constraintRule>
   </policies>
-  <policies action="Add" actionType="Fulfillment">
+  <policies action="Add" actionType="RoleType">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
-      <rules xsi:type="Editpolicymodel:NotConstraintRule">
-        <rule xsi:type="Editpolicymodel:OrConstraintRule">
-          <rules xsi:type="Editpolicymodel:IsTargetType" type="Group"/>
-          <rules xsi:type="Editpolicymodel:IsSourceType" type="Group"/>
-        </rule>
-      </rules>
-      <rules xsi:type="Editpolicymodel:IsTargetType" type="CompartmentType"/>
-    </constraintRule>
+    <constraintRule xsi:type="Editpolicymodel:InCompartment"/>
   </policies>
-  <policies action="Add" actionType="RoleType">
+  <policies actionType="RoleType">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="Editpolicymodel:IsStepIn"/>
+    <constraintRule xsi:type="Editpolicymodel:InCompartment"/>
   </policies>
   <policies action="Add" actionType="CompartmentType">
     <featureRule xsi:type="Editpolicymodel:NotFeatureRule">
@@ -142,6 +176,12 @@
       </rules>
     </constraintRule>
   </policies>
+  <policies action="Add" actionType="CompartmentType">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartment_Types"/>
+    <constraintRule xsi:type="Editpolicymodel:NotConstraintRule">
+      <rule xsi:type="Editpolicymodel:InCompartment"/>
+    </constraintRule>
+  </policies>
   <policies action="Add" actionType="Relationship">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:AndConstraintRule">
@@ -149,16 +189,14 @@
       <rules xsi:type="Editpolicymodel:IsSourceType" type="RoleType"/>
     </constraintRule>
   </policies>
-  <policies action="Add" actionType="CompartmentType">
-    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartment_Types"/>
-    <constraintRule xsi:type="Editpolicymodel:NotConstraintRule">
-      <rule xsi:type="Editpolicymodel:InCompartment"/>
-    </constraintRule>
-  </policies>
   <policies action="Add" actionType="DataType">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Dates"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
+  <policies actionType="DataType">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Dates"/>
+    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
+  </policies>
   <policies action="Add" actionType="RoleGroup">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Group_Constraints"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -171,10 +209,6 @@
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
-  <policies actionType="Fulfillment">
-    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
-  </policies>
   <policies actionType="CompartmentType">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -195,10 +229,6 @@
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
-  <policies actionType="RoleType">
-    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
-  </policies>
   <policies actionType="NaturalType">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
@@ -211,18 +241,22 @@
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
-  <policies actionType="DataType">
-    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
-    <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
-  </policies>
   <policies action="Start" actionType="Inheritance">
     <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
     <constraintRule xsi:type="Editpolicymodel:TrueConstraintRule"/>
   </policies>
   <policies action="Start" actionType="Fulfillment">
-    <featureRule xsi:type="Editpolicymodel:TrueFeatureRule"/>
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Compartments"/>
+    <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="CompartmentType"/>
+  </policies>
+  <policies action="Start" actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Naturals"/>
     <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="NaturalType"/>
   </policies>
+  <policies action="Start" actionType="Fulfillment">
+    <featureRule xsi:type="Editpolicymodel:IsFeature"/>
+    <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="RoleType"/>
+  </policies>
   <policies action="Start" actionType="Fulfillment">
     <featureRule xsi:type="Editpolicymodel:IsFeature" featureName="Dates"/>
     <constraintRule xsi:type="Editpolicymodel:IsSourceType" type="DataType"/>
diff --git a/org.framed.iorm.ui/modules/datatype/simpleExample.editpolicy b/org.framed.iorm.ui/modules/datatype/simpleExample.editpolicy
deleted file mode 100644
index 9ebf384b..00000000
--- a/org.framed.iorm.ui/modules/datatype/simpleExample.editpolicy
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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://www.example.org/editpolicymodel" xsi:schemaLocation="http://www.example.org/editpolicymodel editpolicymodel.ecore"/>
diff --git a/org.framed.iorm.ui/src/org/framed/iorm/ui/FRaMEDDeleteConnectionFeature.java b/org.framed.iorm.ui/src/org/framed/iorm/ui/FRaMEDDeleteConnectionFeature.java
index 8e06c2c0..cc54c23f 100644
--- a/org.framed.iorm.ui/src/org/framed/iorm/ui/FRaMEDDeleteConnectionFeature.java
+++ b/org.framed.iorm.ui/src/org/framed/iorm/ui/FRaMEDDeleteConnectionFeature.java
@@ -73,7 +73,7 @@ public class FRaMEDDeleteConnectionFeature extends DefaultDeleteFeature {
 		//Step 1
 		Relation relation = (Relation) getBusinessObjectForPictogramElement(deleteContext.getPictogramElement());
 		for(FRaMEDConnectionPattern framedConnectionPattern :  connectionPatterns) {
-			if(relation.getType() == framedConnectionPattern.getModelType())
+			if(relation != null && framedConnectionPattern  != null && relation.getType() == framedConnectionPattern.getModelType())
 				framedConnectionPattern.delete(this, deleteContext);
 		}	
 		//Step 2
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 d767d6ba..39b44bb9 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
@@ -1,6 +1,9 @@
 package org.framed.iorm.ui.editPolicy;
 
 import org.eclipse.graphiti.features.context.impl.AddConnectionContext;
+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.Diagram;
 import org.eclipse.graphiti.mm.pictograms.Shape;
@@ -16,6 +19,7 @@ import Editpolicymodel.FalseConstraintRule;
 import Editpolicymodel.InCompartment;
 import Editpolicymodel.IsSourceType;
 import Editpolicymodel.IsStepIn;
+import Editpolicymodel.IsTargetType;
 import Editpolicymodel.NotConstraintRule;
 import Editpolicymodel.OrConstraintRule;
 import Editpolicymodel.SourceEqualsTarget;
@@ -80,19 +84,39 @@ public class ConstraintRuleVisitor {
 			return !this.isStepOut;
 		}
 		if(rule instanceof InCompartment) {
-			AddCompartmentTypeContext  ctx = (AddCompartmentTypeContext) context;
-			ctx.getModelToLink().getParent();
+			org.framed.iorm.model.Shape parent = null;
+			if(this.context instanceof AddCompartmentTypeContext) {
+				AddCompartmentTypeContext  ctx = (AddCompartmentTypeContext) context;
+				parent = ctx.getModelToLink().getParent();
+			} else if(this.context instanceof AddContext) {
+				AddContext  ctx = (AddContext) context;
+				Diagram contextDiagram = (Diagram)ctx.getTargetContainer();
+				if(contextDiagram.getName().startsWith("compartmentType"))
+					return true;
+				System.out.println("wrong diagram InCompartment(): " + contextDiagram.getName());
+				return false;
+			} else if(this.context instanceof CreateContext) {
+				CreateContext  ctx = (CreateContext) context;
+				Diagram contextDiagram = (Diagram)ctx.getTargetContainer();
+				if(contextDiagram.getName().startsWith("compartmentType"))
+					return true;
+				System.out.println("wrong diagram InCompartment(): " + contextDiagram.getName());
+				return false;
+			} else {
+				System.out.println("wrong context InCompartment(): " + this.context.getClass());
+				return false;
+			}
 
 			String parentDiagramName = null;
 			try {
-				parentDiagramName = ctx.getModelToLink().getParent().getContainer().getParent().getName();
+				parentDiagramName = parent.getContainer().getParent().getName();
 			} catch (Exception e) {}
 			Diagram myDiagram = this.getDiagramWithName(parentDiagramName, this.diagram);
 			if(myDiagram == null)
 				return false;
-			//System.out.println("MYDIAGRAM: " + myDiagram.getName() + ", " + ctx.getModelToLink().getParent().getName() +", " + ctx.getModelToLink().getParent().getName());
+			//System.out.println("MYDIAGRAM: " + myDiagram.getName() + ", " + parent.getName() +", " + parent.getName());
 
-			if(myDiagram.getName().equals("compartmentType"))
+			if(myDiagram.getName().startsWith("compartmentType"))
 				return true;
 
 			return false;
@@ -119,8 +143,8 @@ public class ConstraintRuleVisitor {
 			return sourceEqualsTargetVisitor((SourceEqualsTarget)rule);
 		}
 		
-		if(rule instanceof IsSourceType) {
-			return isSourceTypeVisitor((IsSourceType)rule);
+		if(rule instanceof IsTargetType) {
+			return isTargetTypeVisitor((IsTargetType)rule);
 		}
 		
 		if(rule instanceof ContainsCompartment) {
@@ -138,7 +162,7 @@ public class ConstraintRuleVisitor {
 		System.out.println("checkRule for " + rule.getClass().toString() + " not implemented");
 		return true;
 	}
-	
+		
 	private boolean andRuleVisitor(AndConstraintRule rule) {
 		for(ConstraintRule abstractRule : rule.getRules()) {
 			if(!checkRule(abstractRule))
@@ -148,17 +172,23 @@ public class ConstraintRuleVisitor {
 	}
 	
 	private boolean isSourceTypeVisitor(IsSourceType rule) {
-		//System.out.println("class is: " + this.context.getClass());
-		try {
-			AddConnectionContext ctx = (AddConnectionContext) this.context;
-			Anchor sourceAnchor = ctx.getSourceAnchor();
-			ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
-			return rule.getType().getLiteral().equals(source.getType().getLiteral());
-		} catch(Exception e) {
-			System.out.println("failed isSourceType: " + e.getMessage());
+		Anchor sourceAnchor = this.getSourceAnchorFromContext(this.context);
+		if(sourceAnchor == null) {
+			System.out.println("failed isSourceType() sourceAnchor== null,  this.context: " + this.context.toString());
+			return false;
 		}
-		
-		return false;
+		ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
+		return rule.getType().getLiteral().equals(source.getType().getLiteral());
+	}
+	
+	private boolean isTargetTypeVisitor(IsTargetType rule) {
+		Anchor anchor = this.getTargetAnchorFromContext(this.context);
+		if(anchor == null) {
+			System.out.println("failed isTargetType() anchor== null,  this.context: " + this.context.toString());
+			return false;
+		}
+		ModelElement source = UIUtil.getModelElementForAnchor(anchor);
+		return rule.getType().getLiteral().equals(source.getType().getLiteral());
 	}
 	
 	private boolean containsCompartmentVisitor(ContainsCompartment rule) {
@@ -168,26 +198,51 @@ public class ConstraintRuleVisitor {
 	
 	private boolean sourceEqualsTargetVisitor(SourceEqualsTarget rule) {
 		//System.out.println("class is: " + this.context.getClass());
-		AddConnectionContext ctx = (AddConnectionContext) this.context;
-			Anchor sourceAnchor = ctx.getSourceAnchor();
-			ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
+		Anchor sourceAnchor = this.getSourceAnchorFromContext(this.context);
+		ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
 			
-			Anchor targetAnchor = ctx.getTargetAnchor();
-			ModelElement target = UIUtil.getModelElementForAnchor(targetAnchor);
+		Anchor targetAnchor = this.getTargetAnchorFromContext(this.context);
+		ModelElement target = UIUtil.getModelElementForAnchor(targetAnchor);
+		
+		if(targetAnchor == null || sourceAnchor == null)
+			return false;
+
+		System.out.println("sourceEqualsTargetVisitor comparison: " + source.hashCode()  + " == " + target.hashCode());
 
-			System.out.println("sourceEqualsTargetVisitor comparison: " + source.hashCode()  + " == " + target.hashCode());
+		return source.hashCode() == target.hashCode();		
+	}
 
-			return source.hashCode() == target.hashCode();		
+	private Anchor getSourceAnchorFromContext(Object context) {
+		Anchor sourceAnchor = null;
+		if(this.context instanceof AddConnectionContext) {
+			AddConnectionContext ctx = (AddConnectionContext) this.context;
+			sourceAnchor = ctx.getSourceAnchor();
+		} else if(this.context instanceof CreateConnectionContext) {
+			CreateConnectionContext ctx = (CreateConnectionContext) this.context;
+			sourceAnchor = ctx.getSourceAnchor();
+		}
+		return sourceAnchor;
 	}
 
+	private Anchor getTargetAnchorFromContext(Object context) {
+		Anchor anchor = null;
+		if(this.context instanceof AddConnectionContext) {
+			AddConnectionContext ctx = (AddConnectionContext) this.context;
+			anchor = ctx.getTargetAnchor();
+		} else if(this.context instanceof CreateConnectionContext) {
+			CreateConnectionContext ctx = (CreateConnectionContext) this.context;
+			anchor = ctx.getTargetAnchor();
+		}
+		return anchor;
+	}
+	
 	private boolean sourceEqualsTargetTypeVisitor(SourceEqualsTargetType rule) {
 		//System.out.println("class is: " + this.context.getClass());
 		try {
-			AddConnectionContext ctx = (AddConnectionContext) this.context;
-			Anchor sourceAnchor = ctx.getSourceAnchor();
+			Anchor sourceAnchor = this.getSourceAnchorFromContext(this.context);
 			ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
 			
-			Anchor targetAnchor = ctx.getTargetAnchor();
+			Anchor targetAnchor = this.getTargetAnchorFromContext(this.context);
 			ModelElement target = UIUtil.getModelElementForAnchor(targetAnchor);
 
 			System.out.println("sourceEqualsTargetTypeVisitor comparison: " + source.getType().getLiteral()  + " == " + target.getType().getLiteral());
diff --git a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/EditPolicyHandler.java b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/EditPolicyHandler.java
index d2f565d8..07cf5f01 100644
--- a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/EditPolicyHandler.java
+++ b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/EditPolicyHandler.java
@@ -39,8 +39,9 @@ public class EditPolicyHandler {
 	}
 	
 	public void updateConfig(List<Editpolicymodel.Model> models, FRaMEDConfiguration config) {
+		System.out.println("updating Config: ");
 		//parse all editpolicies to create list with activated policies
-		//load all rules which are activated by current configuration
+		//load all constraints which are activated by current configuration
 		activatedPolicies = new LinkedList<>();
 
 		FeatureRuleVisitor featureRuleVisitor = new FeatureRuleVisitor(config); 
@@ -48,9 +49,12 @@ public class EditPolicyHandler {
 			for(Editpolicymodel.Policy policy : model.getPolicies()) {
 				if(featureRuleVisitor.checkRule(policy.getFeatureRule())) {
 					activatedPolicies.add(policy); 
+					System.out.println("policyAdded: " + policy.getFeatureRule().toString());
+
 				}
 			}
 		}
+		
 	}
 	
 	/**
@@ -62,6 +66,9 @@ public class EditPolicyHandler {
 	private List<ConstraintRule> getConstraints(ActionEnum action, Type type) {
 		List<ConstraintRule> rules = new LinkedList<>();
 		
+		if(type == null)
+			return rules;
+		
 		for(Policy policy: this.activatedPolicies) {
 			if(policy.getAction().getValue() == action.getValue() && policy.getActionType().getLiteral().equals(type.getLiteral()))
 				rules.add(policy.getConstraintRule());
diff --git a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/FeatureRuleVisitor.java b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/FeatureRuleVisitor.java
index 36bd28c9..84113431 100644
--- a/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/FeatureRuleVisitor.java
+++ b/org.framed.iorm.ui/src/org/framed/iorm/ui/editPolicy/FeatureRuleVisitor.java
@@ -71,7 +71,7 @@ public class FeatureRuleVisitor {
 
  		for (FRaMEDFeature feature : this.configuration.getFeatures()) {
  			features.add(feature.getName().getName());
- 			//System.out.println("EditPolicyHandler featureEnabled: " + feature.getName().getName());
+ 			System.out.println("EditPolicyHandler featureEnabled: " + feature.getName().getName());
  		}
 
  		if(features.contains(rule.getFeatureName().getName())) {
diff --git a/org.framed.iorm.ui/src/org/framed/iorm/ui/subeditors/FRaMEDFeatureEditor.java b/org.framed.iorm.ui/src/org/framed/iorm/ui/subeditors/FRaMEDFeatureEditor.java
index 9d187f29..8a51c623 100644
--- a/org.framed.iorm.ui/src/org/framed/iorm/ui/subeditors/FRaMEDFeatureEditor.java
+++ b/org.framed.iorm.ui/src/org/framed/iorm/ui/subeditors/FRaMEDFeatureEditor.java
@@ -176,6 +176,9 @@ public class FRaMEDFeatureEditor extends EditorPart {
 	 * @param featureModel the feature model to instantiate the configuration with
 	 */
 	private void loadConfiguration(Model rootModel, IFeatureModel featureModel) {
+		if(rootModel == null) {
+			return;
+		}
 	    FRaMEDConfiguration framedConfiguration = rootModel.getFramedConfiguration();
 	    configuration = new Configuration(featureModel);
 	    configuration.getPropagator().update();
@@ -277,6 +280,8 @@ public class FRaMEDFeatureEditor extends EditorPart {
 	 * updates the labels text and color if the configuration is valid or not
 	 */
 	 private void updateInfoLabel() {
+		 if(configuration == null)
+			 return;
 		 Boolean valid = configuration.isValid();
 		 infoLabel.setText(valid ? "VALID Configuration" : "INVALID Configuration");
 		 infoLabel.setForeground(valid ? COLOR_VALID_CONFIGURATION : COLOR_INVALID_CONFIGURATION);
@@ -288,6 +293,8 @@ public class FRaMEDFeatureEditor extends EditorPart {
 	private void updateTree() {
 	    tree.removeAll();
 	    final TreeItem root = new TreeItem(tree, 0);
+	    if(configuration == null)
+	    	return;
 	    final SelectableFeature rootFeature = configuration.getRoot();
 		root.setText(configuration.getRoot().getName());
 	    root.setData(configuration.getRoot());
-- 
GitLab