<?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 - Tool Interoperability of bug tracking tools</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>
				<li><a href="#related"><b>Related use cases</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/>
			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>.
			This use case shows how weaving models are used to capture the semantic heterogeneities between these two 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">
			Consider two bug tracking tools, Mantis and Bugzilla. 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>
		
		<h4 STYLE="font-size: 10pt; padding: 0; border-bottom: 2px solid #49457C; 
							background-position: top left; background-repeat; repeat-x;">
		
		<a name="related">Related use cases</a></h4>
		
		<table>
			<COLGROUP>
				<COL width="25%">
				<COL width="68%">
		<tr>
				
		<tr>
		<td align="center">
			<a href="../matching/"><h3>Matching</h3></a>
		</td>
		<td>
			Matching is the generic process that creates weaving models.
			This use case gives a general overview of the matching process, and how it is handled by AMW and ATL.			
		</td>		
		</tr>	
		<tr>		
		<td align="center">
			<a href="../compare/"><h3>Metamodel comparison</h3></a>
		</td>
		<td>
			This use case demonstrates how weaving models are used to compare different
			metamodels and to produce executable model transformations (we use two metamodels used to define embedded 
			softwer in the avionics industry).
		</td>		
		</tr>		
		<tr>		
		<td align="center">
			<a href="../modelgen/"><h3>Bridge between SQL and KM3</h3></a>
		</td>
		<td>
			This use case shows how weaving models and model transformations are used to translate SQL-DDL (Data Definition Language) into 
			KM3 (a modeling technical space) and to translate KM3 into SQL.
		</td>		
		</tr>						
		
		</table>		
		
		
		<p/>
		
		
		</div>
	</div><p/>

	
EOHTML;


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