<?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 		= "Eclipse Data Tools Platform (DTP) Project";
	$pageKeywords	= "eclipse, data tools, dtp, datatools";
	$pageAuthor		= "Linda Chan";
	
	ob_start();
	?>
	<div id="midcolumn">
		<h1><?=$pageTitle; ?></h1>
		<div class="homeitem3col">
			<h3>Project Overview</h3>
			<p>"Data Tools" is a vast domain, yet there are a fairly small number of foundational requirements when developing with or managing data-centric systems. A developer is interested in an environment that is easy to configure, one in which the challenges of application development are due to the problem domain, not the complexity of the tools employed. Data management, whether by a developer working on an application, or an administrator maintaining or monitoring a production system, should also provide a consistent, highly usable environment that works well with associated technologies.</p>
			<p>Such an environment starts with key frameworks designed both for use and extensibility. Examples include location and management of data source drivers, and configurations for access to particular data source instances. Once a connection is successfully made, the next task often is to explore the data source, making changes as required. Some of these operations might be carried out by GUI actions, others directly through commands. For example, users - both developers and administrators - typically will create, edit, and test SQL for these commands. Assistance in editing SQL through code completion, formatting, and dialect specialization, greatly enhances productivity. Further, the ability to execute or debug commands, both SQL and stored procedures, rounds out the rapid development process that Eclipse supports so well. Finally, bridging chasms, whether between relational, object, or other structures, presents challenges that data management tooling should address.</p>
			<p>The Data Tools Platform project is an open source project of eclipse.org, overseen by a <a href="/datatools/leadership.php">Project Management Committee (PMC) and project leaders.</a></p>
		</div>
		<hr class="clearer">
		<div class="homeitem">
			<h3>What's New</h3>
			<ul>
				<li><a href="downloads.php">June 22, 2011: DTP 1.9 (Indigo) released</a></li>
				<li><a href="downloads.php">February 25, 2011: DTP 1.8.2 (Helios SR2) released</a></li>
				<li><a href="downloads.php">September 24, 2010: DTP 1.8.1 (Helios SR1) released</a></li>
				<li><a href="downloads.php">June 24, 2010: DTP 1.8 (Helios) released</a></li>
				<li><a href="downloads.php">February 26, 2010: DTP 1.7.2 released</a></li>
				<li><a href="downloads.php">September 25, 2009: DTP 1.7.1 released</a></li>
				<li><a href="downloads.php">June 26, 2009: DTP 1.7 (Galileo) released</a></li>
				<li><a href="downloads.php">February 25, 2009: DTP 1.6.2 released</a></li>
				<li><a href="downloads.php">September 24, 2008: DTP 1.6.1 released</a></li>
				<li>August 25, 2008: Ingres Enablement project completed CQ approval and will be added as part of Galileo</li>	
				<li><a href="downloads.php">June 25, 2008: DTP 1.6 released</a></li>	
				<li><a href="doc/20080520_DTP_Help-Helper.pdf" target="_blank">May 20, 2008: DTP Help-Helper Plug-in adopter documentation updated</a></li>
				<li><a href="doc/20080310_DTP_Help-Helper.pdf" target="_blank">March 20, 2008: DTP Help-Helper Plug-in adopter documentation</a></li>
				<li><a href="downloads.php">February 26, 2008: DTP 1.5.2 released</a></li>	
				<li><a href="downloads.php">September 27, 2007: DTP 1.5.1 released</a></li>
				<li><a href="downloads.php">June 29, 2007: DTP 1.5 released</a></li>
				<li><a href="downloads.php">December 22, 2006: DTP 1.0 released</a></li>
			</ul>				
		</div>
		
		<div class="homeitem">
			<h3>Project Principles</h3>
			<p>The Data Tools Platform (DTP) project will include extensible frameworks and exemplary tools, enabling a diverse set of plug-in offerings specific to particular data-centric technologies and supported by the DTP ecosystem. In the spirit of Eclipse, the project will be guided by the following values:</p>
			<ul>
				<li>Vendor neutrality</li>
				<li>Extensibility</li>
				<li>Community Involvement</li>
				<li>Transparency</li>
				<li>Agile development</li>
			</ul>			
		</div>
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Getting Started</h6>
			<ul>
				<li><a href="http://wiki.eclipse.org/index.php/Data_Tools_Platform_Project">DTP Wiki</a></li>
				<li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&classification=DataTools&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=helpwanted&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">DTP "helpwanted" bugs list</a></li>
				<li><a href="http://wiki.eclipse.org/index.php/Getting_Started_with_DTP">Getting Started Guide</a></li>
				<li><a href="http://www.eclipsezone.com/articles/graham-dtp/?source=archives">Overview Article on EclipseZone</a></li>
				<li><a href="http://wiki.eclipse.org/index.php/Specialized_Database_Support">Specialized Database Support for DTP</a></li>
				<li><a href="http://www.eclipse.org/datatools/presentations/106.%20How%20to%20Improve%20Database%20Connectivity%20With%20the%20Data%20Tools%20Platform.pdf">EclipseWorld 2006 Presentation: How to Improve Database Connectivity</a></li>
				<li><a href="http://www.eclipse.org/datatools/presentations/Data%20Tools%20for%20Rich%20Clients.pdf">EclipseCon 2006 Presentation: Data Tools for Rich Clients</a></li>
				<li><a href="http://www.eclipse.org/datatools/presentations/EclipseEuropeSummit_DTP_Presentation.pdf">Eclipse Summit Europe 2006 Presentation</a></li>
				<li><a href="http://www.eclipse.org/datatools/downloads.php">Download DTP</a></li>
			</ul>
		</div>
	</div>
<?

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