Title:   The Class Repository
Status:  Current 
Created: 2003-09-17
Revised: 2004-02-24

The Class Repository holds all information about the structure of the business
objects.

Please regard all class repository object as read-only object. To change data
in the class repository, access the underlying business objects.

To use the Class Repository, you need a session manager object from
geasSessionManager. Such an instance provides two public properties, modules
and classes.


The Module Object
=================

The property "modules" of a session manager instance holds a dictionary of all
modules. Each module is represented by a module object, the key is the module
name.

All properties of the gnue_module business object (described in the API
documentation) are also accessible as properties of the module Python object.
Apart from that, the module Python object has a property "classes" that lists
all classes defined by that module (in the form of a dictionary).


The Class Object
================

A dictionary of classes originally defined by a specific module can be obtained
from "module.classes". A dictionary of all classes is available in the property
"classes" of a session manager instance.  Both dictionaries use the fully
qualified class name as key.

All properties of the gnue_class business object (described in the API
documentation) are also accessible as properties of the class Python object.

Apart from that, the class Python object has these properties:

* module:     The module originally defining the class
* fullName:   The fully qualified name
* table:      The underlying database table
* classes:    The class dictionary of the class
* properties: A dictionary of all properties of the class, where the fully
              qualified property name acts as the key
* procedures: A dictionary of all procedures of the class, where the fully
              qualified procedure name acts as the key


The Property Object
===================

All properties of the gnue_property business object (described in the API
documentation) are also accessible as properties of the corresponding Python
object.

Apart from that, the Python object of class "Property" has the following
properties:

* module:     The module defining the property
* fullName:   The fully qualified name
* fullType:   The complete data type of the property, including length and 
              scale. This is the appserver-specific data type, e.g. a column
              'gnue_id' has 'id' as fullType, or a column could have
              'address_country' as fullType. 
* column:     The underlying database column (or None if it is a calculated
              property (not yet implemented))
* dbType:     The database-specific type of the property, not including length 
              or scale, e.g. a column 'gnue_id' has 'string' as dbType.
* dbLength:   The length of the property from the databases point of view
* dbScale:    The precision of the property from the databases point of view
* dbFullType: The complete data type of the property, including length and
              scale. This is the database-specific data type, e.g. a column
              'gnue_id' has 'string(32)' as dbFullType, as well as the above
              'address_country' column would be 'string(32)'. A column with
              fullType 'boolean' has a dbFullType 'boolean'.
* isReference:     This boolean value is True if the property definition is 
                   referencing another class. If True the property
                   'referencedClass' is set to the class definition of this
                   referenced class.
* referencedClass: Class definition of the class referenced by this property
                   definition.
* isValidated:     This boolean value is True if the property definition has
                   been validated. If a property definition has been validated,
                   both properties 'isReference' and 'referencedClass' are
                   valid.
* isCalculated:    This boolean value is True, if the property definition is a
                   calculated field. In this case the property 'procedure'
                   holds the corresponding procedure definition.
* procedure:       If the property definition describes a 'calculated field'
                   this property holds the procedure definition.


The Procedure Object
====================

All properties of the gnue_procedure business object (described in the API
documentation) are also accessible as properties of the corresponding Python
object.

Apart from that, the Python object of class "Procedure" has the following
properties:

* module:       The module defining the property
* fullName:     The fully qualified name
* parameters:   A dictionary of all the parameters of the procedure, where the
                parameter names act as key.
* isCalculated: This boolean value is true, if the procedure could be used as a
                calculated field. This means the procedure has a valid result
                type, there are no parameters specified and the name of the
                procedure starts with 'get'. If 'isCalculated' is true the
                property 'calcFullName' holds the full qualified name of the
                calculated property, e.g: the procedure
                'address_getlastmeeting' has a 'calcFullName' of
                'address_lastmeeting'
* isValidated:  This boolean value is true if the procedure definition has been
                validated. If so, the values of 'isCalculated' and
                'calcFullName' are valid.
* calcFullName: If a procedure could be used as 'calculated field' this value
                property specifies the 'property name' of such a field.


The Parameter Object
====================

All properties of the gnue_parameter business object (described in the API
documentation) are also accessible as properties of the corresponding Python
object.

Apart from that, the Python object of class "Parameter" has the following
properties:

* fullName:   The fully qualified name
* dbType:     The database-specific type of the property, not including length 
              or scale, e.g. a type 'id' has 'string' as dbType.
