<?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'

	#*****************************************************************************
	#
	# /components/we/index.php of Java Workflow Tooling (JWT)
	#
	# Author: 		Christian Saad
	# created:		2008-11-13
	#
	# Description: The older news page of the Java Workflow Tooling project
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Java Workflow Tooling (JWT)";
	$pageKeywords	= "JWT , Java Workflow Tooling Project, Workflow Editor, Workflow Administration and Monitoring, Eclipse";
	$pageAuthor		= "Christian Saad";
	
	# 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)

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>Java Workflow Tooling (JWT)</h1>
		
		<div class="homeitem3col">
			<h3>News archive</h3>
				<p>
					<li><strong>November, 27th 2008:</strong> JWT welcomes it's new mentor John Graham. John agreed to assist us in the Eclipse process, automating building tasks, etc. 
					</li>
					<li><strong>October, 29th 2008:</strong> JWT 0.5.0 has been released. It can be downloaded <a href="http://wiki.eclipse.org/JWT_Downloads#Java_Workflow_Tooling_0.5.0">here</a>.
					</li>
					<li><strong>October, 22th 2008:</strong> The release review for JWT 0.5.0 is scheduled for October, 29th.
					</li>
					<li><strong>September, 25th 2008:</strong> We are currently preparing the next release (0.5.0) which will include several improvements on the Workflow Editor as well as the first transformations. 
					Probably available in a few days.				
					</li>				
					<li><strong>March, 4th 2008:</strong> The first version (0.4.0) of the Workflow Editor is finally available as an Eclipse plugin. 
					Check it out at the <a href="components/we/index.php">Workflow Editor</a>-page.				
					</li>
					<li>On <strong>October, 11th 2007</strong> one of the project leads held a presentation about the JWT project at the
					Eclipse Summit Europe 2007. Find the presented slides <a href="/jwt/press/ese07/EclipseSummitEurope2007_JWT_presentation.ppt">here</a>.
				    </li>
				</p>
				<br/>
		</div>	
		<hr class="clearer">	
	</div>
	<div id="rightcolumn">
    	 <div class="sideitem">
   			<h6>Incubation</h6>
   			<div align="center"><a href="/projects/what-is-incubation.php"><img 
        			align="center" src="/images/egg-incubation.png" 
        			border="0" alt="Incubation" /></a></div>
 		</div>       		
	</div>

EOHTML;


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