<?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 		= "Data Tools Incubator";
	$pageKeywords	= "eclipse, data tools, dtp, datatools, incubator";
	$pageAuthor		= "Brian Fitzpatrick";
	
	ob_start();
	?>

	<div id="midcolumn">
		<h1><?=$pageTitle; ?></h1>
		<div class="homeitem3col">
			<h3>Project Overview</h3>
			<p>The Eclipse Data Tools Platform Incubator hosts new development in areas that are relevant to the other Eclipse Data Tools Platform projects, which because of their nature would not be appropriate for direct inclusion in the effected sub-project. This could be because the work is still experimental, will have a longer timeline than can be contained within a single release, has dependencies on external IP that has not yet cleared the Eclipse Foundation IP process, or is simply potentially too destabilizing in nature.</p>
			<h4>Out of Scope</h4>
			<p>Work in the Eclipse Data Tools Platform Incubator will be constrained to only those efforts that we expect to graduate (i.e. the code will eventually become part of one of the other Eclipse Data Tools Platform sub-projects). It is not a playground for arbitrary development efforts. In addition, we should ensure that investment in the incubator never leaves the community with the perception that it is coming at the cost of important work on the other Eclipse Data Tools Platform sub-projects.</p>
		</div>
		<hr class="clearer">
		<div class="homeitem3col">
			<h3>Incubation Process</h3>
			<p>Components in the DTP incubator follow a similar path to incubating projects at Eclipse:</p>
			<ol>
				<li>Using a DTP community forum (such as the newsgroup or a mailing list), indicate interest in creating an incubation component.</li>
				<li>The DTP PMC will review the request to determine if the component is in <a href="http://www.eclipse.org/datatools/charter.php">scope for DTP</a> and to help those proposing the component understand the commitment required.</li>
				<li>Any initial code is subject to <a href="http://www.eclipse.org/projects/dev_process/parallel-ip-process.php">parallel IP</a> review by Eclipse legal.</li>
				<li>Working with the DTP PMC, the component team will notify the Eclipse community at large about the pending creation.</li>
				<li>Once (3) and (4) are complete, the component will be created in the Incubator project.</li>
				<li>The component team works on developing the community and building an ecosystem around it. The idea is to get into working the <a href="http://www.eclipse.org/projects/dev_process/incubation-phase.php">Eclipse Way</a>.</li>
				<li>At some point the component will reach a level of development where it is ready to <a href="http://www.eclipse.org/projects/dev_process/graduation-review.php">graduate</a> to the appropriate mature project in DTP. The PMC will work with the component team to complete this graduation process, which will normally take place as part of a larger DTP release cycle. For details about the promotion process, see <a href="http://wiki.eclipse.org/DTP_Incubator_Promotion_Policy">DTP Incubator Promotion Policy</a>.</li>
			</ol>				
		</div>
		
		<div class="homeitem3col">
			<h3>Incubating Components</h3>
      		<ul>
      			<li><a href="http://wiki.eclipse.org/Ecore_ODA_Driver-Proposal">Ecore ODA Driver</a></li>
      		</ul>
		</div>

		<div class="homeitem3col">
			<h3>Inquiries</h3>
			<p>For questions about the DTP Incubator Project, please e-mail the <a href="mailto:dtp-pmc@eclipse.org">DTP PMC</a>.</p>
		</div>

	</div>

<?

	$html = ob_get_clean();
	
	# Configure the left navigator area. In particular, we need to set the "About this Project" link.
	$Nav->setLinkList( array() );
	$Nav->addNavSeparator( "DTP Incubator", "/datatools" );
	$Nav->addCustomNav( "About This Project",
			"/projects/project_summary.php?projectid=datatools.incubator", "", 1 );
	# Can add more custom left navigator links here. 	
	
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>