Parts of GEAS:
--------------

(names included in [] are currently concentrating on that part)

gcd parser (lib/classdef) [neilt]
configuration (src/config) [reinhard]
data monitor (src/datamonitor) [reinhard]
method calling (src/methods) [chillywilly]
data cache (src/objectcache) [reinhard]
database interface (src/objectstore) [reinhard]
sql generation (src/oql) [reinhard]
core (everything else) [neilt]
gcd verifier (tools) [neilt]

Ready-to-go TODO's:
---------------------

{} means that parts of geas are concerned

Planned for 0.1.0:

1.  define reserved words as reserved words, fix that bison-lex interaction
    about parser states (expecting_x)
2.  add TYPE (typedef), needed for consistency of design and elimination
    of errors in the design database. {classdef}
3.  improve include concept for gcd files {classdef}
4.  fix the error where duplicate field names pass the parser {classdef}

Planned for 0.2.0:

5.  method handling should be redesigned {methods}
5a. Bug - If methods have non-string arguments the parser fails.
    (segfault with no debug, hits assert in debug version) {classdef}
5b. code from the methods subdirectory may not depend on orbit-idl generated
    files, or these generated files need to be put into another subdirectory
6.  enable long options and check options consistency with gnu standards
7.  black box testing/qualification program for geas.  should be a python
    program that creates one or more .gcd file(s), runs geas configured
    with the .gcd file(s), then examines the resulting sql tables to
    assure that geas is working correctly for creating the tables, then
    use geas and examine objects for correct operation of geas, and
    then erase or remove the tables created.  Should be able to borrow
    code from forms for direct sql interface {nothing}
8.  fix so that TYPEs do not have to be fully qualified to work {classdef}
9.  enable geas to read gcd files from more than one directory tree {classdef}

Planned for later releases (unsorted):

* change objectstore and oql into a reusable database abstraction library
* enable calculated fields
* make the whole thing thread-safe
* find other ways than ORBit to communicate with the front end
* store object definitions in the database instead of gcd files
* implement multi company
* implement a security concept
* database fault tolerance
* transaction support
* load balancing
* database access monitoring (logging of all db operations)
* administration tool (provide number of users etc. and some administrative
  operations as pseudo-businessobjects)

===============================================================================


The following items are still subject to discussion/decision/more detailed
explaination

Automake Stuff
--------------

add --enable-naming-service :
  should define ENABLE_NAMING_SERVICE in config.h (done)
  adds -lORBitCosNaming to NAMESERVER_LFLAGS (not done)
  [ defaults to 'no', unless --enable-naming-service is on the command line ]
 
add --enable-oaf
  is 'off' by defualt (done)
  should define ENABLE_OAF in config.h (done)
  should set OAF_CFLAGS and OAF_LFLAGS appropriately (not done)
  (or at least let me see where to set them when I figure what's appropriate ;)

On 'make install', the following should be done:

IDL files in geas/idl should be copied to /usr/share/idl/geas (although the
actual directory may be system dependant. /usr/share/idl/ contains gnome &
bonono IDL files.)  Current: /usr/local/share/idl but it really should at
least be in a directory called 'geas'

examples/python/*.py should be made executable, and possibly copied to a
useful place. even better, having a simple way to specify in
examples/python/Makefile.am which ones should be installed would be useful.
(test.py is of minimal use, but other examples may be useful if they can be
run directly.)

====================================

- Create a GUI configuration management utility.
  (unassigned, talk to both rhuff and andrewm to coordinate)
   
- Object cache: need to make flushing more intelligent. Also needs to
  modify the cache's list of edited/saved objects. (unassigned)

- Test if there are memory leaks (there should be none).

- objectstore module changes: (important for ease of improving data access)
    check doc/internals/objectstore.txt for details
    1) write and delete object functions should be removed, and the
       objectstore.c functions changed to produce an OQL query structure
       directly, and then call the execute SQL function
    2) the query_result structure needs to be a separate 'object' and both
       MySQl and PostgreSQL code should be changed to not access any members
       of the structure directly.
       possibly even allow database specific version, which store the data
       returned from the database immediately, and use database API
       functions to access the data. (this would potentially resulot in an
       important speed increase, particularly with large data sets, where the
       current system has excessive amounts of memory being copied for no
       significant reason.

- Improve other configuration details (nameserver or OAF for clients locating
  the server) - details need to be investigated first.

- Basic Object Query Language (OQL) for complex queries

- Clean up objectstore module: needs to handle blocking/non blocking connect
  attempts, and attempt to reconnect on demand, but have that be configurable

- System configuration needs a lot of work.

- backing out of updates needs handled. (if adding a module causes problems,
  it needs to be possible to remove it, all without breaking previous working
  modules.)

- Advanced Object Query Language (OQL) for complex queries

- Migrate GEAS internal data structures to be 'business objects' managed by the
  server. (Aimed at easing the ability for connections to be moved
  transparently between servers, as code to support moving business objects
  will then be able to move GEAS data structures as well. Not all strutures
  will need to be able to be moved.)

- Advanced data manager features: object/cache manager

- Use DSI (Dynamic Skeleton Interface) to present business objects as regular
  objects. (Useful for non forms based applications.)

- Allow dynamic server upgrades: ie, install a new version of GEAS without
  disrupting current connections to the previously installed version. Must
  be able to returmn to the previous vresion as well, should the upgrade
  cause unexpected problems. (Fault tolerance will aid this immensely.)
