blob: 8de6e63821f0c8e68103f2e7ea2c3cbde06c1f35 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<!--
/******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
-->
</head>
<body>
Implementation of an OCL binding for the <tt>UML</tt> metamodel.
<h2>Package Specification</h2>
<p>
This package defines an OCL {@linkplain org.eclipse.ocl.Environment environment}
implementation for the <tt>UML</tt> metamodel. Clients can use an
{@link org.eclipse.ocl.uml.UMLEnvironmentFactory} in conjunction with the
{@link org.eclipse.ocl.uml.OCL} class to parse and evaluated OCL constraints
on UML models.
</p>
<p>
Clients may extend the environment implementation to support custom requirements,
such as overriding the
{@link org.eclipse.ocl.Environment#lookupOperation} and
{@link org.eclipse.ocl.EvaluationEnvironment#callOperation}
methods to inject custom operations into existing metaclasses (to provide
Java implementations, rather than defining additional operations using OCL).
</p>
<h3>OCL Parsing on Various Modeling Levels</h3>
<p>
The parser environments created by the UML environment factory support OCL
expressions at both the metamodel (M2) and user model (M1) levels. For
user model constraints, use the classifier in the model as the context
classifier in invocations of th {@link org.eclipse.ocl.uml.OCL} or an
{@link org.eclipse.ocl.helper.OCLHelper} created by it. For metamodel OCL
(used, for example, to query the user model, itself) use the metaclass of any
kind of element in the user model as the context classifier. A convenient way
to obtain this metaclass is via the
{@link org.eclipse.ocl.uml.util.OCLUMLUtil#getMetaclass(org.eclipse.uml2.uml.Element)}
method.
</p>
<h3>Evaluation of OCL Expressions in the UML Environment</h3>
<p>
The {@link org.eclipse.ocl.uml.UMLEvaluationEnvironment} provides support for
two implementations of M0 (run-time instance) models, depending on the kind
of object provided as the evaluation context:
{@link org.eclipse.uml2.uml.InstanceSpecification}s and
{@link org.eclipse.emf.ecore.EObject}s. If the context object is an instance
specification, then the extents of classes are considered to be the
<code>InstanceSpecification</code>s in the model that reference them or their
subclasses as classifiers. If the context object is an <code>EObject</code>,
then the extents of classes are considered to be the <code>EObject</code>s in
the resource set that reference {@link org.eclipse.emf.ecore.EClass}es
corresponding to the UML model classes, as described below.
</p>
<h4>Evaluation on Instance Specifications</h4>
<p>
In the case of <code>InstanceSpecification</code>s, navigation of
attributes, associations, and association classes is supported by interpretation
of the values of slots and links (instance specifications of associations and
association classes). The only operations that can be evaluated are those
that are defined by the OCL Standard Library or via additional operation
definition constraints, unless a client provides a subclass of the
{@link org.eclipse.ocl.uml.UMLEvaluationEnvironment} with Java implementations
of any required operations.
</p>
<h4>Evaluation on EObjects</h4>
<p>
In the case of <code>EObject</code>s, navigation of
attributes and associations is supported by the <code>EObject</code> reflection
API. Navigation of association classes is not available, as the UML2 code
generation does not support them (EMF having no comparable concept).
The operations that can be evaluated are those that are defined by the OCL
Standard Library or via additional operation definition constraints, plus any
that are generated (usually all) to the corresponding
{@link org.eclipse.emf.ecore.EClass}es.
</p>
<p>
The evaluation of OCL on <code>EObject</code>s assumes that a corresponding
Ecore representation of the UML model exists and can be found in EMF's
package registry (either globally or at the <code>ResourceSet</code> level).
This is the case for any UML model from which code was generated and for
UML <code>Profile</code>s, which are associated with Ecore definitions. In
the latter case, as well as the case of ad hoc UML-to-Ecore conversions using
the {@link org.eclipse.uml2.uml.util.UMLUtil} API, the use of dynamic
<code>EObject</code>s naturally restricts the availability of operations at
evaluation time.
</p>
@see org.eclipse.ocl.uml.OCL
@see org.eclipse.ocl.uml.UMLEnvironmentFactory
@see org.eclipse.ocl.uml.UMLEnvironment
@see org.eclipse.ocl.uml.UMLEvaluationEnvironment
@see org.eclipse.ocl.uml.util.OCLUMLUtil#getMetaclass(org.eclipse.uml2.uml.Element)
</body>
</html>