== Overview ==
The goal of the SimpleTransformationsChain plug-in is gathering the [[MoDisco#Infrastructure|infrastructure]] and [[MoDisco#Technologies|technologies]] plug-ins and providing orchestration of these plug-ins. These additional facilities reuse the features offered by the other plug-ins in order to allow performing more elaborate operations and complex tasks, such as directly generating a UML model from a Java project. It also provides an additional feature trying to detect bidirectional associations in target UML model.

''Quality disclaimer: this discoverer is provided without any guarantee: it was only tested on a small number of projects of relatively small sizes. It may not be suitable for production environments.''

==Quick Start Guide==

After discovery of your application, you will obtain a UML model. This model could be imported in some usual modelers like [http://www.eclipse.org/modeling/mdt/papyrus/ Papyrus] from the Modeling project.

[[Image:../img/MoDisco_simpletransformationschain_tutorial_PetStore_UML_inModelBrowser.png|frame|center|An example of UML model discovered from the famous Pet Store application]]

==Contextual menu==

The SimpleTransformationsChain plugin offers simple Eclipse contextual actions to dynamically launch the additionally provided features.

You can launch the "Discover UML model from Java project" action from a Java project by right-clicking on the corresponding Java project (in your workspace) and then selecting the appropriate action under '''Discovery > Discoverers''' in the provided contextual menu:

[[Image:../img/MoDisco_DiscoverUMLfromJavaProject_menu.png|frame|center|Contextual menu populated with MoDisco entries]]

==Launch configuration==

The SimpleTransformationsChain plugin is registered with the "discoverer" extension point, so in launch configurations, you are able to create a discoverer launcher dedicated to a project:

Open the launch configurations:

[[Image:../img/MoDisco_Run_RunConfigurations.png|frame|center|Launch Configurations...]]

Create a new '''MoDisco Discovery''' launch configuration, and select the discoverer "discoverUMLModelWithBidirectionalAssociationsFromProject" from the drop-down list:

[[Image:../img/MoDisco_LaunchConfigs_selectDiscoverUmlModelWithBidiAssocFromProject.png|frame|center|Select the discoverer]]

Then, select your project in the "Source element" field:

[[Image:../img/MoDisco_LaunchConfig_SelectSourceProject.png|frame|center|Selecting a source project]]

And finally, click '''Run''' to start the discovery.

==Description==

To illustrate the SimpleTransformationsChain plug-in, we will use a sample inspired from the [http://java.sun.com/developer/technicalArticles/J2EE/petstore/ Pet Store Application].

== Setup ==

Sources of the Pet Store application are  available here: http://www.oracle.com/technetwork/java/petstore1-3-1-02-139690.html

You may have to download several libraries to obtain an eclipse project without errors (JPA, JTA, JSF-apis and Servlets-jsp-apis).
A complete bundle is also available from [http://www.mia-software.com/html/miaStudio/download/modisco/examples/javapetstore-2.0-ea5.zip Mia-Software...]
To view this application in your Eclipse workspace, you will have to extract the content of this archive, and use the "import" wizard (import project in workspace).

== Get UML model of Pet Store application ==

We will explain different ways to obtain the UML model; it will demonstrate how several simple steps have been combined to build a complex task : discover a UML model from a java project.

===Basic way===

There are several tools that are each able to perform a specific task; we will see how each task works.

====Get the java model====

* Open the '''Run configurations...''' dialog.
* Then, press the "New" button to create a configuration of type "MoDisco Discovery".
* Enter a name for this configuration, "PetStore reverse to Java model" for example. 
* Select the discoverer named "org.eclipse.modisco.java.discoverer.project".
* Enter the path to the project containing the PetStore application in the "Source element" field.
* Set SERIALIZE_TARGET to true

[[Image:../img/MoDisco_Run_Configurations_PetStore_reverseJava.png|frame|center|Java Discoverer configuration]]

Finally, press the '''Run''' button to get the Java model.

You could also use the the contextual menu (right click) when the project containing the Pet Store application is selected. Select '''Discovery > Discoverers > Discover Java Project''':

[[Image:../img/MoDisco_DiscoverJavaProject_Menu.png|frame|center|Menu to discover a Java project]]

[[Image:../img/MoDisco_simpletransformationschain_PetStore_JavaXMI_inModelBrowser.png|frame|center|The Java model, with a focus on the SimpleCaptcha class.]]

==== Get the KDM model  ====

Using the ATL transformation [https://dev.eclipse.org/svnroot/modeling/org.eclipse.mdt.modisco/plugins/trunk/org.eclipse.modisco.java.discoverer/src/org/eclipse/modisco/java/discoverer/internal/resources/transformations/javaToKdm.atl javaToKdm], we will transform the Java model into a KDM model. We have to define another configuration to perform this transformation:

* Open the '''Run configurations...''' dialog
* Press the "New" button to create a configuration of type '''ATL Transformation'''
* Enter a name for this configuration, "Java to Kdm transformation" for example
* Select the ATL module in your workspace, "/Transformations/JavaToKdm.atl" for example
* Select metamodel URIs from the EMF Registry (<nowiki>http://www.eclipse.org/MoDisco/Java/0.2.incubation/java</nowiki> and <nowiki>http://www.eclipse.org/MoDisco/kdm/action</nowiki>)
* '''Note''': the source metamodel parameter must be named "java" and the source model parameter must be named "IN", otherwise the transformation won't work
* Select the source model ("_java.xmi" file) in your workspace, and enter a path for your target model ("_kdm.xmi" file).

[[Image:../img/MoDisco_simpletransformationschain_tutorial_Run_Configurations-JavaToKDM.png|frame|center|configuration of the Java to Kdm ATL Transformation]]

Finally, press the '''Run''' button to get the KDM model. 

You could also use the the contextual menu (right click) when the Java model of the Pet Store application is selected: '''Discovery > Discoverers > Discover KDM model from Java model'''.

[[Image:../img/MoDisco_PetStore_kdm_xmi_inModelBrowser.png|frame|center|The KDM model, with a focus on the SimpleCaptcha class.]]

==== Get the UML model====

Using the ATL transformation [https://dev.eclipse.org/svnroot/modeling/org.eclipse.mdt.modisco/plugins/trunk/org.eclipse.modisco.kdm.uml2converter/src/org/eclipse/modisco/kdm/uml2converter/internal/resources/transformations/KDMtoUML.atl KDMtoUML], we will transform the KDM model into a UML model.

We have to define another launch configuration to perform this transformation:

* Open the '''Run configurations...''' dialog
* Press the "New" button to create a configuration of type '''ATL Transformation'''
* Enter a name for this configuration, '''Kdm to Uml transformation''' for example.
* Select the ATL module in your workspace, "/Transformations/KdmToUml.atl" for example.
* Select metamodel URIs from EMF Registry (<nowiki>http://www.eclipse.org/MoDisco/kdm/action</nowiki> and <nowiki>http://www.eclipse.org/uml2/2.1.0/UML</nowiki>)
* '''Note''': the source metamodel parameter must be named "kdm", and the source model parameter must be named "kdmInput", otherwise the transformation won't work
* Select the source model in your workspace, and enter a path for your target model.

[[Image:../img/MoDisco_simpletransformationschain_tutorial_Run_Configurations_KDMtoUML.png|frame|center|configuration of the Java to Kdm ATL Transformation]]

Finally, press the '''Run''' button to get the UML model.

You could also use the the contextual menu (right click) when the kdm model of the Pet Store application is selected: '''Discovery > Discoverers > Discover UML model from KDM model'''.

[[Image:../img/MoDisco_simpletransformationschain_tutorial_PetStore_UML_inModelBrowser.png|frame|center|The UML model, with a focus on the SimpleCaptcha class.]]

====Initialize a workflow====

To be able to chain previous tasks, MoDisco provides a workflow initializer:

* Open the '''Run configurations...''' dialog
* Pess the '''New''' button to create a configuration of type '''MoDisco Workflow'''.
* Enter a name for this configuration, for example "Discovery of PetStore application".
* Press the '''Load...''' button to successively add configurations "PetStore reverse to Java model", "Java to Kdm transformation" and "Kdm to Uml transformation" (or whatever you named your previous launch configurations).

[[Image:../img/MoDisco_Run_Configurations_DiscoveryOfPetStoreApplication.png|frame|center|The workflow configuration to execute all steps to get a UML model from a java project]]

* Finally, press the '''Run''' button to get the UML model.

This is a first way to get a UML model from a java application. However when parameters change (the selected java application, target UML model, ...), you will have to change the different configurations in order to restore the coherence of all steps, by making sure the input of each step is produced by the previous step.

===The SimpleTransformationsChain way===

* Open the '''Run configurations...''' dialog
* Press the '''New''' button to create a configuration of type '''MoDisco Discoverers'''.
* Enter a name for this configuration, "PetStore reverse to UML model" for example.
* Select Discoverer kind "org.eclipse.modisco.usecase.simpletransformationschain.discovererUMLModelFromProject".
* Enter the path to the PetStore application project
* Set the '''SERIALIZE_TARGET''' parameter to '''true'''

[[Image:../img/MoDisco_Run_Configurations_PetStoreReverseToUMLModel.png|frame|center|SimpleTransformationsChain Discoverer configuration]]

* Finally, press the '''Run''' button to get the UML model.

You could also use the the contextual menu (right click) when the Pet Store application project is selected: '''Discovery > Discoverers > Discover UML model from Java project'''

[[Image:../img/MoDisco_simpletransformationschain_tutorial_PetStore_UML_inModelBrowser.png|frame|center|The UML model, with a focus on the SimpleCaptcha class.]]

==Visualize the UML model==

There are different possibilities for visualizing and exploring the target model.

===Using MoDisco model browser===

The MoDisco model browser displays the model as a tree. It proposes a view of all instances sorted by metaclass, and offers the possibility to visualize all links in the model (whether empty or not, with cardinality, etc.)

* [../../org.eclipse.modisco.infrastructure.doc/mediawiki/model_browser/user.html More details on the MoDisco model browser]

===Using UML2 Tools===

After the installation of UML2 Tools, a component of the Modeling/MDT project, you will be able to initialize class diagrams from the UML model.

[[Image:../img/MoDisco_SimpleCaptchaExample_UMLDiagramView.jpg|center|One UML class diagram, a focus on SimpleCaptcha class.]]

===Using Papyrus===

See [http://www.eclipse.org/modeling/mdt/papyrus/ the Papyrus project page]

==Current limitations==

As this component is an aggregation of existing components, its limitations reflect this architecture: the main limitations come from the [../../../org.eclipse.modisco.infra.omg.doc/mediawiki/kdm/user.html#Current_Limitations KDM to UML converter].

== Team ==

Gabriel Barbier ([http://www.mia-software.com Mia-Software])

== Included Plug-ins ==

* core plug-in : org.eclipse.modisco.usecase.simpletransformationschain
* UI plug-in : org.eclipse.modisco.usecase.simpletransformationschain.ui
