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

BPMN2-Modeler/DeveloperTutorials/ExtendingRuntime

The Environment

First verify that BPMN2 plugin is already installed in your Eclipse IDE. I am working with Eclipse Luna and BPMN2 in Version 1.1.1 in this tutorial. Version 1.1.1 of the BPMN Plugin can be installed from here. The BPMN2 Example from Bob Brodt which I used for my own project can be found here.

If you are working with Eclipse Luna the plugin development is much easier as in the early years of Eclipse. So most things can be controlled from the plugin editor and Eclipse will take care about necessary dependencies to the BPMN2 Plugin .

If you install also the BPMN2 Sources you can look around the BPMN 2 implementations which will help sometimes to understand some behavior in the background. Optional you can also import the following plugins into your Eclipse Workspace.

org.eclipse.bpmn2.modeler.core
org.eclipse.bpmn2.modeler.feature
org.eclipse.bpmn2.modeler.runtime.example
org.eclipse.bpmn2.modeler.ui

Create a Plugin project

First of all create a new Eclipse Plugin project. To extend the BPMN Plugin you first need to add some of the necessary dependencies.

Open the plugin.xml with the plugin editor and switch to the ‘dependencies’ tab and add the following bpmn2 and grafiti dependencies:

org.eclipse.bpmn2
org.eclipse.bpmn2.edit
org.eclipse.bpmn2.editor
org.eclipse.bpmn2.core
org.eclipse.bpmn2.ui
org.eclipse.graphiti
org.eclipse.graphiti.ui
org.apache.xerces

The dependencies are added into the MANIFEST.MF File into the section ‘Runtime-Bundle’. This section should look like this:

....
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.emf.ecore;visibility:=reexport,
 org.eclipse.emf.ecore.xmi;visibility:=reexport,
 org.eclipse.graphiti;bundle-version="[0.11.0,0.12.0]",
 org.eclipse.graphiti.ui;bundle-version="[0.11.0,0.12.0]",
 org.eclipse.gef,
 org.eclipse.bpmn2,
 org.eclipse.bpmn2.edit,
 org.eclipse.bpmn2.editor,
 org.eclipse.bpmn2.modeler.core,
 org.eclipse.bpmn2.modeler.ui,
 org.eclipse.emf.transaction,
 org.eclipse.emf.databinding,
 org.eclipse.emf.edit.ui,
 org.eclipse.ui.views.properties.tabbed,
 org.eclipse.jface.databinding,
 org.apache.xerces,
 org.eclipse.core.resources,
 org.eclipse.core.runtime,
 org.eclipse.ui,
 org.eclipse.jdt.core
.....


Creating a new RuntimeExtension

The core element of a BPMN2 Plugin extension is the BPMN2 Runtime Extension. So first of all you need to create a new Class which implements the Interface ‘IBpmn2RuntimeExtension’.

In the RuntimeExtension you need to provide a method for letting the editor know if a bpmn model should be handled by this plugin. This can be done by “peeking” at the contents of the file and checking the targetnamespace. If it not match the namespace of my extension, then I return ‘false’.

Note that the target namespace test does not have to be the only criterion for determining if the model file should be handled by your plugin. This can be as simple or complex as necessary, but care should be taken here since there my be several other bpmn extensions that will need to perform this same test.

This is how my RuntimeExtension will look like so far:

package org.imixs.bpmn.model;

import org.eclipse.bpmn2.modeler.core.IBpmn2RuntimeExtension;
import org.eclipse.bpmn2.modeler.core.LifecycleEvent;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil.Bpmn2DiagramType;
import org.eclipse.bpmn2.modeler.ui.DefaultBpmn2RuntimeExtension.RootElementParser;
import org.eclipse.bpmn2.modeler.ui.wizards.FileService;
import org.eclipse.ui.IEditorInput;
import org.xml.sax.InputSource;

public class ImixsRuntimeExtension implements IBpmn2RuntimeExtension {

 @Override
 public String getTargetNamespace(Bpmn2DiagramType arg0) {
 return "http://www.imixs.org/bpmn2";
 }

 @Override
 public boolean isContentForRuntime(IEditorInput input) {
 InputSource source = new InputSource(FileService.getInputContents(input));
 RootElementParser parser = new RootElementParser("http://www.imixs.org/bpmn2");
 parser.parse(source);
 return parser.getResult();
 }

 @Override
 public void notify(LifecycleEvent arg0) {
 // TODO Auto-generated method stub

 }

}


Define the target runtime Extension point

Now you can add a new runtime Extension point to your plugin. Open the plugin.xml with the Eclipse Plugin Editor and go to the tab ‘extensions’. Here you can add a new extension from the type:

org.eclipse.bpmn2.modeler.runtime

After you added your new extension you can start with the configuration of your extension.

screen01

Click ‘new -> runtime’ to define your runtime Extension. Chose your java class file created before and define a Name and a unique ID. The ID of the runtimeExtension is necessary later!


Test the Plugin

Now you can start a first Test. Just launch your plugin as an Eclipse Application from the plugin.xml Editor. In the testing workspace you can create a new empty project. If you open the properties of your project you should see the section ‘BPMN2′ with a target runtime selector. Here your new RuntimeExtinsion should be listed. Selecting a runtime extension means that this runtime is used by the BPMN2 Modeler Plugin.

screen02

You can now add also a BPMN model within you project.

Back to the top