## Requirements

To use the plug-in you need:

- JDK 1.5 or above
- Eclipse Helios (Version: 3.6)
- Modeling plug-ins = EMF, JET, Acceleo, QVTo, ATL.

## Install MoDiscoWorkflow

### Sources

You will find a version of this plug-in in the SVN repository.

Connection parameters to the SVN repository: MoDisco/SVN.

Here are deployment instructions :

- Import the project in your workspace using a SVN client.
- Use the "export" menu to export this project as a plug-in (Deployable plug-ins and fragments) in your Eclipse installation. Don't forget to choose the "Package plug-ins as individual jar archives" option.
- Re-start your Eclipse to take this plug-in into account.

### Runtime

You could download it or use the update manager. See more ...

### Dependencies errors

Because MoDisco Workflow has a driver mechanism to manage external components, each driver has a dependency to one handled component. To install a dedicated driver properly, the handled component shall have been installed. It is a reason why when you click on the "Install..." button, you can have dependency errors. In that case, you could install the missing packages at the origin of the errors or deselect the dedicated driver. Then restart the installation process.

Example of dependencies errors

If you didn't have dependency errors, click on the "Finish" button. The installation of the MoDiscoWorkflow plug-in and its selected drivers is finished. Congratulations!

## Build your MoDiscoWorkflow

### The user interface of MoDiscoWorkflow

To reach the MoDiscoWorkflow plug-in user interface, you have to click on this button and then click on the “Run Configuration” menu.

Main interface of MoDiscoWorkflow launch configuration

You can now build your MoDiscoWorkflow. Various properties are proposed to you:

- Add a MoDiscoWork in the MoDiscoWorkflow from the “New…” button
- Edit a MoDiscoWork from the “Edit…” button
- Remove a MoDiscoWork from the “Remove” button
- Move a MoDiscoWork up in the MoDiscoWorkflow using the “Up” button
- Move a MoDiscoWork down in the MoDiscoWorkflow using the “Down” button
- Load a MoDiscoWork in the MoDiscoWorkflow from the “Load…” button

#### Additional features of MoDiscoWorkflow

This component provides a simple workflow engine (only sequential, no parameters binding, etc.). However, it provides also an extension point to be able to plug other workflow engines, like MWE (Modeling Workflow Engine), even if the hmi doesn't reflect external features. It provides also export capabilities:

- to get the model used to represent the workflow (internal model or if it exist the model used by workflow engine)
- to get a basic implementation of a discoverer using the workflow definition, and/or workflow engine.

Engine selection and export capabilities of MoDiscoWorkflow launch configuration

During an export of current workflow definition as a discoverer project, a plug-in project has been created in eclipse workspace and populated using available informations. It reproduces the behaviour of current workflow definition with discoverer capabilities (contextual menu, specific launch configuration, etc.). However, user still have to modify the plug-in project to be able to use generic parameters and not those statically defined in workflow. A complete example will come soon.

An overview of plug-in project created from workflow informations.

#### Common tab

As other launch configurations, users are able to save these configuration as an external file, or configure usage ...

Common tab of MoDiscoWorkflow launch configuration

### Create a MoDiscoWork

After having clicked on the "New..." button, you must choose the type of workflow item you want to add. According to the installed drivers, you have more or less choice.

Choice of type for the workflow item

After choosing the type of MoDiscoWork, click on the "Next" button to configure your transformation. For the example, if we have chosen "Java Application", you can configure your MoDiscoWork of java type as you do usually in main dialog of launch configuration. Finally, the new configuration will be created and added in list of launch configurations and in current MoDisco workflow.

### Edit a MoDiscoWork

To edit a MoDiscoWork, click on the “Edit…” button after selecting the desired MoDiscoWork. A new wizard opens to configure the selected MoDiscoWork as you do usually in main dialog of launch configuration.

### Remove a MoDiscoWork

Remove a MoDiscoWork from the MoDiscoWorkflow

To remove a MoDiscoWork, you must select a MoDiscoWork in the MoDiscoWorkflow and click on the "Delete" button. A new window opens proposing these various choices:

- "Delete from launcher": To delete the MoDiscoWork selected in the MoDiscoWorkflow and its associated launcher.
- "Delete from workflow": To delete the MoDiscoWork selected in the MoDiscoWorkflow
- Cancel: To cancel

### Load a MoDiscoWork

Load a MoDiscoWork item from list of existing launch configurations

When you want to load a launcher (which is also a MoDisco workflow item) in the MoDiscoWorkflow, click on the "Load…" button. A new window opens proposing every launcher present in the launch configuration dialog which has a driver defined for the type of launcher. To add it in the workflow, select a launcher and click on the “Finish” button.

### Run your MoDiscoWorkflow

When you finished building your MoDiscoWorkflow, click on the “Run” button. An error window opens if one or more MoDiscoWork are not valid. Every MoDiscoWork must be valid to run the MoDiscoWorkflow.

