| Java, Eclipse and Web programming Tutorials |
Version 0.1
Copyright © 2007-2010 Lars Vogel
17.01.2010
| Revision History | ||
|---|---|---|
| Revision 0.1 | 12.08.2007 | Lars Vogel |
| Split from EMF tutorial | ||
Table of Contents
For a general introduction into Eclipse EMF please see Eclipse EMF Tutorial
This article focus on the creation of EMF models based on Java interfaces.
EMF allows to use annotated Java interfaces to define the data model. The annotations used are Javadoc annotations. Each attribute or class that is a part of the EMF model must have a @model tag and may have an optional list of additional attributes.
The @model tag may be followed by additional details about the model element. For example, if an attribute should be read-only (no generation of a set method),the following annotation needs to be added: changeable="false".
The following tags can be used in the @model definition:
Table 1. Java Annotations
| Annotation | Description |
|---|---|
| abstract="true" | Creates a abstract class |
| containment="true" | Express UML2 composition relationships (links with black diamonds). These objects references are saved with the object. |
| default=Value | Default value, can be a constant, enumeration. |
| changeable="false" | No setter will be generated |
We will model a webpage structure with EMF.
Create a new Java project called "de.vogella.emf.webpage". Create a new folder called "metamodel" which will contain the EMF model.
Create the following interfaces.
package de.vogella.emf.webpage.model;
/**
* @model
*/
public interface Article {
/**
* @model default=""
*/
public String getName();
}
package de.vogella.emf.webpage.model;
import java.util.List;
/**
* @model
*/
public interface Category {
/**
* @model default=""
*/
public String getName();
/**
* @model containment="true"
*/
public List<Article> getArticles();
}
package de.vogella.emf.webpage.model;
import java.util.List;
/**
* @model
*/
public interface Webpage {
/**
* @model default=""
*/
public String getName();
/**
* @model default=""
*/
public String getTitle();
/**
* @model default=""
*/
public String getDescription();
/**
* @model default=""
*/
public String getKeywords();
/**
* @model containment="true"
*/
public List<Category> getCategories();
}
package de.vogella.emf.webpage.model;
import java.util.List;
/**
* @model
*/
public interface MyWeb {
/**
* @model default=""
*/
public String getName();
/**
* @model default=""
*/
public String getTitle();
/**
* @model default=""
*/
public String getDescription();
/**
* @model default=""
*/
public String getKeywords();
/**
* @model containment="true"
*/
public List<Webpage> getPages();
}
Create a new EMF meta model "website.genmodel" based on these interfaces in folder "metamodel".
Select your metamodel folder, right click and select Other. Select Eclipse Modeling Framework -> EMF Generator Model


Press next and select the following.

Press next and you should be able to select your package. Change the name of the ecore model to "website.ecore".

Press finish. You have created your EMF model! We will discuss this model in the next chapter.
To use your model in an plugin environment later. Add the util package to your exported packages in MANIFEST.MF on tab Runtime.

Thank you for practicing with this tutorial.
Please note that I maintain this website in my private time. If you like the information I'm providing please help me by donating.For questions and discussion around this article please use the www.vogella.de Google Group. Also if you note an error in this article please post the error and if possible the correction to the Group.
I believe the following is a very good guideline for asking questions in general and also for the Google group How To Ask Questions The Smart Way.
http://www.vogella.de/code/codeeclipse.html Source Code of Examples
http://www.eclipse.org/modeling/emf Eclipse EMF Homepage
http://www.eclipse.org/modeling/emf/docs/ EMF Documentation
http://www.vogella.de/articles/EclipseEMF/article.html Eclipse EMF Tutorial
http://www.eclipse.org/m2m/atl/ ATL allows model to model transformation for EMF