blob: 452ef7cd2a09d2688dc711990519383c5429a1b5 [file] [log] [blame]
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop'
$pageTitle = "EMF Refactor - Component Proposal";
$pageKeywords = "emf, emft, ecore, refactoring, model refactoring, compare, uml, uml2, emf tiger, ltk, ewl";
$pageAuthor = "Thorsten Arendt";
ob_start();
?>
<div id="maincontent">
<div id="midcolumn">
<h1>EMF Refactor - Component Proposal</h1>
</p>
<?php
include_once($_SERVER['DOCUMENT_ROOT'] . "/projects/fragments/proposal-page-header.php");
generate_header("Eclipse Modeling Framework Refactor");
?>
<h2>Introduction</h2>
<p>EMF Refactor is a proposed new open source component under
<a href="http://www.eclipse.org/modeling/emft/">Eclipse EMFT</a> to provide tool support for
generating and applying refactorings for models based on EMF Ecore, e.g. UML EMF models.</p>
<p>This component is in the Pre-Proposal Phase (as defined in the
<a href="http://www.eclipse.org/projects/dev_process/">Eclipse Development Process</a>) and
this document is written to declare its intent and scope. This proposal is written to solicit
additional participation and input from the Eclipse community. You are invited to comment on
and/or join in the development of the component. Please send all feedback to the
<a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.emft">emft newsgroup</a>.
</p>
<h2>Background</h2>
<p> Model driven development has become a promising trend in software development which makes
models to the primary artifacts. However, code generators can produce high quality code only
for input models being of high quality. On the other side, code refactoring is a well-known and
investigated technique to improve software structures without changing the observable behaviour.
So an essential technique for model quality assurance is the refactoring of models which is
in focus of the current research.</p>
<p>Although several refactorings for models have been suggested, there is not yet a corresponding
tool support in Eclipse for creating custom refactorings and applying them. Moreover, some model
refactorings were adopted from code refactorings, especially for models that describe structural
features like UML class diagrams. In addition, completely new approaches have been developed,
especially for further diagram types such as state machines and activity diagrams or just other
kinds of EMF models.</p>
<h2>Scope</h2>
<p>Providing similarly comfortable refactoring support for models as for code refactoring in
Eclipse would be worthwhile. Since EMF has become a key reference in model driven software
development and a basic technology in Eclipse modeling, the intention is to provide an extensible
tool support for handling EMF model refactorings.</p>
<p>A basic intention of the proposed component is to provide a framework for developing
refactorings for models that are based on EMF. Model refactorings can be seen as endogenous model
transformations preserving the semantics of a model yet improving the internal structure. The idea
is to provide an easy to use generator which relies on model transformations to build model
refactorings. So in the proposed framework the development of individual model refactorings will be
based on model transformations, whereas the specifications of these model refactorings should be
done by means of several different model transformation approaches. This will lead to a framework
which will be extensible in two ways: on the one hand it should be possible to develop new EMF model
refactorings which will, on the other hand, be specified and executed by exchangeable model transformation
engines.</p>
<p>Like in tool support for code refactoring all generated model refactorings shall be applied
in an intuitive and convenient way. Users should be able to select one or more model elements of
interest - either in the standard EMF instance editor or in a generated graphical editor - and
choose the appropriate model refactoring out of the context menu of the selection. Needed parameters
should be entered like in Eclipse code refactoring wizards. If the selected refactoring can not be
executed the user should be informed by appropriate error messages. Furthermore, tool support for
EMF model refactoring should provide a preview of the performed changes as well as undo and redo
functionality. Here, the proposed framework should aspire to an integration or adjustment of the
Language Toolkit API (<a href="http://www.eclipse.org/articles/Article-LTK/ltk.html">LTK</a>).</p>
<p>An advanced tool support for EMF model refactoring could additionally combine refactorings
of different models or, what is especially of interest in the field of MDD, combine model
refactorings and code refactorings to synchronize the approriate artifacts of the software
development process. A further improvement would be to provide supplementary tool support for
specifying and detecting model smells which could be hints for possible model refactorings.
Here, model refactorings could be executed in a quick-fix manner.</p>
<p>Because of the increasing usage of UML2 models refactoring support especially for UML2 models
edited in <a href="http://www.eclipse.org/modeling/mdt/?project=uml2tools">UML2 Tools</a> is desirable.</p>
<h2>Initial Contribution</h2>
<p>An initial contribution will provide the primary functionality for model refactoring.</p>
<p><img src="images/ModulesArchitecture.png" /></p>
<p>As described above EMF Refactor consists of two main modules with basic functionalities.
The Refactoring Generation Module integrates the functionality of each model refactoring, that
has been defined by an EMF model transformation, into a special Eclipse plugin. Here, the actual
distribution supports the model transformation tool EMF Tiger that allows defining model
transformations graphically. The advanced plugin will extend EMF Refactor and provide a new
item in the context menu of the standard tree-based EMF instance model editor by which the
refactoring can be applied. Moreover, the Refactoring Application Module allows to select a model
refactoring, to set all parameters needed, to preview the result of a refactoring, and to actually
perform a refactoring.</p>
<p>The actual distribution of EMF Refactor provides implementations of a number of basic UML2
model refactorings:</p>
<h4>Available Refactorings for UML2 class diagrams</h4>
<ul>
<li>Change Attribute To Association End -
<i>transforms an attribute to an association end.</i></li>
<li>Change Association End To Attribute -
<i>transforms an association end to an attribute and is the opposite of refactoring
[Change Association End To Attribute]</i>.</li>
<li>Create Associated Class -
<i>creates an empty class and connects it with a new association to the source class
from where it is extracted.</i></li>
<li>Create Intermediate Superclass -
<i>creates an empty class in between a selected class and one of its superclasses.</i></li>
<li>Create Subclass -
<i>creates an empty subclass of a selected class.</i></li>
<li>Create Subinterface -
<i>creates an empty subinterface of a selected interface.</i></li>
<li>Create Superclass -
<i>creates a new super-class of a class.</i></li>
<li>Hide Property -
<i>makes a non-private attribute/property of a given class private and creates getter and
setter operations for it. In the literature, this refactoring is called
[Attribute/Field/Property Privatization] and [Encapsulate Attribute/Field/Property].</i></li>
<li>Pull Up Operation -
<i>moves an operation of a class to one of its superclasses.</i></li>
<li>Pull Up Operation To Interface -
<i>moves an operation of a class to one of its implemented interfaces.</i></li>
<li>Pull Up Operation To Superinterface -
<i>moves an operation of an interface to one of its superinterfaces.</i></li>
<li>Pull Up Property -
<i>removes a property from a class and inserts it into one of its super-classes.</i></li>
<li>Push Down Operation -
<i>pushes an operation down to all its sub-classes. Sometimes it is also called [Push Down
Method] and it is the opposite of refactoring [Pull Up Operation].</i></li>
<li>Push Down Property -
<i>moves a property of a class to all of its sub-classes. It is the opposite of refactoring
[Pull Up Property].</i></li>
<li>Remove Empty Intermediate Superclass -
<i>removes a completely empty class which is a superclass of a set of subclasses but also
generalizes other classes or implements interfaces. It is the opposite of refactoring
[Create Intermediate Superclass].</i></li>
<li>Remove Empty Subclass -
<i>removes a completely empty subclass of a classes and is the opposite of refactoring
[Create Subclass].</i></li>
<li>Remove Empty Subinterface -
<i>removes a completely empty subinterface of an interface and is the opposite of refactoring
[Create Subinterface].</i></li>
<li>Remove Empty Superclass -
<i>removes a completely empty superclass of a set of classes.</i></li>
<li>Rename Class -
<i>changes a class name to a new one.</i></li>
<li>Show Property -
<i>makes a non-visible property public and removes its getter and setter operations.
It is the opposite of refactoring [Hide Property].</i></li>
</ul>
<h4>Available Refactorings for UML2 state machines</h4>
<ul>
<li>Fold Transition Incoming to Composite State -
<i>folds transitions with same event incoming to a composite state from a state
outside that composite state.</i></li>
<li>Fold Transition Outgoing From Composite State -
<i>folds transitions with same event outgoing from a composite state to a state
outside that composite state.</i></li>
<li>Unfold Transition Incoming to Composite State -
<i>unfolds a transition incoming to a composite state to transitions incoming to
each sub-state of the composite state. It is the opposite of refactoring [Fold
Transition Incoming to Composite State].</i></li>
<li>Unfold Transition Outgoing From Composite State -
<i>unfolds a transition outgoing from a composite state to transitions outgoing from each
sub-state of the composite state. It is the opposite of refactoring [Fold Transition
Outgoing From Composite State].</i></li>
</ul>
<h2>Relationships to other Eclipse Projects/Components</h2>
<p>EMF Refactor builds upon the functionality provided by the
<a href="http://www.eclipse.org/modeling/emf/">EMF</a> project itself.</p>
<p><img src="images/UsesArchitecture.png" /></p>
<p>Special relationships to other projects/components are:</p>
<ul>
<li><a href="http://www.eclipse.org/modeling/m2t/?project=jet">JET</a>, for Java code
generation by the Refactoring Generation Module. </li>
<li>EMF model transformation tools for designing and generating individual model refactorings.
Here we plan a close collaboration with <a href="http://tfs.cs.tu-berlin.de/emftrans">EMF Tiger</a>,
also in the Pre-Proposal Phase as EMFT component. But other transformation tools should be
supported by EMF Refactor, too.</li>
<li>An EMF model comparison tool for providing a preview before applying individual model
refactorings. Here we plan to integrate the existing EMFT component
<a href="http://www.eclipse.org/modeling/emft/?project=compare#compare">EMF Compare</a>.
</li>
</ul>
<p>Planned integrations:</p>
<ul>
<li>An integration into the graphical editors of
<a href="http://www.eclipse.org/modeling/mdt/?project=uml2tools">UML2 Tools</a> should be
involved.</li>
<li>EMF Refactor should aspire to an integration or adjustment of the Language Toolkit API
(<a href="http://www.eclipse.org/articles/Article-LTK/ltk.html">LTK</a>).</li>
</ul>
<p>Related Work:</p>
<ul>
<li>EMF Refactor will not compete with the <a href="http://www.eclipse.org/gmt/epsilon/">Epsilon
Wizard Language (EWL)</a>, a language that supports update transformations in the small for
diverse modeling languages. Instead, a combinated use of EMF Refactor and EWL could be possible.</li>
<li>EMF Refactor could be used in combination with <a href="http://www.eclipse.org/proposals/edapt/">Edapt</a>,
a framework for Ecore model adaptation and instance migration which is also proposed as project
under <a href="http://www.eclipse.org/modeling/emft/">Eclipse EMFT</a>.</li>
</ul>
<h2>Organization</h2>
<h3>Mentors</h3>
<ul>
<li>Ed Merks (<a href="http://www.macromodeling.com">Macro Modeling</a>, Canada)</li>
<li>Bernd Kolb (<a href="http://www.sap.com">SAP</a>, Germany)</li>
</ul>
<h3>Initial Committers</h3>
<p>The initial committers for this component would be:</p>
<ul>
<li>Thorsten Arendt (<a href="http://www.uni-marburg.de/fb12">Philipps-Universitaet Marburg</a>,
Germany), proposed project lead</li>
<li>Florian Mantz (<a href="http://www.uni-marburg.de/fb12">Philipps-Universitaet Marburg</a>,
Germany), committer</li>
<li>Lars Schneider (<a href="http://www.uni-marburg.de/fb12">Philipps-Universitaet Marburg</a>,
<!-- (<a href="http://www.de.capgemini-sdm.com/deutsch/index.html">Capgemini sd&m AG</a>, Munich, -->
Germany), committer</li>
</ul>
<h3>Interested Parties</h3>
<p>So far, interest in this component has been expressed by:</p>
<ul>
<li>Nikolaus Regnat
(<a href="http://w1.siemens.com/innovation/en/about_fande/corp_technology/index.htm">Siemens
Corporate Technology</a>, Munich, Germany)</li>
<li>Philip Langer
(<a href="http://www.tuwien.ac.at/">Vienna University of Technology</a>, Vienna, Austria)</li>
</ul>
<p>Interested parties are welcome to add themselves to the list above as interested parties or to
suggest changes to this document.</p>
<h3>Developer Community</h3>
<p>The team of initial committers will explore statements of interest from additional developers
experienced with model refactoring or willing to gain such experience.</p>
<h3>User Community</h3>
<p>It is expected that the user community for EMF Refactor will consist of two kinds of users.
On the one hand, there will be researchers and developers who design model refactorings. On the
other hand, there will be modelers who apply the generated model refactorings to their EMF based
models - which can surely belong to the first category, too.<p/>
<h3>Tentative Plan</h3>
<p>The first community technical preview release is scheduled at the beginning of 2010 and the first
release is targeted in autumn 2010.<p/>
<p>Please visit our <a href="https://www.mathematik.uni-marburg.de/~swt/modref/">Homepage</a> for
further information.</p>
</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>