The Edapt Solution for the Reengineering Case
=============================================

Constituents of the Solution
----------------------------

The solution has the following directory structure:

- src: Java implementations of custom migrations
- description: contains the descriptions of the case and the solution
- models: contains the test models and launch configurations
  * the test models are the models that come with the case
  * a launch configuration that applies the history model on the test model
- reference: the migrated models which are provided as a reference
- solution: contains the solution to the case consisting of
  * the metamodels required for the transformation
  * the history model which specifies the transformation


Running the Solution
--------------------
  
To perform the transformation, you just need to right-click on the launch configuration 
and select "Run As -> <LaunchConfigName>" in the context menu. Alternatively you
can select "Run -> Run Configurations ..." in the menu and select the appropriate
launch configuration.


Inspecting the Solution
-----------------------

The history model is best inspected by opening the corresponding ecore file. 
As explained in the solution paper, the history is shown below the current 
metamodel version.

The history model can be inspected using the following functions:
- The "Reconstruction View" provides a live reconstruction of the metamodel 
  version after the operation selected in the history model.
- The integrity of the history model can be checked by selecting
  "Edapt->Check Integrity" on the history element.
- Custom migrations can be inspected by selecting "Edapt->Edit Custom Migration"
  in the context menu on the custom migration.
  
  
Changing the Solution
---------------------

The solution can be changed using the following functions:
- The "Operation Browser" can be used to execute additional reusable coupled 
  operations.
- Pressing "Converge" in the "Operation Browser" allows to select the target 
  metamodel version to which the currently open metamodel version should 
  converge.
- Operations can be reordered by simply dragging them.
- Selecting "Edapt->Undo Changes" on an operation in the context menu allows to 
  undo the operation.
- Selecting "Edapt->Replace primitive changes with operation" on a sequence of 
  primitive changes opens a dialog to select the reusable coupled operation by 
  which the primitive changes need to be replaced.
- Reusable and custom coupled operations can be reduced to the corresponding 
  primitive metamodel changes by selecting "Edapt->Flatten Composite".
- A custom coupled operation can be introduced by selecting
  "Edapt->Attach Custom Migration to Changes" on the metamodel changes to 
  which a custom migration should be attached.


Thanks for trying out Edapt.
If you have problems, do not hesitate to contact me (herrmama@in.tum.de).
