<!--
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.

	Please keep the formatting in this document simple. Please do not edit
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.

	More information is available here:

	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase

	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!--
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>Flex Modularity Framework (Potomac)</title>
</head>

<!--
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->

<style>
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
</style>

<body>
<p>The Flex Modularity Project (Potomac) is a proposed open source project under the <a
	href="http://www.eclipse.org/projects/project_summary.php?projectid=rt">Eclipse Runtime Project</a>.</p>

<p>This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the <a href="http://www.eclipse.org/forums/eclipse.potomac">Potomac</a>
Eclipse Forum.</p>

<h2>Background</h2>

Since its creation, Eclipse has been in the fore-front of Java modularity.  From the original plug-in capabilities, to today's Equinox implementation of OSGi and the Eclipse RCP, Eclipse has tackled tough modularity issues and brought advanced modularity capabilities into the hands of Java developers everywhere.  In 2009, <a href="http://www.elementriver.com">ElementRiver</a> introduced a new framework named Potomac to bring those same capabilities to Adobe's Rich Internet Application platform: Flex.
<p>
The Potomac framework was heavily inspired by both the Eclipse RCP and OSGi.  As Flex use continues to grow in enterprise environments, more and more Flex developers are looking for frameworks that understand the tough problems that arise in modular applications.  Potomac seeks to solve these problems and bring the advanced features which Eclipse has championed for Java, to Flex.
<p>
<a href="http://www.elementriver.com">ElementRiver</a> proposes to bring the existing Potomac Framework for Flex (<a href="http://www.potomacframework.org">www.potomacframework.org</a>) to Eclipse.org.

<h2>Scope</h2>

The objectives of The Flex Modularity Project (Potomac) are:
<ul>
<li>Bring OSGi-like capabilities to Flex</li>
<li>Provide an extensibility mechanism similar to Eclipse extension points</li>
<li>Implement a modular UI framework similar to the Eclipse RCP</li>
<li>Supply developer tooling in support of Potomac</li>
<li>(Long term) Enable Potomac Flex components to be hosted inside an e4 application</li>
</ul>

<h2>Description</h2>

The Flex Modularity Project (Potomac) will provide a comprehensive framework for enterprise Flex development.  Potomac will be 100% Flex and Actionscript code and will not have any server-side requirements or dependencies.



<h3>Core Modularity</h3>
At its core, Potomac will provide a new paradigm for modular development with Flex.  A Potomac bundle will be similar to an Eclipse plug-in or OSGi bundle.  It will contain not only the classes and code, but also the metadata necessary to understand module dependencies, extensions and extension points, and more.  Potomac will supply tooling to Adobe's Flash Builder 4 to support Potomac bundle development.  This tooling is conceptually similar to PDE, but currently much smaller.  It is important to note that, while Potomac is heavily inspired by OSGi and the Eclipse RCP, there will be no attempt to conform to the OSGi specification or to exactly copy Eclipse.  Flex and Flash limitations prevent a fully functioning OSGi implementation.  Regardless, Potomac will attempt to do things 'the Flex way'.  In order to stay true to the Flash platform, Potomac will make design decisions and take direction that may differ from the current Eclipse framework.

<h3>Dependency Injection</h3>

Potomac will provide dependency injection.  This dependency injection will be both asynchronous and 'bundle-aware'.  When an injection request is serviced, Potomac will load any bundles required to satisfy the request.  If a bundle that is not yet loaded is required, it will be downloaded from the server and loaded asynchronously.  This will happen behind the scenes, without any complex coding required from the application developer.

<h3>User Interface</h3>

The UI of a Potomac application will be broken up into composable elements similar to the Eclipse RCP.  Each Potomac part will provide features commonly needed by business applications such as input handling,save/dirty workflow, busy state, and selection management.  Developers familar with the concepts and paradigms of an Eclipse RCP application will easily understand the architecture of the Potomac UI.

<h3>


<h2>Initial Contribution</h2>

<a href="http://www.elementriver.com">ElementRiver</a> will provide a significant initial contribution including all code from the existing Potomac framework found on <a href="http://www.potomacframework.org">www.potomacframework.org</a>.

<h2>Adobe Committment</h2>

While its possible to develop and use Potomac without Adobe's Flash Builder IDE, it would be inconvenient.  In order to comply with the Eclipse rules on proprietary tools yet still use a full featured Flex IDE, Adobe has graciously agreed to provide each Potomac committer with a free license for Flash Builder 4.

<h2>Committers</h2>


<p>The following individuals are proposed as initial committers to the project:</p>

<dl>
	<dt>Chris Gross (ElementRiver), proposed project lead</dt>
	<dt>Steve Moore (ElementRiver)</dt>
</dl>


<h2>Mentors</h2>


<p>The following Architecture Council members will mentor this
project:</p>

<ul>
	<li>TBD</li>
	<li>TBD</li>
</ul>

<h2>Interested Parties</h2>


<p>The following individuals, organisations, companies and projects have
expressed interest in this project:</p>

<ul>
	<li>Adobe</li>
	<li>Turner Broadcasting System, Inc.</li>
</ul>

<h2>Project Scheduling</h2>

<ul>
	<li>July 15, 2010 - Potomac code available in Eclipse repository</li>
	<li>September 1, 2010 - Potomac v1.0 release</li>
</ul>


</body>
</html>