<?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: 		Freddy Allilaire
	# Date:			2005-12-07
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "AMW Use Case - Tool Interoperability";
	$pageKeywords	= "";
	$pageAuthor		= "Marcos Didonet Del Fabro";
	
	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<!-- Main part -->
	<div id="midcolumn">
		<h1><font color='#280882'>AMW</font> Use Case - Translation from SQL to KM3</h1>

		<a name="goals"></a>
		<img align="right" src="../../resources/amwLogoSmall.png" valign="top" style="padding-left: 10px;" alt="AMW Logo" />
		<blockquote>
			<ul>
				<li><a href="#overview"><b>Overview</b></a></li>
				<li><a href="#download"><b>Download and examples</b></a></li>
			</ul>
		</blockquote>
    		    	
		<hr class="clearer" />

		<div id="container>
		<table>
			<COLGROUP>
				<COL width="2%">
				<COL width="98%">
		<tr>
			<td></td>
			<td>
		
			Nowadays, there are a large number of different tools that can be used to solve similar problems. It is often
			necessary to use the data produced by one tool in another tool. However, the tools have different data format and semantics. <br/>
			To support interoperability between different tools, it is necessary to represent the 
			semantic heterogeneities between the tools' elements. 
			<p/>
			This use case shows how weaving models are used to capture the semantic heterogeneities between different tools' metamodels. 
			The weaving model acts as high-level specifications for producing model transformations.			
			<p/>
		<h4 STYLE="font-size: 10pt; padding: 0; border-bottom: 2px solid #49457C; background-position: top left; background-repeat; repeat-x;">
		
		<a name="overview">Overview</a></h4>
		
		<p align="justify">
			We illustrate the tool interoperability scenario using two well-known bug tracking tools, <a href="http://www.mantisbt.org/">Mantis</a> 
			and <a href="http://www.bugzilla.org/">Bugzilla</a>. Mantis is represented by model <i>Ma</i> (conforms to <i>MMa</i>). 
			Bugzilla is represented	by model <i>Mb</i> (conforms to <i>MMb</i>).			
			<p/>
			The first step is to perform a matching between both metamodels. The matching process creates a weaving model that captures the
			different kinds of heterogeneities between both tools metamodels. The heterogeneities may vary from simple mappings (e.g., 1-to-1 
			equivalence links), to complex kinds of mappings (e.g., conconcatenation, data conversions, etc.). More information about the
			matching process is available in the <a href="../matching/">matching use case</a>. 
			The weaving model conforms to a weaving metamodel extension for tool interoperability. This extension is available in the 
			<a href="../../zoo/#Tool interoperability extension">weaving metamodel Zoo</a>.
			<p/>
		  	<p align="center">
		  		<img src="../resources/interop_overview.png"/>
	  			<br /><br />
				<b>Weaving model for tool interoperability</b>
			</p>					
			After the weaving model is created, the weaving model is used as specification to produce model transformations. We implement a higher-order
			transformation (HOT) based on a generic transformation pattern (see the <a href="#interop">publication</a> below). The HOT takes the weaving model as input and produces
			a transformation model as output. This output transformation is used to translate Mantis models into Bugzilla models.
			
			<p align="center">
		  		<img src="../resources/interop_hot.png"/>
	  			<br /><br />
				<b>Production of a transformation between Mantis and Bugzilla</b>
			</p>	
			
	    </p>
		
		<br>
		
		<h4 STYLE="font-size: 10pt; padding: 0; border-bottom: 2px solid #49457C; 
							background-position: top left; background-repeat; repeat-x;">
		<a name="download">Download and examples</a></h4>

		<table>
			<COLGROUP>
				<COL width="25%">
				<COL width="75%">

		<tr>

		<td align="center">
			<a href="../../examples/AMW_HOT_MantisBugzilla/AMW_HOT_MantisBugzilla.zip"><h3>Example</h3></a>
		</td>
		<td>
			This example is a complete scenario of tool interoperability that uses weaving models to capture the different kinds of
			heterogeneities between the Mantis and Bugzilla metamodels. The weaving model is used to generate ATL transformations.
			<p/>
		</td>				
		</tr>
		<td align="center">
			<a href="../../examples/AMW_HOT_MantisBugzilla/AMW_HOT_MantisBugzilla_doc.php"><h3>Example HowTo</h3></a>
		</td>
		<td>
			This document contains step-by-step instructions explaining how to execute the example.
			<p/>
		</td>		
		</tr>
		<tr>
		
		<td align="center">
			<a name="interop" href="http://www.sciences.univ-nantes.fr/lina/atl/bibliography/ODBASE06"><h3>Publication</h3></a>
		</td>
		<td>
			The publication titled "Model-driven Tool Interoperability: an Application in Bug Tracking" demonstrates the use of 
			weaving models to capture complex kinds of mappings in tool interoperability scenarios. It uses the "Mantis to Bugzilla"
			scenario for the experimental validation.
		</td>		
		
		</tr>				
		</table>
		<p/>
		
		
		</div>
	</div><p/>

	
EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>