<?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'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "EMF Refactor";
	$pageKeywords	= "EMF, Refactor, model refactoring, refactoring";
	$pageAuthor		= "Thorsten Arendt";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

<div id="maincontent">

    <div id="midcolumn">
	<h1>$pageTitle</h1>
	<img style="float:right" src="emfrefactor.png" alt="" style="border-width:0px"/>
	
	<!-- h1>EMF Refactor</h1 -->
	<p>
	<b>EMF Refactor</b> is an Eclipse open source tool environment conveniently supporting a <b>structured model quality assurance process</b>. 
	In particular, EMF Refactor supports metrics reporting, smell detection, and refactoring for models being based on the Eclipse Modeling Framework, 
	a widely used open source technology in model-based software development. 
	</p>
	<p>
	The tool environment mainly consists of two kinds of modules: 
	For calculating model metrics, detecting smells, and executing refactorings there is an <b>application module</b> each. 
	Similarly there are three <b>specification modules</b> for generating metrics, smell, and refactoring plugins containing Java code that can be used by the corresponding application module.
	</p>
	<p>
	
	<h2>Refactoring tool</h2>
	The refactoring tool consists of 
	<ul>
		<li>a <strong>Refactoring Application Module</strong> for applying EMF model refactorings in a uniform and user-friendly way,
		<li>a <strong>Structured Refactoring Suite</strong> of predefined EMF model refactorings supporting several EMF-based languages, and
		<li>a <strong>Refactoring Generation Module</strong> for specifying EMF model refactorings using several model transformation approaches.
	</ul>
	</p>
	
	<u><b>Refactoring Application Module</b></u>
		
	<p>
	EMF Refactor uses the Eclipse <a href="http://www.eclipse.org/articles/Article-LTK/ltk.html" target="_blank">Language Toolkit</a> 
	(LTK) for homogenous refactoring application consisting of three parts.
	After triggering a model element, refactoring-specific basic conditions are checked (<i>initial check</i>). Then,
	the user has to set all parameters and the EMF Refactor checks whether the user input does not violate further conditions
	(<i>final check</i>). In case of erroneous parameters a detailed error message is shown. If the final check has passed, 
	EMF Refactor provides a preview of the changes that will be performed by the refactoring using <a href="http://www.eclipse.org/emf/compare/" target="_blank">EMF Compare</a>. 
	Last but not least, these changes can be committed and the refactoring can take place (<i>model change</i>).
	Here, EMF Refactor supports undo and redo functionality, of course.
	</p>
	
	<u><b>Structured Refactoring Suite</b></u>
	
	<p>
	EMF Refactor currently supports 22 refactorings for Ecore models and 30 refactorings for UML2EMF models.
	A list of implemented refactorings can be found in the <a href="refactorings.php">refactorings</a> section.
	</p>
	
	<u><b>Refactoring Generation Module</b></u>
		
	<p>
	Since EMF Refactor uses the LTK technology mentioned above, a concrete refactoring specification requires up 
	to three parts (i.e., specifications for initial checks, final checks, and the proper model changes). EMF Refactor 
	currently supports three concrete mechanisms for EMF model refactoring specification. They can be specified using 
	<ul>
		<li>Java,
		<li>OCL expressions (for pre-condition checking), or
		<li>the EMF model transformation tool <a href="http://www.eclipse.org/modeling/emft/henshin/" target="_blank">Henshin</a>.
		Here, EMF Refactor uses Henshin's model transformation engine for executing the refactoring as well as Henshin's pattern 
		matching algorithm to detect violated preconditions.
	</ul>
	Actually, we are working on a combination mechanism of existing refactorings to more complex ones by using a dedicated domain-specific language called
	CoMReL (Composite Model Refactoring Language) that will be integrated soon into the official release of EMF Refactor.
	</p>

	<!--
		
	<div class="homeitem">
		<h3>Narrow column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
		
	<div class="homeitem">
		<h3>Narrow column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
	
	<div class="homeitem3col">
		<h3>This is a wide column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
	
	<hr class="clearer" />
	<p>Some free text</p>
	<ul class="midlist">
	<li>list of items in free text</li>
	<li>list of items in free text</li>
	<li>list of items in free text</li>
	</ul>
	<ol>
	<li>Ordered list</li>
	<li>Ordered list</li>
	<li>Ordered list</li>
	</ol>
		
	-->
		
	</div>
	
	
	<div id="rightcolumn">
	<div class="sideitem">
	
		
   		<h6>Incubation</h6>
		<p>This component is currently in its <a href="http://www.eclipse.org/projects/dev_process/validation-phase.php">Validation (Incubation) Phase</a>.</p>

   			<div align="center"><a href="/projects/what-is-incubation.php"><img align="center" src="/images/egg-incubation.png"  border="0" alt="Incubation" /></a></div>
 			</div>
	<!--	
		<h6>Related links</h6>
		<ul>
		<li><a href="#">Link</a> - descriptive text</li>
		<li><a href="#">Link</a> - descriptive text</li>
		</ul>
		</div>

		<div class="sideitem">
		<h6>Related links</h6>
		<ul>
		<li><a href="#">Link</a> - descriptive text</li>
		<li><a href="#">Link</a> - descriptive text</li>
		</ul>
		-->
		
		</div>
	</div>
	
	
</div>

EOHTML;

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
