Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "ATL/Model Handlers"

< ATL
(Creating New Model Handler Drivers)
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
In ATL engine terminology, a model handler is a library providing primitives for handling models:
+
In [[ATL]] engine terminology, a model handler is a library providing primitives for handling models:
 
* Creating new models,
 
* Creating new models,
 
* Loading and saving models,
 
* Loading and saving models,
Line 7: Line 7:
 
A model handler driver is a piece of Java code making it possible to use the corresponding model handler with the ATL Virtual Machine.
 
A model handler driver is a piece of Java code making it possible to use the corresponding model handler with the ATL Virtual Machine.
  
The current version of ATL Virtual Machine provides two model handler drivers:
+
The current version of ATL Virtual Machine provides three model handler drivers:
* [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/ emf4atl] to use [http://www.eclipse.org/emf/ Eclipse/EMF] models,
+
* [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.emf4atl/?root=Modeling_Project emf4atl] to use [http://www.eclipse.org/emf/ Eclipse/EMF],
* [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/ mdr4atl] to use [http://mdr.netbeans.org/ Netbeans/MDR] models.
+
* [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.mdr4atl/?root=Modeling_Project mdr4atl] to use [http://mdr.netbeans.org/ Netbeans/MDR].
 +
* [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/?root=Modeling_Project uml24atl] to use [http://www.eclipse.org/uml2/ UML2].
  
 
__TOC__
 
__TOC__
  
== Creating New Model Handler Drivers ==
+
==Creating New Model Handler Drivers==
  
Here is a brief description of the work to be done:
+
Here is a brief description of the work to be done (see CVS Links table below for links to source code):
* Extend [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.vm/src/org/atl/engine/vm/nativelib/ASMModel.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMModel] to implement specific model-level behavior. There are already two examples: [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/src/org/atl/engine/repositories/emf4atl/ASMEMFModel.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMEMFModel] and [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/ASMMDRModel.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMMDRModel].
+
* Extend ASMModel to implement specific model-level behavior. There are already two examples: ASMEMFModel, and ASMMDRModel.
* Extend [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.vm/src/org/atl/engine/vm/nativelib/ASMModelElement.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMModelElement] to implement specific model-element-level behavior. There are already two examples: [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/src/org/atl/engine/repositories/emf4atl/ASMEMFModelElement.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMEMFModelElement] and [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/ASMMDRModelElement.java?rev=HEAD&content-type=text/vnd.viewcvs-markup ASMMDRModelElement].
+
* Extend ASMModelElement to implement specific model-element-level behavior. There are already two examples: ASMEMFModelElement, and ASMMDRModelElement.
* Extend [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.eclipse.engine/src/org/atl/eclipse/engine/AtlModelHandler.java?rev=HEAD&content-type=text/vnd.viewcvs-markup AtlModelHandler] to implement model loading and saving. There are already two examples: [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.eclipse.engine/src/org/atl/eclipse/engine/AtlEMFModelHandler.java?rev=HEAD&content-type=text/vnd.viewcvs-markup AtlEMFModelHandler] and [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/AtlMDRModelHandler.java?rev=HEAD&content-type=text/vnd.viewcvs-markup AtlMDRModelHandler].
+
* Extend AtlModelHandler to implement model loading and saving. There are already two examples: AtlEMFModelHandler, and AtlMDRModelHandler.
* Use the <code>org.atl.eclipse.engine.modelhandler</code> extension point in your plugin.xml to register your model handler driver. There is already one example: [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/plugin.xml?rev=HEAD&content-type=text/vnd.viewcvs-markup mdr4atl plugin.xml]
+
* Use the <code>org.atl.eclipse.engine.modelhandler</code> extension in your plugin.xml to register your model handler driver. There is already one example: mdr4atl plugin.xml.
  
ATL Development Tools strongly depend on [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/ emf4atl], which is consequently built into it.
+
ATL Development Tools strongly depend on emf4atl, which is consequently built into it.
[http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.mdr4atl/ mdr4atl] should rather be used as an example for properly placing Java classes and plugin.xml elements.
+
mdr4atl should rather be used as an example for properly placing Java classes and plugin.xml elements.
  
== When to Create a New Model Handler Driver ==
+
{| border=1
 +
|+ CVS Links
 +
! rowspan=2 | Entity
 +
! colspan=2 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/?root=Modeling_Project M2M/ATL/deprecated] (moved from GMT/ATL CVS)
 +
! colspan=3 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/?root=Modeling_Project M2M/ATL/plugins CVS] (current location)
 +
|-
 +
! [http://www.eclipse.org/emf/ Eclipse/EMF]
 +
! [http://mdr.netbeans.org/ Netbeans/MDR]
 +
! [http://www.eclipse.org/emf/ Eclipse/EMF]
 +
! [http://mdr.netbeans.org/ Netbeans/MDR]
 +
! [http://www.eclipse.org/uml2/ UML2]
 +
|-
 +
! plugin
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.emf4atl/?root=Modeling_Project emf4atl]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.mdr4atl/?root=Modeling_Project mdr4atl]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.emf4atl/?root=Modeling_Project emf4atl]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.mdr4atl/?root=Modeling_Project mdr4atl]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/?root=Modeling_Project uml24atl]
 +
|-
 +
! ASMModel
 +
| colspan=2 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.vm/src/org/atl/engine/vm/nativelib/ASMModel.java?root=Modeling_Project&view=markup ASMModel]
 +
| colspan=3 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.engine.vm/src/org/eclipse/m2m/atl/engine/vm/nativelib/ASMModel.java?root=Modeling_Project&view=markup ASMModel]
 +
|-
 +
! ASM<ModelHandler>Model
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.emf4atl/src/org/atl/engine/repositories/emf4atl/ASMEMFModel.java?root=Modeling_Project&view=markup ASMEMFModel]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/ASMMDRModel.java?root=Modeling_Project&view=markup ASMMDRModel]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/ASMEMFModel.java?root=Modeling_Project&view=markup ASMEMFModel]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.mdr4atl/src/org/eclipse/m2m/atl/drivers/mdr4atl/ASMMDRModel.java?root=Modeling_Project&view=markup ASMMDRModel]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/src/org/eclipse/m2m/atl/drivers/uml24atl/ASMUMLModel.java?root=Modeling_Project&view=markup ASMUMLModel]
 +
