<?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.5 with Eclipse 4.5 "Mars")</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.7 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.7 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.5.0 (Current)</h6>
			Released on 2015-06-24 ( Get it in <a href="http://www.eclipse.org/downloads/">Eclipse 4.5 "Mars"</a> )
			<p/>
			<i>New : Eclipse 4.5 support</i>
 		</div>

 		<div class="sideitem">
 			<h6>JWT 1.5.1 (Upcoming)</h6>
			Upcoming on 2015-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 : new Xtext-based editor that complements the current graphical editor for JWT models, 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);
?>
