<?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'
/*******************************************************************************
 * Copyright (c) 2010 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors: Adrian Mos
 *    
 *******************************************************************************/

	$pageTitle 		= "Mangrove - Getting Involved";
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/default/style.css"/>');

	$html  = <<<EOHTML
<div id="midcolumn">
<h2>$pageTitle</h2>
<p>We are very happy that you are considering getting involved in Mangrove! 
You can get involved by contributing code, documentation, tutorials, bug reports, or by sending your suggestions and questions to the mailing list.</p>

<h3>Access to the code</h3>
<p><b>Browsing the SVN repository:</b> http://dev.eclipse.org/svnroot/soa/org.eclipse.mangrove/<br />
<p><b>Anonymous access to the SVN:</b> <br />
	<ul>
		<li><b>host:</b> dev.eclipse.org</li>
		<li><b>repository:</b> /svnroot/soa/org.eclipse.mangrove</li>
		<li><b>method:</b> http</li>
	</ul>

<p><b>Committer access to the SVN:</b> <br />
	<ul>
		<li><b>host:</b> dev.eclipse.org</li>
		<li><b>repository:</b> /svnroot/soa/org.eclipse.mangrove</li>
		<li><b>method:</b> svn+ssh</li>
	</ul>	
	
<h3>Code structure</h3>
<p>The various Mangrove plugins are organized in different modules according to their purpose. The modules are:</p>
	<ul>
		<li><b>org.eclipse.soa.mangrove.core -</b> the EMF core plugins</li>
		<li><b>org.eclipse.soa.mangrove.branches -</b> the Transformation Plug-ins (initial existing code in STP-IM): contain the logic required to move and convert information between editors, tools and the core metamodel instance.</li>
		<li><b>org.eclipse.soa.mangrove.builder -</b> ensures the constant updating of SOA artifacts in the core as well as in the corresponding editors and tools (e.g. when saving a diagram, update the appropriate artifacts in the core while also enabling the update of the corresponding artifact in related editors or tools).</li>
		<li><b>org.eclipse.soa.mangrove.leaves -</b> the Editor Extensions (initial existing code in STP-IM), extensions and improvements to editors and tools for adding Mangrove-specific functionality at design time (e.g. views allowing the enrichment of certain SOA elements in the core or configuration menus for customizing the amount of information to be moved to/from the core).</li>
		<li><b>org.eclipse.soa.mangrove.roots -</b> the Runtime Connections: plugins for moving information to and from runtime tools and repositories when needed in order to have a "living" core, providing a good reality snapshot. This can be useful when diagrams are out of sync or when aggregated monitoring information is required to update graphical elements. Also for generating deployment information in a common format.</li>
	</ul>

<h3>Mailing List</h3>
<p>The information about the Mangrove DEV mailing list is available at: <b>https://dev.eclipse.org/mailman/listinfo/mangrove-dev</b></p>	

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