<?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/forums/index.php?t=thread&frm_id=43">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>May 4, 2012 &ndash; BPEL Designer version 1.0 Release Review Declared Successful! Spontaneous dancing in the streets ensues...</b>
				The <a href="http://download.eclipse.org/bpel/site/">update site</a> now contains version 1.0 of the BPEL Designer.
				The previous version 0.8.0 is still available <a href="http://download.eclipse.org/bpel/0.8.0/helios/archive/site/target/repository/">here</a>.
				May the 4th be with you.
				</li>
     		
				<li><b>April 12, 2012 &ndash; BPEL Designer is graduating!</b>
				OK, so we missed the M6 milestone by a year, but a version 1.0 release review is finally in the works
				and is scheduled for the week of April 23, 2012 with a conclusion target date of May 2.
				Please refer to the
				<a href="/bpel/docs/BPEL-1.0-ReleaseReview.pdf">review documentation</a> for details.
				Now it's time to reset the
				<a href="/bpel/developers/milestone_plan.php">milestone plan</a> and figure out
				where we want to be a year from now. Please post your suggestions and comments
				on the <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=43">BPEL Forum</a>
				or the <a href="http://dev.eclipse.org/mailman/listinfo/bpel-dev">developer mailing list</a>. 
				</li>
     			
     			<li>
     			<b><a href="/$projectShortName/archive/new-n-noteworthy.php">Read More...</a></b>
     			</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);
?>
