EMF-IncQuery Validation Framework
EMF-IncQuery provides facilities to create validation rules based on the pattern language of the framework. These rules can be evaluated on various EMF instance models and upon violations of constraints, markers are automatically created in the Eclipse Problems View.
Example use case
The following scenario describes and illustrates the way to use the framework for validation purposes (see also the BPMN example):
- Create an EMF-IncQuery project with some patterns
- Annotate some pattern with the @Constraint annotation - these will be the constraints. In particular, these patterns will be treated as queries that find the violations of the contraint.
- Add the generated .validation project to your run configuration (along with the base EMF-IncQuery plug-in)
- Initialize the validation framework on some instance model; use the UI context menu on an EMF editor to do so.
- Upon constraint violation markers will be placed in the Problems view. Note that the markers are data-bound to corresponding model elements and the labels will be automatically refreshed (when the model changes).
The @Constraint annotation can be used to mark an eiq pattern as a validation rule. If the framework finds at least one pattern with such annotation, an additional .validation project will be generated. This project will be used by the validation framework later in your runtime Eclipse configuration.
- location: The location of constraint represents the pattern parameter (the object) the constraint violation needs to be attached to.
- message: The message to display when the constraint violation is found. The message may refer the parameter variables between $ symbols, or their EMF features, such as in $Param1.name$.
- severity: "warning" or "error"
- targetEditorId: An Eclipse editor ID where the validation framework should register itself to the context menu. Use "*" as a wildcard if the constraint should be used always when validation is started.
Generated validation plug-in
The generated .validation project will create a subclass of
org.eclipse.incquery.validation.runtime.Constraint for each one of the patterns annotated with @Constraint.
Example and useful resources
- Please see the BPMN example which demonstrates the usage of the @Constraint annotation.
org.eclipse.incquery.validation.runtime.ConstraintViolationclasses demonstrate the usage of the generated validation code inside the validation framework.
ConstraintAdapter and ConstraintViolation highlights
The validation framework collects all of the Constraints that applies to the constraint extension point schema (defined under org.eclipse.incquery.validation.runtime/schema/constraint.exsd). These constraints are initialized on the loaded instance models and upon constraint violation an appropriate error marker is placed in the runtime Eclipse's Problems View.
First for each collected constraint and instance model a ConstraintAdapter is created which will maintain the match set of the pattern (annotated with @Constraint); these matches are constraint violations, that the user needs to be informed about. For each match of the pattern a ConstraintViolation is instantiated, which is responsible for marker creation/update/deletion.
The ConstraintViolation class uses data binding facilities to register the appropriate callback methods on the location objects of the Constraint, this will result in marker text update when an attribute of some location object is modified.