commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r5832 - trunk/gnue-appserver/src


From: johannes
Subject: r5832 - trunk/gnue-appserver/src
Date: Wed, 26 May 2004 03:27:54 -0500 (CDT)

Author: johannes
Date: 2004-05-26 03:27:53 -0500 (Wed, 26 May 2004)
New Revision: 5832

Modified:
   trunk/gnue-appserver/src/geasInstance.py
   trunk/gnue-appserver/src/geasSession.py
Log:
Added OnChange-, OnValidate- and OnDelete-Events (bound procedures)


Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py    2004-05-25 17:36:18 UTC (rev 
5831)
+++ trunk/gnue-appserver/src/geasInstance.py    2004-05-26 08:27:53 UTC (rev 
5832)
@@ -243,7 +243,13 @@
       if record is None or record.getField (u'gnue_id') != __value:
         raise PropertyValueError, (propertydef.fullName, value)
 
+    for proc in self.__classdef.procedures.values ():
+      if proc.gnue_name.upper () == 'ONCHANGE':
+        self.call (proc, {'propertyName': propertydef.fullName},
+                         {'oldValue': self.__getValue (propertyname),
+                          'newValue': __value})
 
+
     self.__record.putField (propertydef.column, __value)
 
   # ---------------------------------------------------------------------------
@@ -259,11 +265,12 @@
   # Call a procedure
   # ---------------------------------------------------------------------------
 
-  def call (self, proceduredef, params):
+  def call (self, proceduredef, params, namespace = None):
 
     # TODO: This should run in a separate process so that a segfaulting
     # procedure doesn't kill appserver.
     # (needs to be implemented as an option in gnue-common)
+    checktype (namespace, [types.NoneType, types.DictType])
 
     # Create a session object which with the actual session id
     sess = Session.Session (self.__session.sm, self.__session.id)
@@ -290,8 +297,12 @@
     cx.description = proceduredef.gnue_comment
 
     # the object itself
-    cx.bindObject ('self', obj, Object.Object)
+    cx.bindObject ('self', obj)
 
+    if namespace is not None:
+      for (key, value) in namespace.items ():
+        cx.bindObject (key, value)
+
     # language interface, session functions
     cx.bindFunction ('find',       sess.find)
     cx.bindFunction ('setcontext', sess.setcontext)
@@ -332,6 +343,10 @@
           value = self.__record.getField (prop.column)
           if value is None:
             raise PropertyValueError (prop.fullName, None)
+
+    for proc in self.__classdef.procedures.values ():
+      if proc.gnue_name.upper () == 'ONVALIDATE':
+        self.call (proc, None)
     
 
   # ---------------------------------------------------------------------------

Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py     2004-05-25 17:36:18 UTC (rev 
5831)
+++ trunk/gnue-appserver/src/geasSession.py     2004-05-26 08:27:53 UTC (rev 
5832)
@@ -307,11 +307,20 @@
 
   def __newInstance (self, classdef):
 
-    table = classdef.table
-    record = self.__connection.insertRecord (table)
-    return geasInstance.geasInstance (self, self.__connection, record,
-                                      classdef)
+    table    = classdef.table
+    record   = self.__connection.insertRecord (table)
+    instance = geasInstance.geasInstance (self, self.__connection, record,
+                                          classdef)
 
+    # FIXME: this is way too late since the dbdriver doesn't store newly 
created
+    # instances; but since forms calls 'createNewRecord' to often, we leave
+    # this event 'uncalled' for now
+    # for proc in classdef.procedures.values ():
+      # if proc.gnue_name.upper () == 'ONINIT':
+        # instance.call (proc, None)
+
+    return instance
+
   # ---------------------------------------------------------------------------
   # Load data from the database backend
   # ---------------------------------------------------------------------------
@@ -362,11 +371,18 @@
 
     classdef = self.__getClassdef (classname)
 
+    for objectId in obj_id_list:
+      instance = self.__findInstance (classdef, objectId, [])
+      for proc in classdef.procedures.values ():
+        if proc.gnue_name.upper () == 'ONDELETE':
+          instance.call (proc, None)
+
     for object_id in obj_id_list:
       self.__connection.deleteRecord (classdef.table, object_id)
       if self.__dirtyInstances.has_key (object_id):
         del self.__dirtyInstances [object_id]
 
+
   # ---------------------------------------------------------------------------
   # Call a procedure of business objects
   # ---------------------------------------------------------------------------





reply via email to

[Prev in Thread] Current Thread [Next in Thread]