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

	#*****************************************************************************
	#
	# index.php of Java Workflow Tooling (JWT)
	#
	# Author: 		Florian Lautenbacher
	# created:		2007-02-26
	# last changed: 2007-10-12
	#
	# Description: The start 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		= "Florian Lautenbacher";
	
	# 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)
	# Reiniting navbar content (suppresses generic Eclipse links Committers, Newsgroups, Bugs, Articles) :
	# $Nav->setLinkList( array() );

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

	<div id="midcolumn">
		<h1>Java Workflow Tooling (JWT)</h1>
		
		<p>
		The <em>Java Workflow Tooling project (JWT)</em> aims to build design time, development 
		time and runtime workflow tools in order to provide a complete, flexible, 
		interoperable Business Process Management platform.
		</p>
		
		<p>
		This is achieved through an extensible architecture allowing to support many 
		different BP representations, format languages and execution engines. The set 
		of JWT tools is meant to allow for "Distribution"-like releases with specific 
		extensions targeting specific platforms or problems, e.g. JWT for SOA. The 
		mission and philosophy of JWT makes it natural complement to other Eclipse 
		projects, such as the friend <a href="http://www.eclipse.org/stp/">SOA Tools Platform Project</a>.
		</p>

		<a href="/jwt/images/jwtwe_process.gif" target="_blank"><img src="/jwt/images/index.gif"/></a>
	
		<hr class="clearer" />
		
		<div class="homeitem">
			<h3>Documentation</h3>
			<img align="right" src="/jwt/images/item_documentation.gif" alt="documentation" />
			<ul>
				<li><a href="http://wiki.eclipse.org/Java_Workflow_Tooling_Project">Java Workflow Tooling Wiki</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_FAQ">Frequently Asked Questions (FAQ)</a></li> 
				<li><a href="http://wiki.eclipse.org/Java_Workflow_Tooling_Project#JWT_Installation_and_Usage_Documentation">Documentation (Documents, Screencasts, Links)</a></li> 
				<li><a href="http://www.eclipse.org/jwt/components/we/docs/JWTWorkflowEditorUsageTutorial.pdf">Tutorial for the Workflow Editor (0.5.0)</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Extensions">How to Extend JWT through Plugins</a></li> 
			</ul>
		</div>

		<hr class="clearer" />

		<div class="homeitem">
			<h3>Community and Development</h3>
			<img align="right" src="/jwt/images/item_community.gif" alt="community" />
			<ul>
				<li><a href="http://wiki.eclipse.org/JWT_Brainstorming">Current Discussions</a></li> 
				<li><a href="http://wiki.eclipse.org/index.php/JWT_DeveloperFAQ">Developer FAQ</a></li> 
				<li><a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jwt/?root=Technology_Project">CVS Repository</a></li> 
				<li><a href="news://news.eclipse.org/eclipse.technology.jwt">Newsgroup</a> (<a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.jwt">Web Interface</a>)</li>
				<li><a href="https://dev.eclipse.org/mailman/listinfo/jwt-dev">Mailing List</a> (<a href="http://dev.eclipse.org/mhonarc/lists/jwt-dev/maillist.html">Archive</a>)</li> 
				<li><a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&product=JWT&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Reuse+same+sort+as+last+time">Open Bugs and Requests</a> (<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JWT">Report Bug</a>)</li> 
			</ul>
		</div>
		
		<div class="homeitem">
			<h3>Project Resources</h3>
			<img align="right" src="/jwt/images/item_download.gif" alt="download" />
			<ul>
				<li><a href="http://wiki.eclipse.org/JWT_Downloads">All Downloads</a></li> 
				<li><a href="http://www.eclipse.org/downloads/download.php?file=/technology/jwt/org.eclipse.jwt.we_0.5.0.jar">Download the Workflow Editor (0.5.0)</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_CVS">Get the Source Code from CVS</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Upcoming_Release">Upcoming Release Information</a></li> 
				<li><a href="http://download.eclipse.org/technology/jwt/update-site/">Eclipse Update Site for JWT</a></li> 
			</ul>
		</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 align="center">  
         		This project is in the 
         		<a href="/projects/dev_process/validation-phase.php">Incubation Phase</a>
       		</div>
 		</div>
 				
 		<div class="sideitem">
 			<h6>New to JWT?</h6>
 			<ul>
 				<li><a href="/jwt/pages/about.php">About JWT</a></li>
 				<li><a href="http://wiki.eclipse.org/Java_Workflow_Tooling_Project">Wiki</a></li>
 				<li><a href="http://wiki.eclipse.org/JWT_Downloads">Downloads</a></li>
 				<li><a href="http://pvs.informatik.uni-augsburg.de/wiki/index.php/AgilPro_documentation">Documentation</a></li>
 				<li><a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.jwt">Newsgroup</a></li>
 				<li><a href="https://dev.eclipse.org/mailman/listinfo/jwt-dev">Mailing List</a></li>
 				<li><a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JWT">Report Bug</a></li>
 				<li><a href="/jwt/press/index.php">JWT in the press</a></li>
 			</ul>
 		</div>
 		
 		<div class="sideitem">
			<h3>What's new</h3>
			<ul>
				<li><strong>March, 10th 2009:</strong> We now switched to the new Nova design of Eclipse as discussed in the last project telco.
				Such a telco happens every three weeks. If you are interested, have a look at our <a href="http://wiki.eclipse.org/JWT_Meetings">Wiki</a>.
				<li><strong>January, 22nd 2009:</strong> JWT will be presented at <a href="http://www.eclipsecon.org/2009/sessions?id=292">EclipseCon</a> as well as at <a href="http://it-republik.de/konferenzen/efe/sessions/?tid=1077">Eclipse Forum Europe</a>.
				</li>
				<li><strong>January, 21st 2009:</strong> JWT will be part of the upcoming Eclipse release Galileo. <a href="http://wiki.eclipse.org/Galileo">Learn more</a> about Galileo. 
				</li>
			    <li><a href="/jwt/newsarchive.php">News archive</a>
			    </li>
			</ul>
		</div>
 		 		
	</div>

EOHTML;

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