|-
 +
! ASMModelElement
 +
| colspan=2 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.vm/src/org/atl/engine/vm/nativelib/ASMModelElement.java?root=Modeling_Project&view=markup ASMModelElement]
 +
| colspan=3 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.engine.vm/src/org/eclipse/m2m/atl/engine/vm/nativelib/ASMModelElement.java?root=Modeling_Project&view=markup ASMModelElement]
 +
|-
 +
! ASM<ModelHandler>ModelElement
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.emf4atl/src/org/atl/engine/repositories/emf4atl/ASMEMFModelElement.java?root=Modeling_Project&view=markup ASMEMFModelElement]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/ASMMDRModelElement.java?root=Modeling_Project&view=markup ASMMDRModelElement]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/ASMEMFModelElement.java?root=Modeling_Project&view=markup ASMEMFModelElement]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.mdr4atl/src/org/eclipse/m2m/atl/drivers/mdr4atl/ASMMDRModelElement.java?root=Modeling_Project&view=markup ASMMDRModelElement]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/src/org/eclipse/m2m/atl/drivers/uml24atl/ASMUMLModelElement.java?root=Modeling_Project&view=markup ASMUMLModelElement]
 +
|-
 +
! AtlModelHandler
 +
| colspan=2 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.eclipse.engine/src/org/atl/eclipse/engine/AtlModelHandler.java?root=Modeling_Project&view=markup AtlModelHandler]
 +
| colspan=3 | [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.engine/src/org/eclipse/m2m/atl/engine/AtlModelHandler.java?root=Modeling_Project&view=markup AtlModelHandler]
 +
|-
 +
! Atl<ModelHandler>ModelHandler
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.eclipse.engine/src/org/atl/eclipse/engine/AtlEMFModelHandler.java?root=Modeling_Project&view=markup AtlEMFModelHandler]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/deprecated/org.atl.engine.repositories.mdr4atl/src/org/atl/engine/repositories/mdr4atl/AtlMDRModelHandler.java?root=Modeling_Project&view=markup AtlMDRModelHandler]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.engine/src/org/eclipse/m2m/atl/engine/AtlEMFModelHandler.java?root=Modeling_Project&view=markup AtlEMFModelHandler]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.mdr4atl/src/org/eclipse/m2m/atl/drivers/mdr4atl/AtlMDRModelHandler.java?root=Modeling_Project&view=markup AtlMDRModelHandler]
 +
| [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/src/org/eclipse/m2m/atl/drivers/uml24atl/AtlUML2ModelHandler.java?root=Modeling_Project&view=markup AtlUML2ModelHandler]
 +
|}
 +
 
 +
==When to Create a New Model Handler Driver==
  
 
In theory, there should be a distinct model handler driver for each model handler, independently of the metamodel that is used.
 
In theory, there should be a distinct model handler driver for each model handler, independently of the metamodel that is used.
Line 32: Line 86:
 
