<?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: 		Nathan Gervais
	# Date:			2007-12-05
	#
	# Description: DTP Website
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Enablement Project";
	$pageKeywords	= "eclipse, data tools, dtp, datatools, enablement";
	$pageAuthor		= "Nathan Gervais";
	
	ob_start();
	?>
	<div id="midcolumn">
		<h1><?=$pageTitle; ?></h1>
		<div class="homeitem3col">
			<h3>Project Overview</h3>
			<p>The Enablement project is intended to provide specialized support built on DTP core extension points and API. 
      Enablement members can use the full range of these or any subset they see fit to provide specialized support for 
      their particular data source. In general the PMC expects to see contributions to Enablement that demonstrate good 
      usage of core DTP frameworks and tools, and not those of greater scope than could be reasonably allowed by a simple 
      specialization delivery. Functionality beyond the confines of simple specialization is always welcome, but must be 
      contributed by working with the DTP core frameworks and tools committers to ensure that it is delivered in a vendor 
      neutral way as part of DTP core, and hence available to any DTP extender.</p>
      <p><b>Why Enablement?</b> Back in 2006, John Graham <a href="http://dataplat.blogspot.com/2006/05/device-driver-problem.html" target="_blank">blogged</a> 
      about why Enablement is good for DTP, and good for the Eclipse ecosystem. </p>
		</div>
		<hr class="clearer">
		<div class="homeitem3col">
			<h3>What's New</h3>
			<ul>
				<li><b>December 2008:</b> Added support for SQLite and Ingres databases! See <a href="http://fitzdtp.blogspot.com/2008/12/new-db-support-in-dtp-for-galileo.html">Brian Fitzpatrick's (aka "Fitz") blog</a> for some additional info about Galileo-related Enablement news.</li> 
				<li>
					<b>July 12, 2006: </b>Enablement project passes Creation Review! 
    	  (<a href="enablement_doc/dtp_enablement_creation_review.ppt" target="_blank">Creation Review Presentation</a>)
			    </li>
			</ul>				
		</div>
		
		<div class="homeitem3col">
			<h3>Project Components</h3>
    <p>Based on the Enablement proposal, we started with the following components planned for Enablement:</p>
    <ul>
    	<li>Actuate: For an XML data source</li>
    	<li>IBM: For IBM databases - DB2 and Informix</li>
    	<li>Sybase: For Sybase databases - ASE and ASA</li>
    </ul>
    <p>Since then, we've also added support in Enablement for:</p>
    <ul>
    	<li>HSQLDB</li>
    	<li>Ingres</li>
    	<li>Microsoft SQL Server</li>
    	<li>MySql</li>
    	<li>ODA Web Services Data Source</li>
    	<li>Oracle</li>
    	<li>PostgreSQL</li>
    	<li>SAP MaxDB</li>
    	<li>SQLite</li>
    </ul>
    <p>So as you can see, we've been busy. The community has contributed time and effort to either contribute large chunks of code for various databases or by helping to improve existing implementations.</p>
    <p><b>Get involved in Enablement!</b> Send e-mail to the <a href="mailto:dtp-pmc@eclipse.org">PMC</a> directly to discuss collaboration opportunities.</p>
		</div>
	</div>
<?

	$html = ob_get_clean();

	# New stuff for About this Project links...
	$Nav->setLinkList( array() );
	$Nav->addNavSeparator( "DTP Enablement", "/datatools" );
	$Nav->addCustomNav( "About This Project",
	    "/projects/project_summary.php?projectid=datatools.enablement", "", 1  );
	$Nav->addCustomNav( "Wiki",
	    "http://wiki.eclipse.org/Enablement", "", 1  );

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>