Definition of the extensible environment API for OCL parsing and evaluation.

Package Specification

This package defines the API for the environments in which OCL expressions are parsed and evaluated, along with the parser façade.

First, and most importantly to users of the OCL parser API, parsing of OCL documents is performed by the {@link org.eclipse.ocl.OCL} parser façade. OCL documents are provide as {@link org.eclipse.ocl.OCLInput} objects, obtaining their content from a string or a data stream. These documents declare constraints of the following forms in one or more classifier, operation, or property contexts (with optional package context declarations):

These constraints are defined within the context of a particular OCL instance; thus the OCL defines a root environment. Disparate sets of constraints (including additional operations and properties) may be defined in multiple different OCLs. The constraints and {@link org.eclipse.ocl.expressions.OCLExpression}s parsed by an OCL may be checked (in the case of constraints) or evaluated (in the case of expressions) by the OCL on a context element, an instance of the metamodel supported by that OCL's environment factory.

The {@link org.eclipse.ocl.helper.OCLHelper} interface provides a convenient API for parsing constraints and query expressions on a finer granularity than the document. It is particularly convenient for parsing end evaluating constraints that are embedded in models, in which the context is usually defined by the placement of the constraint. The OCL helper also provides content-assist (expression completion) facilities.

The {@link org.eclipse.ocl.Environment} interface describes the environment in which an OCL expression is parsed. The environment provides two major functions to the parser:

Environments are created by environment factories. An {@link org.eclipse.ocl.EnvironmentFactory} is provided to an {@link org.eclipse.ocl.OCL} to create environments when it needs to. Environment factories are the starting point for plugging an EMF-based metamodel into the parser framework. The environments that they create provide the bindings for the generic types representing the UML concepts required by OCL, and perform introspection of the particular metamodel. Abstract partial implementations of the factory and environment are provided and may be extended by clients to support their metamodels. Existing concrete implementations of the environment API may be found in the {@link org.eclipse.ocl.ecore} package (for the OCL binding to Ecore) and the {@link org.eclipse.ocl.uml} package (for the OCL binding to UML).

While the {@link org.eclipse.ocl.Environment} class provides a parse-time environment, the {@link org.eclipse.ocl.EvaluationEnvironment} keeps track of the current values of variables in the evaluation of an OCL expression. It also implements the metamodel-specific mechanisms for invoking operations, navigating properties, etc. The EnvironmentFactory is responsible for constructing EvaluationEnvironments. For evaluating OCL constraints, the {@link org.eclipse.ocl.EvaluationVisitor} walks the AST (parsed representation of an OCL expression), using the evaluation environment to compute values. The {@link org.eclipse.ocl.AbstractEnvironmentFactory} creates a useful default implementation of the evaluation visitor, which supports any metamodel binding. The behavior of this default implementation may be modified as need by custom environment factories, by wrapping it with a custom visitor.

@see org.eclipse.ocl.OCL @see org.eclipse.ocl.EnvironmentFactory @see org.eclipse.ocl.Environment @see org.eclipse.ocl.helper