| <html> | |
| <head> | |
| <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
| <title>Creating Metamodel Bindings</title> | |
| <link href="book.css" rel="stylesheet" type="text/css"> | |
| <meta content="DocBook XSL Stylesheets V1.75.1" name="generator"> | |
| <link rel="home" href="index.html" title="OCL Documentation"> | |
| <link rel="up" href="ProgrammersGuide.html" title="Classic Ecore/UML Programmers Guide"> | |
| <link rel="prev" href="Persistence.html" title="OCL Persistence"> | |
| <link rel="next" href="ImpactAnalyzer.html" title="Incrementally Re-Evaluating OCL Expressions Using the Impact Analyzer"> | |
| </head> | |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
| <h1 xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">Creating Metamodel Bindings</h1> | |
| <div class="section" title="Creating Metamodel Bindings"> | |
| <div class="titlepage"> | |
| <div> | |
| <div> | |
| <h2 class="title" style="clear: both"> | |
| <a name="AdvancedMetamodelBindings"></a>Creating Metamodel Bindings</h2> | |
| </div> | |
| </div> | |
| </div> | |
| <p>The Eclipse OCL component provides a generic specification of the OCL Abstract Syntax Model | |
| plus bindings for two popular Eclipse metamodels: Ecore and UML. Users of the OCL API | |
| can likewise create bindings for their metamodels, to integrate OCL with their modeling | |
| languages.</p> | |
| <p>The | |
| <a class="ulink" href="http://download.eclipse.org/ocl/javadoc/6.1.0/org/eclipse/ocl/Environment.html" target="_new"> | |
| <code class="code">Environment</code> | |
| </a> interface has a generic type signature with several parameters, representing the metamodeling | |
| constructs required by OCL, that it borrows from UML, EMOF, and the other metamodels that | |
| it targets. The Javadoc for that interface defines the mappings, and the same type parameter | |
| names are used consistently throughout the OCL API. | |
| </p> | |
| <p> | |
| </p> | |
| <div class="mediaobject"> | |
| <img src="images/5180-bindings.png"></div> | |
| <p> | |
| </p> | |
| <p>To provide a metamodel binding, a client must provide implementations of the following interfaces:</p> | |
| <div class="itemizedlist"> | |
| <ul class="itemizedlist" type="disc"> | |
| <li class="listitem"> | |
| <p> | |
| <code class="code">Environment</code> and | |
| <code class="code">EnvironmentFactory</code>, supplying suitable substitutions for the generic type parameters. Note that not all of these are actually required; for example, Ecore does not have the concept of | |
| <code class="code">State</code>, so it just substitutes | |
| <code class="code">EObject</code> | |
| </p> | |
| </li> | |
| <li class="listitem"> | |
| <p> | |
| <code class="code">EvaluationEnvironment</code> for accessing properties of run-time instances of models | |
| </p> | |
| </li> | |
| <li class="listitem"> | |
| <p> | |
| <code class="code">UMLReflection</code> for introspecting models (instances of thetarget metamodel) | |
| </p> | |
| </li> | |
| <li class="listitem"> | |
| <p> | |
| <code class="code">OCLStandardLibrary</code>, providing the instances of the metamodel’s | |
| <code class="code">Classifier</code> metaclass that implement the OCL Standard Library types | |
| </p> | |
| </li> | |
| <li class="listitem"> | |
| <p> | |
| <code class="code">OCLFactory</code>, providing a factory for all of the metaclasses of the Abstract Syntax Model | |
| </p> | |
| </li> | |
| </ul> | |
| </div> | |
| <p>This last item, above, necessitates furthermore that the metamodel binding provide a | |
| concrete specialization of the Abstract Syntax Model (in its entirety) that mixes in the | |
| target metamodel’s correspondents of the UML | |
| <code class="code">Classifier</code> and | |
| <code class="code">TypedElement</code> metaclasses. The former is required to provide | |
| compatibility of the metaclasses in the OCL | |
| <code class="code">Types</code> with the | |
| target metamodel’s type system. The latter is required for compatibility of the metaclasses | |
| in the OCL | |
| <code class="code">Expressions</code> package with the target metamodel’s | |
| typed elements. | |
| </p> | |
| <div class="section" title="The OCL Abstract Syntax Model"> | |
| <div class="titlepage"> | |
| <div> | |
| <div> | |
| <h3 class="title"> | |
| <a name="TheOCLAbstractSyntaxModel"></a>The OCL Abstract Syntax Model</h3> | |
| </div> | |
| </div> | |
| </div> | |
| <p>The following diagram summarizes the metaclasses of the OCL | |
| <code class="code">Types</code> package: | |
| </p> | |
| <p> | |
| </p> | |
| <div class="mediaobject"> | |
| <img src="images/5180-ocltypes.png"></div> | |
| <p> | |
| </p> | |
| <p>The following diagram summarizes the call expression metaclasses of the OCL | |
| <code class="code">Expressions</code> package: | |
| </p> | |
| <p> | |
| </p> | |
| <div class="mediaobject"> | |
| <img src="images/5180-callexp.png"></div> | |
| <p> | |
| </p> | |
| <p>The following diagram summarizes the literal expression metaclasses of the OCL | |
| <code class="code">Expressions</code> package: | |
| </p> | |
| <p> | |
| </p> | |
| <div class="mediaobject"> | |
| <img src="images/5180-literalexp.png"></div> | |
| <p> | |
| </p> | |
| <p>The following diagram summarizes the remaining metaclasses of the OCL | |
| <code class="code">Expressions</code> package: | |
| </p> | |
| <p> | |
| </p> | |
| <div class="mediaobject"> | |
| <img src="images/5180-miscexp.png"></div> | |
| <p> | |
| </p> | |
| </div> | |
| </div> | |
| </body> | |
| </html> |