<?php
/*******************************************************************************
 * Copyright (c) 2010 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *
 *******************************************************************************/
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 ());

$localVersion = false;

$pageTitle = "Eclipse BPMN2 Modeler";

// # Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<div id="bigbuttons">
<h3>Primary Links</h3>
<ul>
<li><a id="buttonDownload" href="downloads.php" title="Download">
	BPMN2 Modeler Software Install Site</a></li>
<li><a id="buttonDocumentation" href="documentation.php" title="Documentation">
	Tutorials, Examples, Videos, Reference Documentation</a></li>
<li><a id="buttonSupport" href="support.php" title="Support">
	Bug Tracker, Newsgroup</a></li>
<li><a id="buttonInvolved" href="developers.php" title="Getting Involved">
	CVS, Workspace Setup, Wiki, Committers</a></li>
</ul>
</div>

<div id="midcolumn">

<div id="introText">

<h1>BPMN2 Modeler</h1>

		<p>
		The Eclipse BPMN2 Modeler is a graphical modeling tool for authoring business processes.
		The primary goal of BPMN2 Modeler was to provide a graphical workflow editing framework,
		which can be easily customized for any BPMN 2.0 compliant execution engine.
		</p>
		
<h1>Background</h1>
		<p>
		<a href="http://www.omg.org/spec/BPMN/2.0/">Business Process Model and Notation</a>
		is an XML language which was proposed by the
		<a href="http://www.omg.org">Object Management Group</a> (OMG), as a notation for describing
		not only business workflows (a.k.a. "processes")
		but also higher-level collaborations between internal or external business partners and the
		choreography of information exchanged between these business partners.
		</p>
		<p>
		The BPMN language was intended for users at all levels, from the business analysts who
		create the initial design, to the developers who implement the technical details,
		and finally, to the business users responsible for managing and monitoring the processes.
		</p>
		<p>
		BPMN 2.0 has evolved to become a complex specification which tries to be all things to all people involved
		in the design of business processes.
		Because of this complexity, writing BPMN XML and visualizing business processes
		becomes nearly impossible without the use of a graphical tool.
		BPMN2 Modeler fills this need nicely by providing an intuitive user interface.
		It interprets the complexities of the BPMN language in the form of drawing canvases,
		tool palettes, property sheets and other familiar UI elements. 
		</p>
		
		<img class="displayed" src="/bpmn2-modeler/images/snapshots.gif" width="632" alt="BPMN2 Modeler Snapshots" border="0"/>
		
<h1>Extensibility</h1>
		<p>
		BPMN 2.0 introduces an extensibility mechanism that allows extending standard BPMN elements with additional attributes.
		It can be used by modelers and modeling tools to add non-standard elements or Artifacts to satisfy a specific need,
		such as the unique requirements of a vertical domain, and still have valid BPMN Core. 
		</p>
		<p>
		The goal of the Eclipse BPMN2 Modeler is to not only provide a graphical modeling tool,
		but also to allow plug-in developers to easily customize the behavior and appearance of the editor for specific BPM workflow engines
		that use this BPMN 2.0 extensibility mechanism.
		</p>

<h1>Architecture</h1>
		<p>
		The BPMN2 Modeler is built on the <a href="http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html">Eclipse Plug-in Architecture</a>
		and provides several extension points for customizing the editor's appearance and behavior.
		The <a href="https://wiki.eclipse.org/BPMN2-Modeler/DeveloperTutorials">Deveoper Tutorials Wiki pages</a> provide several examples and guidelines
		for extending the capabilities of Eclipse BPMN2 Modeler.
		</p>
		<p>
		The foundation of the BPMN2 Modeler is the <a href="http://www.eclipse.org/modeling/mdt/?project=bpmn2">Eclipse BPMN 2.0 EMF meta model</a>
		which is part of the <a href="http://www.eclipse.org/modeling/mdt/">Model Development Tools</a> (MDT) project.
		The model was originally developed by contributing members of the OMG BPMN 2.0 working group and is fully compliant with the spec.
		</p>

<h1>Getting Involved</h1>
		<p>
		Please visit our <a href="https://wiki.eclipse.org/BPMN2-Modeler">Wiki pages</a> or
		<a href="/bpmn2-modeler/developers.php">click here</a> for more information about how you can contribute to this project. 
		</p>
</div>

</div>

<div id="rightcolumn">

<div>
<h3>Current Status</h3>
<h4>March 30, 2016</h4>
		<b>BPM modeling for martians!</b>
		<p>
		Version 1.2.4 for Eclipse Mars is now available
		<a href="http://download.eclipse.org/bpmn2-modeler/updates/mars/1.2.4/">here</a>.
		See the <a href="whatsnew/whatsnew-1.2.4.php">New &amp; Noteworthy</a> page for what's new.
		</p>
		<b>BPM modeling on the moon!</b>
		<p>
		Version 1.1.5 for Eclipse Luna is now available
		<a href="http://download.eclipse.org/bpmn2-modeler/updates/luna/1.1.5/">here</a>.
		If you're still living on the moon, you'll be happy to hear about this 		
		release! It contains many critical bug fixes that have been back-ported from the Mars version of the editor.
		See the <a href="whatsnew/whatsnew-1.1.5.php">New &amp; Noteworthy</a> page for what's new.
		</p>
		</div>
<!--
<div>
<h3>In The News</h3>

<h4>Savara</h4>
<p>

The BPMN2 Modeler will be part of the community release of <a href="http://www.jboss.org/savara">JBoss Savara</a>.
Check out this very cool <a href="http://vimeo.com/53007939">demo video</a> by Gary Brown.


For more information, please read the <a href="http://docs.jboss.org/savara/releases/2.1.x/eclipseuserguide/html/sid-19693843.html">Savara user documentation</a>
</p>

<h4>jBPM 5.3</h4>
<p>The BPMN2 Modeler will be part of the community release of the <a href="http://www.jboss.org/jbpm">JBoss jBPM Suite</a>.

For more information, please read the <a href="http://docs.jboss.org/jbpm/v5.3/userguide/ch.eclipse-bpmn-plugin.html">jBPM user documentation</a>
</p>

</div>
-->
</div>
EOHTML;

// Generate the web page
$App->generatePage ( $theme, $Menu, null, $pageAuthor, $pageKeywords, $pageTitle, $html );

?>
