<?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: 		Bob Fraser
# Date:			2007-01-10
#
# Description: Type your page comments here - these are not sent to the browser
#
#
#****************************************************************************

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Web Tools Platform (WTP) Project";
$pageKeywords	= "web,J2EE";
$pageAuthor		= "Bob Fraser";

$root = $_SERVER['DOCUMENT_ROOT'];
// Import the functions that render news.
// require_once ($root . '/webtools/news.php');
// Import common WTP functions.
require_once ($root . '/webtools/common.php');
require_once ($root . '/webtools/newstohtml.php');

// Generate the HTML content for the news based on the news.xml file
// that appears in the root directory.
$newsTitle = "Eclipse Web Tools Platform Project: News";
$wtpnews = news_to_html($root . "/webtools/news.xml", "$newsTitle", "/webtools/news/", "/webtools/news.php", true, "long", "5");

// Get the project descriptions
$wtpoverview = read_file($root . '/webtools/project-info/description.html');
$commonoverview = read_file($root . '/webtools/project-info/common-description.html');
$ejboverview = read_file($root . '/webtools/project-info/ejb-description.html');
$jeeoverview = read_file($root . '/webtools/project-info/jee-description.html');
$rdboverview = read_file($root . '/webtools/project-info/rdb-description.html');
$serveroverview = read_file($root . '/webtools/project-info/server-description.html');
$sseoverview = read_file($root . '/webtools/project-info/sse-description.html');
$wsoverview = read_file($root . '/webtools/project-info/ws-description.html');
$dalioverview = read_file($root . '/webtools/project-info/dali-description.html');
$jsfoverview = read_file($root . '/webtools/project-info/jsf-description.html');
$incoverview = read_file($root . '/webtools/project-info/inc-description.html');
$relengoverview = read_file($root . '/webtools/project-info/releng-description.html');
# Add page-specific Nav bars here
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<div id="midcolumn">
<div class="wtpbanner">
<h1>$pageTitle</h1>
<table>
<tr>
<td>
<p>
$wtpoverview
<br />
<a href="about.php">more about wtp &raquo;</a>
</p>
</td>
<td>
<img src="/webtools/images/wtplogosmall.jpg" align="middle" height="129" hspace="50" width="207" alt="WTP Logo" usemap="logomap" />
<map id="logomap" name="logomap">
<area coords="0,0,207,129" href="/webtools/" alt="WTP Home" />
</map>
</td>
</tr>
</table>
</div>
<div class="homeitem">
$wtpnews
</div>
<div class="homeitem">
<h3>Subprojects</h3>
<ul>
<li>
<b>Common Components</b>&nbsp;<a href="common/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$commonoverview
<br /> <a href="common/">more about common components &raquo;</a>
</li>
<li>
<b>Dali JPA Tools</b>&nbsp;<a href="dali/main.php"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$dalioverview
<br /> <a href="dali/main.php">more about dali &raquo;</a>
</li>
<li>
<b>EJB Tools</b>&nbsp;<a href="ejb/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$ejboverview
<br /> <a href="ejb/">more about EJB Tools&raquo;</a>
</li>
<li>
<b>Java EE Tools</b>&nbsp;<a href="jee/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$jeeoverview
<br /> <a href="jee/">more about Java EE Tools&raquo;</a>
</li>
<li>
<b>JavaServer Faces Tools (JSF)</b>&nbsp;<a href="jsf/main.php"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$jsfoverview
<br /> <a href="jsf/main.php">more about jsf &raquo;</a>
</li>
<li>
<b>Release Engineering (releng)</b>&nbsp;<a href="releng/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$relengoverview
<br /> <a href="server/">more about Releng&raquo;</a>
</li>
<li>
<b>Server Tools</b>&nbsp;<a href="server/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$serveroverview
<br /> <a href="server/">more about Server Tools&raquo;</a>
</li>
<li>
<b>Source Editing</b>&nbsp;<a href="sse/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$sseoverview
<br /> <a href="sse/">more about source editing&raquo;</a>
</li>
<li>
<b>Web Services Tools</b>&nbsp;<a href="ws/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$wsoverview
<br /> <a href="ws/">more about Web services tools&raquo;</a>
</li>
<li>
<b>WTP Incubator</b>&nbsp;<a href="ws/"><img src="/images/more.gif" title="More..." alt="More..." /></a>
<br />
$incoverview
				<br /> <a href="incubator/">more about WTP Incubator&raquo;</a>
    		</li>
    	</ul>
	</div>
</div>
<div id="rightcolumn">
	<div class="sideitem">
		<h6>Related Links</h6>
		<ul>
			<li><a href="http://download.eclipse.org/webtools/downloads/">Downloads</a></li>
			<li><a href="http://wiki.eclipse.org/Category:Eclipse_Web_Tools_Platform_Project">Wiki</a></li>
		</ul><div style="text-align: center;">
			<a href="/webtools/community/"><img src="/webtools/images/learnWTP.png"/></a>
		</div>
	</div>
</div>
EOHTML;

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