For instance, the [http://www.eclipse.org/uml2/ Eclipse/UML2] plugin implements the UML 2.0 metamodel by using EMF.
 
For instance, the [http://www.eclipse.org/uml2/ Eclipse/UML2] plugin implements the UML 2.0 metamodel by using EMF.
 
However, it seems that UML2 models created with this plugin cannot be handled by EMF without the additional Java code available in the Eclipse/UML2 plugin (see [[ATL_Language_Troubleshooter#UML2_Profiles]] and [http://groups.yahoo.com/group/atl_discussion/message/1201?threaded=1&var=1 this thread]).
 
However, it seems that UML2 models created with this plugin cannot be handled by EMF without the additional Java code available in the Eclipse/UML2 plugin (see [[ATL_Language_Troubleshooter#UML2_Profiles]] and [http://groups.yahoo.com/group/atl_discussion/message/1201?threaded=1&var=1 this thread]).
This means that the UML2 metamodel that is implemented does not strictly follows EMF rules but adds its own rules.
+
This means that the UML2 metamodel that is implemented does not strictly follow EMF rules but adds its own rules.
 
One example is profile and stereotype application: the profile must be applied before the stereotype.
 
One example is profile and stereotype application: the profile must be applied before the stereotype.
 
Such an ordering constraint is beyond EMF semantics.
 
Such an ordering constraint is beyond EMF semantics.
 
For this reason, full support for the [http://www.eclipse.org/uml2/ Eclipse/UML2] plugin can only be properly achieved by adding code specific to this plugin in the model handler driver.
 
For this reason, full support for the [http://www.eclipse.org/uml2/ Eclipse/UML2] plugin can only be properly achieved by adding code specific to this plugin in the model handler driver.
Instead of doing this in [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/ emf4atl], which is metamodel-independant, a uml24atl model handler driver could be developed.
+
Instead of doing this in [http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/ATL/org.atl.engine.repositories.emf4atl/ emf4atl], which is metamodel-independant, the [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org.eclipse.m2m.atl/plugins/org.eclipse.m2m.atl.drivers.uml24atl/?root=Modeling_Project uml24atl] model handler driver has been developed.

Latest revision as of 05:26, 13 December 2010

In ATL engine terminology, a model handler is a library providing primitives for handling models:

  • Creating new models,
  • Loading and saving models,
  • Adding and deleting elements,
  • Reading and writing element properties.

A model handler driver is a piece of Java code making it possible to use the corresponding model handler with the ATL Virtual Machine.

The current version of ATL Virtual Machine provides three model handler drivers:

Creating New Model Handler Drivers

Here is a brief description of the work to be done (see CVS Links table below for links to source code):

  • Extend ASMModel to implement specific model-level behavior. There are already two examples: ASMEMFModel, and ASMMDRModel.
  • Extend ASMModelElement to implement specific model-element-level behavior. There are already two examples: ASMEMFModelElement, and ASMMDRModelElement.
  • Extend AtlModelHandler to implement model loading and saving. There are already two examples: AtlEMFModelHandler, and AtlMDRModelHandler.
  • Use the org.atl.eclipse.engine.modelhandler extension in your plugin.xml to register your model handler driver. There is already one example: mdr4atl plugin.xml.

ATL Development Tools strongly depend on emf4atl, which is consequently built into it. mdr4atl should rather be used as an example for properly placing Java classes and plugin.xml elements.

CVS Links
Entity M2M/ATL/deprecated (moved from GMT/ATL CVS) M2M/ATL/plugins CVS (current location)
Eclipse/EMF Netbeans/MDR Eclipse/EMF Netbeans/MDR UML2
plugin emf4atl mdr4atl emf4atl mdr4atl uml24atl
ASMModel ASMModel ASMModel
ASM<ModelHandler>Model ASMEMFModel ASMMDRModel ASMEMFModel ASMMDRModel ASMUMLModel
ASMModelElement ASMModelElement ASMModelElement
ASM<ModelHandler>ModelElement ASMEMFModelElement ASMMDRModelElement ASMEMFModelElement ASMMDRModelElement ASMUMLModelElement
AtlModelHandler AtlModelHandler AtlModelHandler
Atl<ModelHandler>ModelHandler AtlEMFModelHandler AtlMDRModelHandler AtlEMFModelHandler AtlMDRModelHandler AtlUML2ModelHandler

When to Create a New Model Handler Driver

In theory, there should be a distinct model handler driver for each model handler, independently of the metamodel that is used. For instance, there is one for Eclipse/EMF and one for Netbeans/MDR.

In practice, there are exceptions. For instance, the Eclipse/UML2 plugin implements the UML 2.0 metamodel by using EMF. However, it seems that UML2 models created with this plugin cannot be handled by EMF without the additional Java code available in the Eclipse/UML2 plugin (see ATL_Language_Troubleshooter#UML2_Profiles and this thread). This means that the UML2 metamodel that is implemented does not strictly follow EMF rules but adds its own rules. One example is profile and stereotype application: the profile must be applied before the stereotype. Such an ordering constraint is beyond EMF semantics. For this reason, full support for the Eclipse/UML2 plugin can only be properly achieved by adding code specific to this plugin in the model handler driver. Instead of doing this in emf4atl, which is metamodel-independant, the uml24atl model handler driver has been developed.

Back to the top