## Add a driver in MoDiscoWorkflow for a type of launch configuration

### "driver" extension point

"driver" extension point architecture

The MoDiscoWorkflow plug-in proposes an extension point named "driver". This extension point contains a "driverUI" part and an "execution" part. The "id" field is required. It allows binding both extension points.

#### "driverUI" part

This part defines:

- A field name: This name will be used to the list of transformation types.
- A field icon: It’s driver icon path.
- A field class: The class which has to implement this interface: "org.eclipse.gmt.modisco.workflow.DriverInterface".

#### "execution" part

This part defines:

- A field class: The class which has to implement this interface: "org.eclipse.gmt.modisco.workflow.ExecutionInterface"

### Papyrus driver example

In this example, we are creating a new driver for launcher of papyrus. Follow these steps:

- Create a new plug-in project
- Name this project "org.eclipse.gmt.modisco.driver.papyrus"
- Add the "com.cea.papyrus.extensionpoints.transformation" plug-in to the list of plug-ins required for the operation of this plug-in (dependencies)
- Create a class ("LaunchDriverPapyrus.java") which implements the interface "org.eclipse.gmt.modisco.workflow.DriverInterface" (below).
- Create a class ("TransformationExecute.java") which implements the interface "org.eclipse.gmt.modisco.workflow.ExecutionInterface" (below).
- Add a new extension named "org.eclipse.gmt.driver"
- Name the "id" field of extension point "idPapyrus"
- For the "driverUI" point extension:
  - Name the "name" field "Papyrus Generation"
  - Indicate the papyrus icon's path in the plug-in
  - Indicate the class which implements the interface "org.eclipse.gmt.modisco.workflow.DriverInterface"
- For the "execution" point extension:
  - Indicate the class which implements the interface "org.eclipse.gmt.modisco.workflow.ExecutionInterface"

Driver Papyrus example ("driverUI" extension point)

Driver Papyrus example ("extension" extension point)

<source lang="java"> package org.eclipse.gmt.modisco.workflow.driver.papyrus.ui;

import java.util.List;

import org.eclipse.gmt.modisco.workflow.DriverInterface; import org.eclipse.gmt.modisco.workflow.driver.papyrus.Constant; import org.eclipse.gmt.modisco.workflow.ui.common.MoDiscoWorkParameter;

public class LaunchDriverPapyrus implements DriverInterface {

@Override public String getTypeLaunchConfig() { return "com.cea.papyrus.extensionpoints.transformation.launchConfigurationType"; } } </source>

The "com.cea.papyrus.extensionpoints.transformation.launchConfigurationType" string is the papyrus launcher type. The launcher type is present in the ".launch" file. This file is created during the creation of a new launcher of this type

<source lang="java"> package org.eclipse.gmt.modisco.workflow.driver.papyrus.execution;

import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.gmt.modisco.workflow.ExecutionInterface; import com.cea.papyrus.extensionpoints.transformation.launch.LaunchTransformationDelegate;

public class TransformationExecute implements ExecutionInterface {

@Override public void launch(ILaunchConfigurationWorkingCopy configuration, ILaunch launch) { try { LaunchTransformationDelegate delegate = new LaunchTransformationDelegate(); delegate.launch(configuration,ILaunchManager.RUN_MODE, launch,new NullProgressMonitor()); } catch (CoreException e) { e.printStackTrace(); } } } </source>

It is necessary to use the delegate to execute the configuration.

## Add a workflow engine in MoDiscoWorkflow

To extend capability of MoDiscoWorkflow, users are able to provide other workflow engines through extension point mechanism.

### "engine" extension point

"engine" extension point definition

The MoDiscoWorkflow plug-in proposes an extension point named "engine". This extension point allows to connect any plug-in representing a type of workflow. It means a workflow engine, configured through "workflowExecution", and a workflow item defintion configured through "workflowCore" to bridge internal representation with MoDiscoWorkflow representation.

#### "workflowExecution" part

This part defines:

- A field class: The class which has to implement this interface: "org.eclipse.gmt.modisco.workflow.WorkflowExecutionInterface". It will bridge MoDiscoWorkflow definition with internal execution engine to run specified workflow.

#### "workflowCore" part

This part defines:

- A field name: This name to describe the workflow engine
- A field class: The class which has to implement this interface: "org.eclipse.gmt.modisco.workflow.WorkflowModelInterface". It will bridge internal representation from MoDiscoWorkflow representation.

## Current limitations

Right now, it's not possible to bind the parameters between components. Furthermore, the workflow is executed in a sequential way.

## Wishlist

- Use the engine of MWE to launch a workflow.
- Use the last version of MWE in MoDiscoWorkflow.

Category:MoDisco

### Updating This Document

This document is maintained in a collaborative wiki. If you wish to update or modify this document please visit http://wiki.eclipse.org/MoDisco/Components/Workflow/Documentation/0.8