<?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: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "BPEL Designer Project";
	$pageKeywords	= "BPEL, SOA, WSDL, Eclipse";
	$pageAuthor		= "BPEL Team";
	
	# 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("Interesting Links", 	"");
	# $Nav->addCustomNav("Scientific Workflows using BPEL", "http://sse.cs.ucl.ac.uk/index.php?id=omii-bpel", "_blank", 1);
	# $Nav->addCustomNav("WS-BPEL 2.0", "http://docs.oasis-open.org/wsbpel/2.0/wsbpel-v2.0.html", "_blank", 1);
	# $Nav->addCustomNav("OASIS TC", "http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsbpel", "_blank", 1);
	
	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML


<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<table width=100%>
			<tr>
				<tr>
					<td>
						<a align="top" href="/$projectShortName/users.php">
							<img border=0 src="images/reference.png">
						</a>
					</td>
					<td>
						<a href="/$projectShortName/users.php">Read The Documentation!</a>
						<br/>
						Read papers, articles and presentations, browse the <a href="http://wiki.eclipse.org/BPEL">wiki pages</a>.
					</td>
					<td rowspan=3 align=right>
						<img height="200" src=images/conductor-4.jpg>
					</td>
				</tr>
				<tr>
					<td>
						<a href="/$projectShortName/downloads.php">
							<img border=0 src="images/downloads.gif">
						</a>
					</td>
					<td>
						<a href="/$projectShortName/downloads.php">Try it out!</a>
						<br/>
						Try the latest milestone and see how it works.
					</td>
				</tr>
				<tr>
					<td>
						<a href="/$projectShortName/developers.php">
							<img border=0 src="images/community.jpg">
						</a>
					</td>
					<td>
						<a href="/$projectShortName/developers.php">Get involved!</a>
						<br/>
						Get in touch with the community: Join the <a href="https://dev.eclipse.org/mailman/listinfo/bpel-dev">mailing list</a>,
						browse the <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.bpel-designer">newsgroup</a>,
						check <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=BPEL">Bugzilla</a>, contact the <a href="team.php">BPEL Team</a>
					</td>
				</tr>
				<tr height=11>
				</tr>
		</table>

		<div class="homeitem3col">
			<h3>New &amp; Noteworthy</h3>
     		<ul>
				<li><b>Sept. 17, 2010 &ndash; Good news everyone!</b>
				The
				<a class="www" href=$update_site target="download">update site</a>
				has been updated and we are now doing nightly builds.
				The previous build (0.4.0) is still <a class="www" href=$update_site-M4 target="download">available here.</a>
				</li>
     		
     		
				<li><b>Sept. 10, 2010 &ndash; Next milestone plan (M5) announced</b>
				A "code stabilization" plan is in the works. <a href="/$projectShortName/users/m5.php">Check it out here</a>.
				<a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.bpel-designer">Comments and suggestions are always welcome!</a>
				</li>
     		
				<li><b>Sept. 7, 2010 &ndash; New project website is up!</b>
				If you can read this and your browser hasn't crashed yet, life is good :)
				</li>
				<li><b>Sept. 1, 2010 &ndash; M4 release is available</b>
				Check out the latest
				<a href="/$projectShortName/users/m4.php">bug fixes and enhancements.</a>
				</li>
				</ul>
		</div>
		
		<div class="homeitem3col">
			<h3>What is BPEL Designer?</h3>
			<a href="images/screenshot.png">
				<img align="left" style="margin: 0px 20px 0px 10px;" width="180" src="images/outline.png" alt="Outline"
				 onMouseOver="document.linkdescrip.style.display = 'block';" onMouseOut="document.linkdescrip.style.display = 'none';"/>
				 </a>
<span id="linkdescrip" name="linkdescrip" style="display:none;">
This link is about...
</span>
			<p>
				The goal of the BPEL Project is to add comprehensive support to Eclipse for the definition,
				authoring, editing, deploying, testing and debugging of WS-BPEL 2.0 processes. WS-BPEL (Web Services Business Process Execution Language), 
				or BPEL, is a vendor-neutral specification being developed by OASIS to specify business processes as a set of interactions between web 
				services. By providing these tools, this project aims to build a community around support for BPEL in Eclipse.
			</p>
			<p>
				The implementation will be extensible to third-party vendors in a number of ways. The editor will be
				extensible to support new activity types, property pages for extensibility of existing constructs,
				an extensible palette, and product-specific branding capabilities. The runtime deployment framework
				will be extensible so that third parties may add support for a variety of runtime engines. The model
				will support extensions to provide new activities or attributes, and the validator will allow for
				validation of these extensions.
			</p>
			<p>
				While the key features for a 1.0 release are identified below, we welcome suggestions of additional areas
				in which this project could participate. Anyone who has ideas is welcome to make comments or proposals
				to the newsgroup and assist with the evolution of the project.
			</p>
			
			
		</div>
		
		
		<div class="homeitem3col">
			<h3>The Key Features</h3>
     		<ul>
				<li><b>Designer</b>. A GEF-based editor that provides a graphical means to author BPEL processes.</li>
				<li><b>Model</b>. An EMF model that represents the WS-BPEL 2.0 specification.</li>
				<li><b>Validation</b>. A validator which operates on the EMF model and produces errors and warnings based on the specification.</li>
				<li><b>Runtime Framework</b>. An extensible framework which will allow for deployment and execution of BPEL processes from the tools into a BPEL engine.</li>
				<li><b>Debug</b>. A framework which will allow the user to step through the execution of a process, including support for breakpoints.</li>
    		</ul>
		</div>
		
	</div>
		
	$rightcolumn_links
	
</div>


EOHTML;


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