<?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: 2011-08-18
	#
	# 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>Download Java Workflow Tooling (JWT)</h1>

		<p/>

		<p>
		In short, the easiest is to install it from within <a href="http://www.eclipse.org/downloads">the latest Eclipse</a>. You can also get it from the JWT update site (<a href="http://download.eclipse.org/jwt/update-site/">link</a>). As an all-in-one alternative, you can install an <a href="#integrator">integrator's distribution</a>.
		</p>

		<p>
		<b>IMPORTANT</b> If you want to execute your processes, you need a compatible runtime. See their <a href="components/transformations/index.php">list</a> - or <a href="http://wiki.eclipse.org/JWT_Transformations#How_do_I_add_a_transformation_to_JWT.3F">write your own</a> export transformation.
		</p>

		<hr class="clearer" />

		<div class="homeitem">
			<h3>Get JWT with the latest Eclipse (JWT 1.3 with Eclipse 4.2 "Kepler")</h3>
			<ul>
				<li><b>1.</b> Start the latest Eclipse. If your don't have it, get it <a href="http://www.eclipse.org/downloads">there</a>. It requires <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java</a> (1.6 or later recommended).</li> 
				<li><b>2.</b> In the "Help" menu, click on "Install New Software". Then select JWT in the <b>SOA Development</b> category to automatically download JWT and its dependencies.</li>
				<li><b>3.</b> Finally restart Eclipse.</li>
			</ul>
		</div>

		<hr class="clearer" />
		
		<div class="homeitem">
			<h3>Get JWT from JWT's update site</h3>
			<ul>
				<li><b>1.</b> Start Eclipse. If your don't have it, get it <a href="http://www.eclipse.org/downloads">there</a>. It requires <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java</a> (1.6 or later recommended).</li> 
				<li><b>2.</b> In the "Help" menu, click on "Install New Software...". In the dialog, click on "Add..." and enter the URL of the <a href="http://download.eclipse.org/jwt/update-site/">JWT update site</a> . Then select JWT in the tree to automatically download JWT and its dependencies.</li>
				<li><b>3.</b> Finally restart Eclipse.</li>
			</ul>
		</div>
		
		<hr class="clearer" />
		
		<div class="homeitem">
			<a name="integrator"></a>
			<h3>Install an integrator's distribution</h3>
			<ul>
				<li><b><a href="http://sourceforge.net/projects/agilpro">AgilPro</a></b> is an Eclipse JWT-based business process modeling suite providing a <b>Modeler</b>, a <b>Simulator</b> desktop application, and Adapters for standard applications ( <b>Firefox, OpenOffice</b>).</li>
				<li><b><a href="http://scarbo.ow2.org">OW2 Scarbo</a></b> is an <b>SOA</b> BPM solution supporting <b>web services, RMI and SCA</b>, script, mail and semantics actions, and a server runtime based on <a href="http://www.ow2.org">OW2</a>'s <a href="http://bonita.ow2.org">Bonita</a> and <a href"http://frascati.ow2.org">FraSCAti</a> .</li> 
			</ul>
		</div>

		<hr class="clearer" />
		
		<!-- div class="homeitem">
			<h3>More Downloads</h3>
			<ul>
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#Other_products_based_on_JWT">All Integrators</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#All_Update_Sites">All Update Sites</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#Releases">All Releases</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads">All Downloads</a></li> 
			</ul>
		</div -->
			
	</div>
	
	<div id="rightcolumn">

 		<div class="sideitem">
 			<h6>JWT 1.3.0 (Current)</h6>
			Released on 2013-06-26 ( Get it in <a href="http://www.eclipse.org/downloads/">Eclipse 4.3 "Kepler"</a> )
			<p/>
			<i>New : BPMN view... </i>
 		</div>

 		<div class="sideitem">
 			<h6>JWT 1.3.1 (Upcoming)</h6>
			Upcoming on 2013-12-01 ( Test it in the <a href="http://download.eclipse.org/jwt/integration-update-site/">nightly builds update site</a> )
			<p/>
			<i>In the works : EasySOA export, EMF to CMIS transformation, jPDL export, desktop previewer...</i>
 		</div>

 		<div class="sideitem">
 			<h6>More Downloads</h6>
			<ul>
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#Other_products_based_on_JWT">All Integrators</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#All_Update_Sites">All Update sites</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads#Releases">All Releases</a></li> 
				<li><a href="http://wiki.eclipse.org/JWT_Downloads">All Downloads</a></li> 
			</ul>
 		</div>

 		<!-- div class="sideitem">
 			<h6>All Update Sites</h6>
			<ul>
				<li><a href="http://download.eclipse.org/jwt/update-site/">releases</a></li> 
				<li><a href="http://download.eclipse.org/jwt/stable-update-site/">latest stable build</a></li> 
				<li><a href="http://download.eclipse.org/jwt/integration-update-site/">Nightly builds</a> (for testing purposes only)</li> 
			</ul>
 		</div -->

 		<!-- div class="sideitem">
 			<h6>All Releases</h6>
			<ul>
				<h4>Older</h4>
				<li><b>JWT 0.4</b> released on 2008-02-29 (slides)
					<ul><li>New : Workflow Editor... </li></ul>
				</li>
			</ul>
 		</div -->
 		 		
	</div>

EOHTML;

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