<?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 to be completed by April 23, 2012. 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);
?>
