Title:   The GNUe Application Platform (GAP) Overview
Status:  Obsolete
Created: 2006-03-27

There would be a great deal of benefit to having a single component
based framework that could be used to build GNUe applications.  Some 
of these benefits include

  * Reduction in application startup times.  As only the pieces needed
    for the specific application would be configured to load.
    
  * Smaller component APIs would reduce the overhead in learning the
    various systems in GNUe.
    
  * Better decoupling between components would result is cleaner code 
    base.
    
  * End site customizations would not require in depth knowledge of 
    GNUe internals.  Developers would only need to learn how to 
    register their components and the few APIs they'd need to code 
    against.

Goals:
======
  * produce a component based framework in which navigator is simply
    another component
  
  * properly document all aspects of this frameworks usage *and design*
  
  * integrate unit testing using both pyunit and doctest tests
  
  * use zope interfaces extensively and practice the design goal of
    "program to interface, not an implementation"
    
  * Produce framework that supports both non-UI and UI based applications
  
  * Provide a very generic UI framework that provides basic UI services.  
    Along with adaptors for WX2.6, QT4, and posibly curses

Implementation:
===============
Our test target application will be gnue-navigator as it is currently 
the smallest GNUe application and the least maintained.

We would start our efforts using zope3's Interface and Component
Architecture(1)  Specifically the zope.interface and zope.configuration 
modules(2).  These modules would be made available as part of navigator
for the time being to eliminate the external dependencies.  

Using these modules we'd complete the base services to get the 
component based app running and loading test components.  Once that is 
complete we'd begin wrappering and/or porting GNUe common systems 
into GAP components.  These wrappers would also remain in navigator 
at this stage.

Next navigator would be made functional again based upon GAP.  The 
basic GAP UI components would be created, based upon designer code 
where possible.

If GAP is accepted as more than just a proof of concept then it could 
be integrated into gnue-common or provided as a stand alone project. 
Other GNUe applications could then be componentized and integrated 
with GAP.

Additional Sources for Information or Concepts
==============================================
Twisted's description of interfaces and adapters which is based on Zope3
  - http://twistedmatrix.com/projects/core/documentation/howto/components.html

Netbeans: A component based rich client platform (RCP)
  - http://platform.netbeans.org/index.html


(1) http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book
(2) http://svn.zope.org/Zope3/trunk/src/zope/
