From 2cfc407234b89136712ca242cea37fdf898aad78 Mon Sep 17 00:00:00 2001 From: tkuehn <thomas.kuehn3@tu-dresden.de> Date: Wed, 13 Jun 2018 21:19:59 +0200 Subject: [PATCH] Fixed InterRelationship constraints, by fixing canCreate, canStart, and corresponding EditPolicies --- ...actInterRelationshipConstraintPattern.java | 4 +- .../InterRelationship.ecl | 16 ++--- .../InterRelationship.editpolicy | 64 ++++++++++++++++--- 3 files changed, 66 insertions(+), 18 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 4b7bc607..98aadb15 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 @@ -159,7 +159,7 @@ public abstract class AbstractInterRelationshipConstraintPattern extends FRaMEDC org.framed.iorm.model.ModelElement targetConnection = UIUtil.getModelElementForAnchor(targetAnchor); if(sourceConnection != null && targetConnection != null) { if(sourceConnection.getContainer() == targetConnection.getContainer()) { - return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.modelType); + return EditPolicyService.getHandler(this.getDiagram()).canCreate(createContext, this.getModelType()); } } return false; @@ -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, sourceConnection.getType() ); + return EditPolicyService.getHandler(this.getDiagram()).canStart(createContext, this.getModelType() ); } return false; } diff --git a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.ecl b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.ecl index 6d084323..241aab42 100644 --- a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.ecl +++ b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.ecl @@ -1,10 +1,10 @@ //InterRelationship -Start RelationshipExclusion (Inter_Relationship_Constraints) when true; -Add RelationshipExclusion (Inter_Relationship_Constraints) when true; -Reconnect RelationshipExclusion (Inter_Relationship_Constraints) when true; -Create RelationshipExclusion (Inter_Relationship_Constraints) when true; +Start RelationshipExclusion (Inter_Relationship_Constraints) when IsSourceType(Relationship); +Add RelationshipExclusion (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); +Reconnect RelationshipExclusion (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); +Create RelationshipExclusion (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); -Start RelationshipImplication (Inter_Relationship_Constraints) when true; -Add RelationshipImplication (Inter_Relationship_Constraints) when true; -Reconnect RelationshipImplication (Inter_Relationship_Constraints) when true; -Create RelationshipImplication (Inter_Relationship_Constraints) when true; +Start RelationshipImplication (Inter_Relationship_Constraints) when IsSourceType(Relationship); +Add RelationshipImplication (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); +Reconnect RelationshipImplication (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); +Create RelationshipImplication (Inter_Relationship_Constraints) when IsSourceType(Relationship) and SourceEqualsTargetType() and !SourceEqualsTarget(); diff --git a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.editpolicy b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.editpolicy index 2a11004b..e185a8e1 100644 --- a/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.editpolicy +++ b/org.framed.iorm.ui/modules/relationship/inter_relationship_constraints/InterRelationship.editpolicy @@ -2,34 +2,82 @@ <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="RelationshipExclusion"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> </policies> <policies action="Add" actionType="RelationshipExclusion"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> <policies action="Reconnect" actionType="RelationshipExclusion"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> <policies actionType="RelationshipExclusion"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> <policies action="Start" actionType="RelationshipImplication"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> </policies> <policies action="Add" actionType="RelationshipImplication"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> <policies action="Reconnect" actionType="RelationshipImplication"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> <policies actionType="RelationshipImplication"> <featureRule xsi:type="editpolicymodel:IsFeature" featureName="Inter_Relationship_Constraints"/> - <constraintRule xsi:type="editpolicymodel:TrueConstraintRule"/> + <constraintRule xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:AndConstraintRule"> + <rules xsi:type="editpolicymodel:IsSourceType" type="Relationship"/> + <rules xsi:type="editpolicymodel:SourceEqualsTargetType"/> + </rules> + <rules xsi:type="editpolicymodel:NotConstraintRule"> + <rule xsi:type="editpolicymodel:SourceEqualsTarget"/> + </rules> + </constraintRule> </policies> </editpolicymodel:Model> -- GitLab