<?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>
				</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>What's New?</h3>
     		<ul>
     		
     			<li>
     			<b>May 30, 2015 &ndash; BPEL Designer Version 1.0.5</b> is now available.
     			Read all about it <b><a href="/$projectShortName/whatsnew/whatsnew-1.0.5.php">in the New &amp; Noteworthy page.</a></b>.
     			</li>
     			
     			<li>
     			<b><a href="/$projectShortName/archive/new-n-noteworthy.php">Older news...</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);
?>
