<?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>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>June 28, 2011 &ndash; We're moving!</b>
				We are planing on moving the BPEL Designer project from
				<a href="http://www.eclipse.org/technology">Technology project</a>
				to the
				<a href="http://www.eclipse.org/soa">SOA top-level project</a>.
				The restructuring document which outlines the details of this move can be found
				<a href="http://wiki.eclipse.org/BPEL_Restructuring">in the project wiki, here</a>.
				This web page will be updated as we get closer to the move date.
				</li>
     		
				<li><b>Mar. 10, 2011 &ndash; Updated extension activity samples.</b>
				Several of you in the community have been asking about extension activities and how to
				more fully integrate them with the editor.
				
				The updated sample code includes extended property section tabs for the simple and
				structured extension activities as well as exemplary code demonstrating how to handle
				references to the existing BPEL model.
				
				The sample plug-ins can be found here in the
				<a class="www" href="https://git.eclipse.org/c/bpel/org.eclipse.bpel.git/tree/examples/plugins">Git repository</a> 
				</li>
     		
				<li><b>Feb. 15, 2011 &ndash; Proposal for UI enhancements.</b>
				One of our committers has been busy thinking about how to improve the BPEL Designer user experience.
				Read all about it
				<a href="/$projectShortName/users/pdf/BPEL_UI_Enhancements_v1.0.pdf">here.</a>
				</li>
     		
     		
				<li><b>Feb. 14, 2011 &ndash; CVS Commit Notification Mailing List is now available.</b>
				Please visit
				<a class="www" href="https://dev.eclipse.org/mailman/listinfo/bpel-commits">the Eclipse mailing list subscription page</a>
				to sign up.
				</li>
     		
				<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/forums/index.php?t=thread&frm_id=43">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);
?>
