Skip to content
Snippets Groups Projects
Commit 5324f91d authored by nullsub's avatar nullsub
Browse files

update constraint checker for all rules

parent d53424fa
No related branches found
No related tags found
No related merge requests found
Showing
with 158 additions and 65 deletions
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
<?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"/>
......
<?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"/>
......@@ -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
......
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) {
org.framed.iorm.model.Shape parent = null;
if(this.context instanceof AddCompartmentTypeContext) {
AddCompartmentTypeContext ctx = (AddCompartmentTypeContext) context;
ctx.getModelToLink().getParent();
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) {
......@@ -148,18 +172,24 @@ 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();
Anchor sourceAnchor = this.getSourceAnchorFromContext(this.context);
if(sourceAnchor == null) {
System.out.println("failed isSourceType() sourceAnchor== null, this.context: " + this.context.toString());
return false;
}
ModelElement source = UIUtil.getModelElementForAnchor(sourceAnchor);
return rule.getType().getLiteral().equals(source.getType().getLiteral());
} catch(Exception e) {
System.out.println("failed isSourceType: " + e.getMessage());
}
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) {
System.out.println("containsCompartmentVisitor: TODO, implement!: " + this.diagram.getChildren().toString());
......@@ -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();
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);
if(targetAnchor == null || sourceAnchor == null)
return false;
System.out.println("sourceEqualsTargetVisitor comparison: " + 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());
......
......@@ -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());
......
......@@ -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())) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment