# Alternative Transformation Methods

We provide multiple implementations for the CPS-to-Deployment M2M transformation. The variants differ from each other in at least one characteristics to support comparison and evaluation. Characteristics include:

- execution mode (batch or incremental)

- used technologies (Xtend, VIATRA, other transformation tools)

- model traversal vs. event-driven transformation

- execution on partially transformed model

The detailed description of each variant can be found on their corresponding wiki page.

### Variants

These implementations will be created under the transformations folder in the repository and under the `org.eclipse.viatra.query.examples.cps.xfrom.m2m.<id>` namespace.

#### Batch

1. Xtend (`id = batch.simple`)

   - Details here

2. Xtend + VIATRA Query (`id = batch.eiq`)

   - Details here

3. VIATRA Batch API (`id = batch.viatra`)

   - Details here

#### Incremental

For the incremental alternatives, a differentiating factor is the method to identify changes in the source model which must be synchronized to the target ("dirty flag")

1. Direct notification (`id = incr.direct`)

   - dirty: EMF adapter/IQBase

2. Explicit traceability (`id = incr.expl`)

   - dirty: traceability model state

   - Details here

3. Query result traceability (`id = incr.qrt`)

   - dirty: query result bookmarking, traceability saved in deltamonitor

   - Details here

4. Partial batch transformation (`id = incr.aggr`)

   - dirty: consider query results as notifications/events, low level change aggregation (transform bigger parts)

   - advanced: notifications independent of source model, transformation may run in background

   - Details <<Partial-batch-M2M-transformation#,here>

5. Change-driven transformations (`id = incr.cdt`)

   - dirty: EVM activation life-cycle

6. VIATRA EMF-based transformation API (`id = incr.viatra`)

   - Details here

### Summary

We currently implemented the above mentioned different variants (if you know VIATRA Query well you may argue that the LS based should be considered as a separate one :-) ) for this transformation and in the future might add some additional ones built on our technology stack. However, we would like to invite variants using other transformation tools. Since the demonstrator is open source, this may involve users of other tools or even submitted as a case to the Transformation Tool Contest.