This diagram
      shows the interaction between the Controller object, the 
      InsertEvent object and all the other actors that are used 
      to process this database event.
    
      Note: 
      InsertEvent works similar to
      UpdateEvent and DeleteEvent, 
      so the diagram above should explain the sequence
      of class messages for all those events. For further details, see the
      
  public void processEvent(Connection con)
      throws SQLException, MultipleValidationException
       method of the selected DatabaseEvent class.
This database event is initialized by the following parameters and example values:
Table 32.3. initialization parameters and their meaning
| action string | the input action string generated by the parent jsp page | 
| event type | the string identifying the event type | 
| table id | the dbforms' table identifier (used to build the query string) | 
| key id | the dbforms' key identifier related to the current table | 
| insert button count | button count used to identify individual insert buttons | 
Table 32.4. insert event parameters generated by a main form
| action string | ac_insert_0_root_5 | 
| event type | ac_insert | 
| table id | 0 | 
| key id | root | 
| button count | 5 | 
Table 32.5. insert event parameters generated by a subform
| action | ac_insert_1_0@root_17 | 
| event type | ac_insert | 
| table id | 1 | 
| key id | 0@root | 
| button count | 17 | 
              The Controller servlet calls the InsertEvent's
              processEvent method.
            
              The InsertEvent object checks if the current user 
              has got the INSERT privilege.
            
              The InsertEvent object builds a 
              FieldValues object representing 
              the set of FieldValue objects to process.
              Then it copy the FieldValues 
              data into a new fieldValueHashTable 
              object that will be used as interceptor's input parameter.
            
              The InsertEvent object 
              checks if there is any interceptor object binded to the current main table.
              If yes, executes its PRE_INSERT hook method.
            
              Then the InsertEvent object  
              synchronizes data from the fieldValueHashTable structure used as
              interceptor's input parameter (the hash table could contains values modified by the interceptor code) 
              to the original FieldValues object 
              (that will be used by the database insert operation).
            
              The InsertEvent object builds a 
              FieldValues object representing 
              the set of FieldValue objects to process.
              Then it copy the FieldValues 
              data into a new fieldValueHashTable 
              object that will be used as interceptor's input parameter.
            
              The InsertEvent object calls the 
              checkSufficentValues method to 
              check a list of conditions on the the input FieldValues object:
              
              
it must contains the same number of fields as the current main Table
any autoInc field must NOT have a related FieldValue object (generated by a request parameter) because that field value must be calculated by the underlying RDBMS
               if all the conditions above are true, the system continues the execution of the event flow,
               else it generates a SQLException that stops the event procession.
            
              The InsertEvent object retrieve the 
              DataSourceFactory and executes its
              doInsert method to store the data
              contained into the  FieldValues object 
			  (the new record to insert) into the underlying database.
            
              The InsertEvent object 
              checks (again) if there is any interceptor object binded to the current main table.
              If yes, executes its POST_INSERT hook method.