visibility ruleset ruleSetName(parameters) { rules declarations }
where:
Each parameter is of the form:
direction name : type
where:
The ruleset statement defines the signature of a ruleset, as well as the contained rules.
The name of a ruleset must be unique within its package, and should not collide with a text template or a Java type.
It must match the name of the file in which it is defined:
a ruleset ModelTransformation
must be defined in a ModelTransformation.mqr
file.
The ruleset may define expected parameters, that will be accessible to each rule of the ruleset. Any caller of the ruleset must provide matching arguments.
This will generate a Java source file for each Class contained in a UML 2.1 model:
package com.mycompany.example; // expects a loaded UML 2.1 model as input public ruleset GenerateAllJavaClasses(in model : uml21) { public rule generate() { // loop on each Class of the UML 2.1 model foreach (class in model.getInstances("Class")) { // calls the text template GenerateJavaClass $GenerateJavaClass(class); } } }
This will add a super class to each Class of a UML 2.1 model:
package com.mycompany.example; // Expects a loaded UML 2.1 model as input // The model is modified and may be saved once the evaluation is completed public ruleset CreateUMLModel(inout model : uml21) { public rule main() { // creates a new Class superClass = model.create("Class"); superClass.name = "SampleSuperClass"; // loop on each Class of the UML 2.1 model foreach (class in model.getInstances("Class")) { // makes the class to inherit from superClass if (class != superClass) @addGeneralization(class, superClass) { } } private rule addGeneralization(class : uml21.Class, superClass : uml21.Class) { generalization = model.create("Generalization"); generation.child = class; generalization.parent = superClass; generalization.namespace = class.namespace; } }