blob: 3d18e3e478d9edcb61e560e0d9c7ae479f1c8ab8 [file] [log] [blame]
<!--
This document is provided as a template along with some guidance for creating
your project proposal. This is just a template. Feel free to change it as
you see fit (add sections, remove section). We feel, however, that the
suggestions represented in this document represent the reasonable minimum
amount of information to move forward.
Please keep the formatting in this document simple. Please do not edit
this document in Microsoft Word as it adds huge piles of markup that make
it difficult to restyle.
More information is available here:
http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
Direct any questions about this template to emo@eclipse.org
-->
<html>
<head>
<!--
Include the title here. We will parse it out of here and include it on the
rendered webpage. Do not duplicate the title within the text of your page.
-->
<title>EMF Parsley</title>
</head>
<!--
We make use of the 'classic' HTML Definition List (dl) tag to specify
committers. I know... you haven't seen this tag in a long while...
-->
<style>
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
dd {
margin-left:25px;
margin-bottom:5px;
}
</style>
<body>
<p>The EMF Parsley project is a proposed open source project under the <a
href="http://www.eclipse.org/projects/project.php?id=modeling">Eclipse Modeling Project</a>.</p>
<!--
The communication channel must be specified. Typically, this is the
"Proposals" forum. In general, you don't need to change this.
-->
<p>This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the
<a href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse Proposals</a>
Forum.</p>
<h2>Background</h2>
<!--
Optionally provide the background that has lead you to creating this project.
-->
The Eclipse Modeling Framework (EMF) provides code generation facilities for building tools and applications
based on structured data models.
Using EMF together with other frameworks like, for instance, JFace and Databinding for the user interface
and Teneo or CDO for persistence, we can build powerful model-based UI parts.
However, setting up and assembling all these technologies still requires both deep knowledge
of most internal details and a considerable amount of time.
Moreover, typically, reusing existing UI parts in different applications is
not straightforward.
Our framework aims at providing a set of reusable out-of-the-box UI components based on EMF,
yet highly customizable in a quick way.
<h2>Scope</h2>
<!--
All projects must have a well-defined scope. Describe, concisely, what
is in-scope and (optionally) what is out-of-scope. An Eclipse project
cannot have an open-ended scope.
-->
The scope of this project is
<ul>
<li>to provide a framework to easily develop
UI components based on EMF models, which hides most of
the complexity of internal details. </li>
<li>
to make the developed components highly reusable and customizable via
Dependency Injection (in particular, Google Guice).</li>
<li>
to provide a set of such components
(e.g., trees, tables, forms, views and editors)
that can be used out-of-the-box
and customized (these can also be seen as reference implementations). </li>
</ul>
We also provide a DSL in order to make all of the above tasks even easier and in
a very compact form. The DSL is implemented in Xtext, thus, it comes with rich
and powerful tooling.
<h2>Description</h2>
<p>
EMF Parsley provides a framework to easily develop
UI components based on EMF models; the framework hides most of
the complexity of internal details, in a way that, to create a JFace viewer
and connect it to an EMF resource, usually requires a few lines of code.
The main design principle underlying this framework is to split responsibilities
into small classes (adhering to the Single Responsibility Principle); thus, customizing
a single aspect of the components requires
to specialize only the class that deals with that specific aspect, not the whole component.
This should maximize code reuse and promote a programming style where the
classes by the programmer are usually very small and deal with not too many
aspects.
</p>
<p>
The framework also comes with some UI components that can be used out-of-the-box
(including trees, tables and forms, and view and editor parts).
Programmers can rely on these components and customize them, or use them
as a reference implementation to build their own components based on
our framework.
</p>
<p>
To customize existing components we rely on Dependency Injection, in particular
using Google Guice. The configuration and setup of Guice modules uses the same
mechanism of Xtext (i.e., binding an implementation class only requires to
write a specific "bind" method in the main Guice module class).
The initial setup of a project which uses EMF Parsley is done via a
project wizard, so that the programmer does not have to deal with these details.
</p>
<p>
Specification of custom behaviors (e.g., label providers, content providers, context menus, etc.) for elements of the EMF model in a component
can be made based on their types, but without requiring long cascades of Java
"instanceof" and casts: we provide a polymorphic method dispatch mechanism
(again, borrowed from Xtext) that allows to write cleaner and declarative code.
</p>
<p>
We also provide a DSL (implemented in Xtext) for making the use of our
framework easier: customizations can be specified in a compact form in
a single file; from that all of the other Java classes are automatically generated
and bound in the Guice module. The DSL provides a fully feature Eclipse editor
and, by relying on Xbase, it provides a Java-like language completely integrated
with Java and Eclipse JDT.
</p>
<p>
Setting up views (like in the following screenshot) only requires a few lines of
Java code.
</p>
<p><img style="height:auto; width:auto; max-width:750px; max-height:750px;" src="mail-app.png"/></p>
<p>
Using the DSL (like in the following screenshot) allows to quickly customize
the components (the corresponding Java code will be automatically generated
by the DSL compiler).
</p>
<p><img style="height:auto; width:auto; max-width:750px; max-height:750px;" src="emf-components-dsl.png"/></p>
<br>
<p>
Regarding the persistence aspect, the framework can handle a generic EMF persistence implementation, like XMI or Teneo,
just providing the EMF Resource's URIs.
It also includes a bundle for handling CDO resources, which takes care of CDO Sessions and Transactions transparently.
</p>
<p>
All sources are covered by test, both with JUnit and SWTBot. Tests are already integrated in the Continuous Integration system implemented with Jenkins.
</p>
<p>
Also the building and update site architecture is already setup and implemented with Buckminster. The latest is heavily used throughout the whole development cycle,
starting from the workspace and platform materialization up to headless building and continuous
integration.
</p>
<p>
In addition to be used to render RCP UI, the framework is out-of-the-box ready to be used for RAP development.
</p>
<p>
The framework that is closer to our proposal is EMF Client Platform. However, while the latter
aims at providing a quick way of obtaining a full application based on EMF, EMF Parsley
aims at providing single smaller and reusable components. Moreover, our components are
not customized via extension points, but using injection with plain Java and with a DSL.
</p>
<!--
Describe the project here. Be concise, but provide enough information that
somebody who doesn't already know very much about your project idea or domain
has at least a fighting chance of understanding its purpose.
-->
<h2>Why Eclipse?</h2>
<!--
Answer these two questions: What value does this project bring to the Eclipse
community? What value do you expect to obtain from hosting your project at Eclipse?
What value do you get by having your project at Eclipse over and above the value
of hosting at Eclipse Labs?
-->
<p>This project leverages and integrates very well with many widely-used Eclipse projects
(e.g., EMF, JFace, Xtext, CDO).
Our purpose is to give it the broader visibility among individuals, developers as well as companies.
Eclipse offers the right higher reliability in terms of long-term support,
so that it is expected to attract more interest and participation from other parties.
This will lead to greater market penetration, while improving quality and reducing development costs.</p>
<h2>Initial Contribution</h2>
<!--
Projects are expected to arrive at Eclipse with existing code.
Describe the existing code that will be contributed to the project. Please provide
a couple of paragraphs describing the code with modest detail, including important
information like code ownership (who holds the copyright?), and some consideration
of community that exists around the code. Include a listing of third-party libraries
and associated licenses.
-->
<p>The initial contribution consists of the following sources, material and architecture already setup for
the current EMF Parsley repository at
<a href="http://eclipselabs.org/p/emf-components">EclipseLabs</a>, which include:
<ul>
<li>Basic Components (widgets and parts)</li>
<li>EMF persistence (i.e. for XMI or Teneo)</li>
<li>CDO persistence</li>
<li>DSL Editor and code generator</li>
<li>RAP integration bundle</li>
<li>Eclipse 4 enabled</li>
<li>Examples</li>
<li>Help Documentation and Tutorials</li>
<li>Tests, Continuous Integration, Build and Update Site infrastructure</li>
</ul>
<p>
<p>
Note that at the moment, the packages of our framework do not include org.eclipse.*;
we plan to change it from it.rcpvision.emf.components.* to org.eclipse.emf.parsley.*
if the proposal is accepted.
</p>
<h2>Legal Issues</h2>
<!--
Please describe any potential legal issues in this section. Does somebody else
own the trademark to the project name? Is there some issue that prevents you
from licensing the project under the Eclipse Public License? Are parts of the
code available under some other license? Are there any LGPL/GPL bits that you
absolutely require?
-->
All contributions will be distributed under the Eclipse Public License.
<h2>Committers</h2>
<!--
List any initial committers that should be provisioned along with the
new project. Include affiliation, but do not include email addresses at
this point.
-->
<p>The following individuals are proposed as initial committers to the project:</p>
<dl>
<dt>Lorenzo Bettini, University of Turin</dt>
<dt>Francesco Guidieri, RCP Vision</dt>
<dt>Vincenzo Caselli, RCP Vision</dt>
</dl>
<p>We welcome additional committers and contributions.</p>
<!--
Describe any initial contributions of code that will be brought to the
project. If there is no existing code, just remove this section.
-->
<h2>Mentors</h2>
<!--
New Eclipse projects require a minimum of two mentors from the Architecture
Council. You need to identify two mentors before the project is created. The
proposal can be posted before this section is filled in (it's a little easier
to find a mentor when the proposal itself is public).
-->
<p>The following Architecture Council members will mentor this
project:</p>
<ul>
<li>Ed Merks</li>
<li>Eike Stepper</li>
</ul>
<h2>Interested Parties</h2>
<!--
Provide a list of individuals, organisations, companies, and other Eclipse
projects that are interested in this project. This list will provide some
insight into who your project's community will ultimately include. Where
possible, include affiliations. Do not include email addresses.
-->
<p>The following individuals, organisations, companies and projects have
expressed interest in this project:</p>
<ul>
<li><a href="http://www.rcp-vision.com/">RCP Vision</a></li>
<li><a href="http://www.egicon.it/">EGICON</a></li>
<li>Daniel Golesny</li>
</ul>
<h2>Project Scheduling</h2>
<!--
Describe, in rough terms, what the basic scheduling of the project will
be. You might, for example, include an indication of when an initial contribution
should be expected, when your first build will be ready, etc. Exact
dates are not required.
-->
Initial contribution is ready to be published.
<h2>Changes to this Document</h2>
<!--
List any changes that have occurred in the document here.
You only need to document changes that have occurred after the document
has been posted live for the community to view and comment.
-->
<table>
<tr>
<th>Date</th>
<th>Change</th>
</tr>
<tr>
<td>23-April-2013</td>
<td>Eclipse 4 enabling updates, documentation added</td>
</tr>
<tr>
<td>23-April-2013</td>
<td>Interested parties added, resize images</td>
</tr>
<tr>
<td>17-January-2013</td>
<td>Document created</td>
</tr>
</table>
</body>
</html>