MDT-OCLTools
OCL Tools is a recently added component to the Model Development Tools (MDT) Project aiming at providing first-class support to modelers working with specifications containing expressions written in OCL, the Object Constraint Language. Such support includes editing, refactoring, code generation, execution, and interactive debugging of the OCL constraints given for some underlying (Ecore or UML2) class model. The functionality of OCL Tools builds upon the MDT OCL component, and has been seeded with two initial contributions:
- an OCL -> Java compiler, that as of now takes as input an .ecore and a textual file containing OCL constraints (handling UML2 is in the ToDo list). This compiler extends EMF code generation, producing Java 5 source code with side-effects-free methods for the given OCL invariants, pre- and postconditions, and derived attributes and operations.
- an OCL text editor, supporting usability features such as AutoCompletion, navigation by means of hyperlinks, structured views (for the outline of a document and for the Abstract Syntax Tree of an OCL constraint), among others. Although MDT OCL itself is completely fluent in both Ecore and UML2, only the Ecore binding is supported by the OCL text editor at this time.
A longer intro to OCL Tools can be found in the draft article being reviewed for publication at: https://bugs.eclipse.org/bugs/show_bug.cgi?id=204701
Contents
- 1 OCL Compiler
- 2 User Community
- 3 OCL Text Editor
- 3.1 Features supported
- 3.1.1 Syntax highlighting
- 3.1.2 AutoEdit 1
- 3.1.3 AutoEdit 2
- 3.1.4 Bracket matching
- 3.1.5 Content Assist
- 3.1.6 Current line highlighting and Show range indicator
- 3.1.7 Text Folding
- 3.1.8 Templates, customizable through Preference pages
- 3.1.9 Problem and Warning markers, "red squigglies"
- 3.1.10 Outline view
- 3.1.11 OCL AST View
- 3.1 Features supported
- 4 Related Links
OCL Compiler
What it does
In a nutshell, the compiler translates expressions like that in Listing 1 into what is shown in Listing 2:
context LoyaltyAccount inv invariant_points : self . points > 0 implies self.transactions->exists ( t | t.points > 0 ) |
public boolean invariant_points () { Boolean implies1 = ( this . getPoints () > 0); if (!( implies1 )) { implies1 = Boolean . TRUE ; } else { Boolean exists2 = false ; for ( RandL . Transaction t : org.eclipse.ocl.util.CollectionUtil.asSet ( this . getTransactions ())) { if (!exists2 ) { exists2 = (t.getPoints () > 0); } } implies1 = exists2 ; } return implies1 ; } |
How to use it
Step 1: Prepare an .ocl
file
Step 2: Invoke the compiler
The compiler works ...
Step 3: Java code is ready
How to install
OCL Tools is known to apply to the following versions:
User Community
In order to foster the evolution of OCL Tools, user input is important. If you're using OCL Tools, please add yourself to this list, as a first step towards building a community. Literature reflecting best-practices is also welcome (and somewhat scarce as of now :-)
Fernando Silva Parreiras | http://www.fernando.parreiras.nom.br/ |
Abdelouahed Gherbi | http://www.ece.concordia.ca/ |
OCL Text Editor
The big picture of the editor is:
Features supported
Among others, it supports the following:
Syntax highlighting
AutoEdit 1
Auto-completion of closing brace
AutoEdit 2
Upon typing a colon :
and pressing Enter. A new indented line will be added, letting the
cursor ready for typing the body of the OCL expression.
Bracket matching
Content Assist
Current line highlighting and Show range indicator
Text Folding
Templates, customizable through Preference pages
File:OCLTools editor preference page.png
Problem and Warning markers, "red squigglies"