diff --git a/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl b/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl index 2251f4ea2af5cab0873660ce4b0381d36f82834a..62a4b63d020975cc8f94e9f917b382b8eed46018 100644 --- a/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl +++ b/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl @@ -34,13 +34,37 @@ rule FulfillmentNoRoleGroups fulfillmentFillsRoleGroup(s) and not(s.~features.get("Group_Constraints")) + var fulfillmentsToDelete : OrderedSet(target!Fulfillment); for(fulfillment : target!Fulfillment in s.~transformed) { if(fulfillment.filled.instanceOf(target!RoleGroup)) - delete(fulfillment); - s.~transformed.remove(fulfillment); + fulfillmentsToDelete.add(fulfillment); } + for(fulfillment : target!Fulfillment in fulfillmentsToDelete) { + delete(fulfillment); + s.~transformed.remove(fulfillment); + } } +@lazy +rule FulfillmentWithOutFiller + transform s : source!Relation + to t : Sequence(target!Fulfillment) + extends Fulfillment { + guard : s.target.getType==(source!Type#CompartmentType) + + var fulfillmentsToDelete : OrderedSet(target!Fulfillment); + for(fulfillment : target!Fulfillment in s.~transformed) { + if(fulfillment.filled == null) { + fulfillment.filled.println(); + fulfillmentsToDelete.add(fulfillment); } + + } + for(fulfillment : target!Fulfillment in fulfillmentsToDelete) { + delete(fulfillment); + s.~transformed.remove(fulfillment); + } +} + operation fulfillmentFillsRoleGroup(s: source!Relation):Boolean { for(roles : source!Shape in s.getReferencedRoles) { if(roles.getType==source!Type#RoleGroup) diff --git a/org.framed.iorm.ui/core/rolemodel/RoleModel.etl b/org.framed.iorm.ui/core/rolemodel/RoleModel.etl new file mode 100644 index 0000000000000000000000000000000000000000..949a119b9ccf7f6c1317294fc2b6188b863e305d --- /dev/null +++ b/org.framed.iorm.ui/core/rolemodel/RoleModel.etl @@ -0,0 +1,27 @@ +/** + * The abstract rule for compartment type outside of compartment types + */ +@lazy +rule RoleModel + transform s : source!Shape + to t : target!CompartmentType { + guard : s.getType==(source!Type#CompartmentType) and + not(s.~features.get("Compartment_Types")) and + (s.getContainer().getParent()==null or + not(s.getContainer().getParent().getType()==(source!Type#CompartmentType))) + + //set the transformed target element to ensure the subrule work on the same target and only transform once + if(s.~transformed == null) { + s.~transformed = t; + //set the compartments name + t.name = s.name; + // iterate over all children of the compartment type + if(not(s.getModel() == null)) { + for (elem : source!ModelElement in s.getModel().elements) { + //propagate the features list and and the main model reference to all children + elem.~features = s.~features; + elem.~mainModel = s.~mainModel; + //transform all children + var e = elem.equivalent(); + } } } +} diff --git a/org.framed.iorm.ui/modules/compartment/CompartmentType.etl b/org.framed.iorm.ui/modules/compartment/CompartmentType.etl index d8cfef2aca60cb32dead4669942ad479ba8c5e7d..d986b6480de3821bf19af9fa22112cea5cccc5d9 100644 --- a/org.framed.iorm.ui/modules/compartment/CompartmentType.etl +++ b/org.framed.iorm.ui/modules/compartment/CompartmentType.etl @@ -6,6 +6,7 @@ rule CompartmentType transform s : source!Shape to t : target!CompartmentType { guard : s.getType==(source!Type#CompartmentType) and + s.~features.get("Compartment_Types") and (s.getContainer().getParent()==null or not(s.getContainer().getParent().getType()==(source!Type#CompartmentType))) diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl index ffc775e81395f3c09b3979c2f592e987c14a3782..98af55d60d50fc8cfc21c25fe2ebf3577e7520fa 100644 --- a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl +++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl @@ -10,7 +10,8 @@ rule RoleGroup to t : target!RoleGroup { guard : s.getType==(source!Type#RoleGroup) and s.~features.get("Group_Constraints") //feature Group_Constraints implies feature Role_Constraints (not to check) - + + //set the transformed target element to ensure the subrule work on the same target and only transform once if(s.~transformed == null) { s.~transformed = t; @@ -59,7 +60,7 @@ rule RoleGroupNotTransformed to t : target!RoleGroup { guard : s.getType==(source!Type#RoleGroup) and not(s.~features.get("Group_Constraints")) //feature Group_Constraints implies feature Role_Constraints (not to check) - + //transform children var children = s.`model`; if (not (children == null)) { diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl index d7d57467ea021b4c33904b0754fc59e4c545c1ad..0e059263271da51669019f413098c5ce69bb19df 100644 --- a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl +++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl @@ -9,7 +9,7 @@ rule RoleGroupInCompartmentType to t : target!RoleGroup extends RoleGroup { guard : not(s.getContainer().getParent() == null) and - s.getContainer().getParent().getType==(source!Type#CompartmentType) + s.getContainer().getParent().getType==(source!Type#CompartmentType) //get the crom equivalent to compartment type the role group is in var compartmentType = s.getContainer.getParent().equivalent();