DeltaJava is a powerful delta-oriented programming language, designed to comfortably create Software Product Lines within the Java environment. The DeltaJava project is implemented in form of a set of Eclipse plug-ins.
The approach of Delta-Oriented Programming (DOP) enables the mighty ability to add, remove or even modify code fragments from a given base product. Picture 1 depicts an example of how to conceptually derive a variant (right side) from a base product (left side) where fragment A is modified, B removed, D added and C untouched.
Herefore, DeltaJava offers various operations and units to contain them in. For references, see our syntax section.
DeltaJava was built with EMFText - "an Eclipse plug-in that allows you to define text syntax for languages described by an Ecore metamodel".
Its delta modules provide a convenient, Java-like way to add, modify and remove Java code as demonstrated in the syntax section.
DeltaJava's architectural base is an EMFText implementation of Java, called JaMoPP (Java Model Printer and Parser) which enables to write native Java code inside DeltaJava's delta modules. DeltaJava defines its operations and units on top of JaMoPP by wrapping the JaMoPP Java code inside them.
As backbone for its variant generation and problem space artifacts, DeltaJava relies on DeltaEcore. For that purpose, the DeltaJava implementation contains a special DeltaEcore dialect for Java (based on JaMoPP). When saving DeltaJava delta modules, DeltaJava will therefore transform its saved delta modules to equivalent DeltaEcore delta modules, using that dialect.
When it comes to problem space artifacts in DeltaJava projects, DeltaEcore feature models offer a convenient, graphical editor for the organization and configuration of variants. A feature mapping is then used to simply map feature selection conditions to appropriate DeltaEcore delta modules (which were automatically generated from DeltaJava delta modules).
Finally, to generate variants from a DeltaJava software product line, the DeltaEcore feature model offers the ability to chose a set of features and thereupon automatically derive a variant.
To install new software to your Eclipse runtime, select "Help" and search for the "Install new Software..." entry. Copy the respective URL, add it as location and install the components you wish.
In order to get DeltaJava running in your Eclipse Modelling runtime, you will need the following software installed.
Use this update site to install DeltaJava to your Eclipse runtime, including all required plug-ins (DeltaEcore, JaMoPP and the EMFText common libraries).
As shown in the section about DeltaJava's structure, its plug-in projects are build upon each other. Hence, to check out DeltaJava from source code, you will need multiple Eclipse runtimes launching each other.
Unfortunately, in order to install DeltaJava by source code, you will need two seperate eclipse installations with different versions of EMFText installed. Hence, as first step, please download a fresh Eclipse Installation from the official Eclipse Packages Download Site or reuse an installation that does not have EMFText installed yet.
cs
by entering "*.cs" in the "File name pattern" textfield. de.ovgu.featureide.deltaecore
(This project is a composer for FeatureIDE; "an Eclipse-based IDE that supports all phases of feature-oriented software development for the development of SPLs")org.deltaecore
org.deltaecore.installer
org.deltaecore.integration.ie.feature.eclipse
org.deltaecore.integration.ie.feature.featureide
org.emftext.language.java
org.emftext.language.java.resource
org.emftext.language.java.resource.bcel
org.emftext.language.java.resource.java
org.emftext.language.java.resource.java.ui
org.emftext.language.java.resource.jdt
org.emftext.language.java
project, navigate to its "metamodel" folder, open "java.genmodel" with the "EMF Generator" editor (opens by default) and generate model code. anon
):
This runtime has all plug-ins installed which you checked out and set up in the prior installation guide steps. Here, you can use JaMoPP as Java Editor as well as Delta Ecore to implement a custom delta dialect for code generation.
As next step, you are going to check out a custom delta dialect for JaMoPP which builds the base for DeltaJava.
anon
):
de.tu_bs.cs.isf.deltajamopp
, search for the folder "dialect", right click on its contained file "deltajamopp.decoredialect" and run it as "deltadialect Application". This runtime hosts the DeltaJava plug-ins which build upon the underlaying DeltaEcore framework and JaMoPP functionality.
anon
):
de.tu_bs.cs.isf.deltaj
, search for the folder "metamodel" and open "deltaj.genmodel". Now generate the model code as done in prior installation guide steps. de.ovgu.featureide.deltajava
is a composer for FeatureIDE; "an Eclipse-based IDE that supports all phases of feature-oriented software development for the development of SPLs" - you can close this project if you did not install FeatureIDE to avoid errors in your workspace.de.tu_bs.cs.isf.deltaj.utility
project was checked out into your second runtime's workspace.In this runtime, you can now use DeltaJava to implement software product lines.
A toy example to get a first impression of DeltaJava can be found in our section Getting Started.
In this section, we provide an easy to grasp toy example to get started with DeltaJava; the very simple Chat GUI "DeltaTalk". The project consists of a small collection of delta modules along with an even smaller base of core Java assets. To get an overview of the entire DeltaJava syntax and the possibilites it offers, please refer to our syntax section.
Please check out the de.
project from the SVN repository location given below (username: anon
). Make sure to choose the "Find projects in the children of the selected resource" option while checking out.
After checking out DeltaTalk, you might need to rebuild your workspace.
In DeltaJava, all delta modules are contained inside a designated delta folder. For the "de.
" project, this folder is simply named "deltas/". When applied, its contained delta modules add, modify and/or remove functionality of the project's source folder's core assets. In our particular DeltaTalk example, the core assets' source files implement a fairly simple GUI. You can go ahead and start the project as Java application.
The DeltaTalk example works with DeltaEcore to organize its problem space artefacts which - for this project - are a feature model and delta mapping. To generate variants from the DeltaTalk SPL, open its feature model ("DeltaTalk.defeaturemodel") with the "Feature Model Configurator (DeltaEcore)" editor. Using this editor, you can select (one or more) feature(s) generate variants accordingly by pressing the "Generate Variant" button.
A pop-up window will open and ask you to select a generator along with a directory to generate the variant in. Generally, we recommend you to generate variants into a designated eclipse project (e.g. "de.
"). Pressing the OK button will trigger DeltaEcore's variant generation for your selected feature; respective delta modules will be applied. You can test your generated variant by starting the variant project as Java application.
Feel free to change delta modules and play around with DeltaTalk to get a taste of how the variant generation works. For more information about DeltaEcore, visit deltaecore.org.
This Tutorial gives an insight into the basic usage of DeltaJava.
This section introduces DeltaJavas syntax and illustrates its operations and functionality with the help of easy to grasp examples.
In this paper, we report on insights into practical aspects of developing a software product line using delta-oriented programming with DeltaJava as concrete technology.
Delta-oriented programming (DOP) is a modular, yet flexible approach to implement software product lines. In DOP, a product line is implemented by a set of deltas, which are containers of modifications to a program ...
Delta-oriented programming is a compositional approach to flexibly implementing software product lines. A product line is represented by a code base and a product line declaration. The code base ...
Delta-oriented programming (DOP) is an implementation approach to develop software product lines (SPL). Delta-oriented SPLs evolve over time due to new or changed requirements and need to be maintained to ...
Delta-oriented programming (DOP) is a modular, yet flexible approach for implementing software product lines extending feature-oriented programming ...
Delta-oriented programming is a compositional approach to flexibly implementing software product lines. A product line is represented by a code base ...
Delta-oriented programming (DOP) is a modular approach for implementing software product lines. Delta modules generalize feature modules by allowing removal of functionality. However, DOP requires to select one ...
Feature-oriented programming (FOP) implements software product lines by composition of feature modules. It relies on the principles of stepwise development. Feature modules are ...