commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r8661 - in trunk/gnue-forms/src: . GFObjects


From: reinhard
Subject: [gnue] r8661 - in trunk/gnue-forms/src: . GFObjects
Date: Mon, 11 Sep 2006 07:42:58 -0500 (CDT)

Author: reinhard
Date: 2006-09-11 07:42:57 -0500 (Mon, 11 Sep 2006)
New Revision: 8661

Modified:
   trunk/gnue-forms/src/GFForm.py
   trunk/gnue-forms/src/GFInstance.py
   trunk/gnue-forms/src/GFObjects/GFBlock.py
Log:
Restructuring query methods.


Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py      2006-09-06 11:38:57 UTC (rev 8660)
+++ trunk/gnue-forms/src/GFForm.py      2006-09-11 12:42:57 UTC (rev 8661)
@@ -158,6 +158,17 @@
             'last_record': {'function': self.last_record},
             'ask_record': {'function': self.ask_record},
 
+            # Record insertion and deletion
+            'new_record': {'function': self.new_record},
+            'delete_record': {'function': self.delete_record},
+            'undelete_record': {'function': self.undelete_record},
+
+            # Queries
+            'init_query': {'function': self.init_query},
+            'copy_query': {'function': self.copy_query},
+            'cancel_query': {'function': self.cancel_query},
+            'execute_query': {'function': self.execute_query},
+
             'commit': {
                 'function': self.__trigger_commit,
                 'global': True},
@@ -166,8 +177,6 @@
                 'global': True},
             'printout': {
                 'function': self.__trigger_printout},
-            'initQuery': {
-                'function': self.__trigger_init_query},
             'activateDialog': {
                 'function': self.__trigger_activate_dialog,
                 'global': True},
@@ -484,14 +493,6 @@
 
     # -------------------------------------------------------------------------
 
-    def __trigger_init_query(self):
-        """
-        Set form into query mode.
-        """
-        self.initQuery()
-
-    # -------------------------------------------------------------------------
-
     def __trigger_activate_dialog (self, dialogName, parameters={}, modal=0):
         """
         Launches a standard or a custom dialog.
@@ -1117,150 +1118,164 @@
 
 
     # -------------------------------------------------------------------------
-    # Check all blocks in the form whether they are saved (committed) or not.
+    # Queries
     # -------------------------------------------------------------------------
 
-    def isSaved(self):
+    def init_query(self):
         """
-        Checks all block in the form whether they are saved (committed) or not.
-        @return: boolean, True if all the blocks are committed.
+        Enters the form into Query mode.
         """
 
-        # Is the current entry changed?
-        if (self._currentEntry is not None and \
-            self._currentEntry._type != 'GFButton' and \
-            self._currentEntry._field._bound and \
-            self._currentEntry._displayHandler.isPending()):
-          return False
+        if not self.endEditing():
+            return
 
-        # Are there any not yet posted changes in any of the blocks?
+        if self._currentBlock is not None:
+            if self._currentBlock.autoCommit:
+                self.commit()
+
+        if not self.__must_save():
+            # Notify the UI to not show the query button pressed in
+            self.dispatchEvent('endENTERQUERY', _form=self)
+            self.beginEditing()
+            return
+
+        self.dispatchEvent('beginENTERQUERY', _form=self)
+
         for block in self._logic._blockList:
-          if block.get_record_status() in ('inserted', 'modified', 'deleted'):
-            return False
+            block.init_query()
 
-        # Does a connection have any pending (already posted but not yet
-        # committed) changes?
-        for connection in (self.__get_connections ()).values ():
-          if connection.isPending ():
-            return False
+        self.status_message(u_('Enter your query criteria.'))
 
-        return True
+        self.refreshDisplay(self)
+        self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+        self.beginEditing()
+        self.update_status()
 
-
     # -------------------------------------------------------------------------
-    # Enter the form into Query mode
-    # -------------------------------------------------------------------------
 
-    def initQuery(self):
+    def copy_query(self):
         """
-        Enters the form into Query mode.
+        Copies the Query, ie brings back conditions from the last query.
         """
-        if self._currentBlock is None:
+
+        if not self.endEditing():
             return
 
-        if self._currentBlock.mode != 'query':
+        if self._currentBlock is not None:
+            if self._currentBlock.autoCommit:
+                self.commit()
 
-          # Auto-commit?
-          if self._currentBlock.autoCommit:
-            self.commit()
+        if not self.__must_save():
+            # Notify the UI to not show the query button pressed in
+            self.dispatchEvent('endENTERQUERY', _form=self)
+            self.beginEditing()
+            return
 
-          if not self.__must_save():
-              return
-
-        for block in self._logic._blockList:
-          block.processRollback()
-          for entry in block._entryList:
-            if hasattr(entry, 'queryDefault'):
-              assert gDebug (5, "%s will be set to %s" % (entry.name, 
entry.queryDefault))
-              entry.setValue(entry.queryDefault)
-
         self.dispatchEvent('beginENTERQUERY', _form=self)
 
         for block in self._logic._blockList:
-          block.initQuery()
+            block.copy_query()
 
         self.status_message(u_('Enter your query criteria.'))
 
+        self.refreshDisplay(self)
+        self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+        self.beginEditing()
+        self.update_status()
 
     # -------------------------------------------------------------------------
-    # Cancel Query mode
-    # -------------------------------------------------------------------------
 
-    def cancelQuery(self):
+    def cancel_query(self):
         """
         Cancels Query mode.
-        @return: None
         """
+
+        self.endEditing ()
+
         self.dispatchEvent('endENTERQUERY', _form=self)
-        #self._instance.dispatchEvent('endENTERQUERY', _form=self)
-        message = None  #TODO: not used here and in return line /kilo/
+
         for block in self._logic._blockList:
-          block.cancelQuery()
+            block.cancel_query()
 
         self.status_message(u_('Query canceled.'))
-        return message
 
+        self.refreshDisplay(self)
+        self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+        self.beginEditing()
+        self.update_status()
 
     # -------------------------------------------------------------------------
-    # Copy Query, ie bring back conditions from the last query
-    # -------------------------------------------------------------------------
 
-    def copyQuery(self):
+    def execute_query(self):
         """
-        Copies the Query, ie brings back conditions from the last query.
-        @return: None
+        Runs the query.
         """
         if self._currentBlock is None:
             return
 
-        if self._currentBlock.mode != 'query':
-          self.initQuery()
+        if not self.endEditing():
+            return
 
+        # Do a rollback on all connections so the query starts a new
+        # transaction.
+        self.__rollback_all_connections()
+
         self.dispatchEvent('endENTERQUERY', _form=self);
-        #self._instance.dispatchEvent('endENTERQUERY', _form=self);
-        message = None  #TODO: not used here and in return line /kilo/
-        for block in self._logic._blockList:
-          block.copyQuery()
 
-        return message
+        try:
+            try:
+                self._currentBlock.execute_query()
 
+            except DBError:
+                self.__rollback_all_connections()
+                # TODO: self.__clear_all_blocks()
+                raise
 
+        finally:
+            self.refreshDisplay (self._currentBlock)
+            if self._currentBlock.is_empty ():
+                self.status_message (u_('Query returned no results.'))
+            else:
+                self.status_message (u_('Query successful.'))
+
+            self.dispatchEvent('gotoENTRY', object=self._currentEntry,
+                    _form=self)
+            self.beginEditing()
+            self.update_record_counter()
+            self.update_record_status()
+
+
     # -------------------------------------------------------------------------
-    # Run the query
+    # Check all blocks in the form whether they are saved (committed) or not.
     # -------------------------------------------------------------------------
 
-    def executeQuery (self):
+    def isSaved(self):
         """
-        Runs the query.
-        @return: None if all went well, error message if there was an error
+        Checks all block in the form whether they are saved (committed) or not.
+        @return: boolean, True if all the blocks are committed.
         """
-        if self._currentBlock is None:
-            return
 
-        if self._currentBlock.mode != 'query':
-          return _("Form not in query mode")
+        # Is the current entry changed?
+        if (self._currentEntry is not None and \
+            self._currentEntry._type != 'GFButton' and \
+            self._currentEntry._field._bound and \
+            self._currentEntry._displayHandler.isPending()):
+          return False
 
-        message = None
-        self.dispatchEvent ('endENTERQUERY', _form = self);
+        # Are there any not yet posted changes in any of the blocks?
+        for block in self._logic._blockList:
+            if block.is_pending():
+                return False
 
-        try:
-          self._currentBlock.processQuery ()
+        # Does a connection have any pending (already posted but not yet
+        # committed) changes?
+        for connection in (self.__get_connections ()).values ():
+          if connection.isPending ():
+            return False
 
-        except DBError:
-          self.rollback (1)
-          message = u_("Database query error:\n%(exType)s\n%(exMessage)s") \
-              % {'exType'   : sys.exc_info ()[0],
-                 'exMessage': sys.exc_info ()[1]}
+        return True
 
-        self.refreshDisplay (self._currentBlock)
-        if self._currentBlock.is_empty ():
-          self.status_message (u_('Query returned no results.'))
-        else:
-          self.status_message (u_('Query successful.'))
 
-        return message
-
-
     # -------------------------------------------------------------------------
     # Commit all pending changes
     # -------------------------------------------------------------------------
@@ -1359,8 +1374,7 @@
 
         # Call rollback only once per connection (if multiple blocks are
         # sharing the same connection)
-        for connection in self.__get_connections().values():
-            connection.rollback()
+        self.__rollback_all_connections()
 
         for block in self._logic._blockList:
             block.processRollback(recover, backendRollback=False)
@@ -1376,6 +1390,13 @@
 
 
     # -------------------------------------------------------------------------
+
+    def __rollback_all_connections(self):
+
+        for connection in self.__get_connections().values():
+            connection.rollback()
+
+    # -------------------------------------------------------------------------
     # Print form
     # -------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py  2006-09-06 11:38:57 UTC (rev 8660)
+++ trunk/gnue-forms/src/GFInstance.py  2006-09-11 12:42:57 UTC (rev 8661)
@@ -113,10 +113,10 @@
                 'requestUNDELETE'     : self.__execute_undeleteRecord,
 
                 # Queries
-                'requestENTERQUERY'   : self.requestQuery,
-                'requestCOPYQUERY'    : self.copyQuery,
-                'requestCANCELQUERY'  : self.cancelQuery,
-                'requestEXECQUERY'    : self.executeQuery,
+                'requestENTERQUERY'   : self.__execute_enterQuery,
+                'requestCOPYQUERY'    : self.__execute_copyQuery,
+                'requestCANCELQUERY'  : self.__execute_cancelQuery,
+                'requestEXECQUERY'    : self.__execute_execQuery,
 
                 # Transactions
                 'requestCOMMIT'       : self.executeCommit,
@@ -674,6 +674,33 @@
 
 
   # ---------------------------------------------------------------------------
+  # Queries
+  # ---------------------------------------------------------------------------
+
+  def __execute_enterQuery(self, event):
+
+    event._form.init_query()
+
+  # ---------------------------------------------------------------------------
+
+  def __execute_copyQuery(self, event):
+
+    event._form.copy_query()
+
+  # ---------------------------------------------------------------------------
+
+  def __execute_cancelQuery(self, event):
+
+    event._form.cancel_query()
+
+  # ---------------------------------------------------------------------------
+
+  def __execute_execQuery(self, event):
+
+    event._form.execute_query()
+
+
+  # ---------------------------------------------------------------------------
   # Verify state of data and exit form
   # ---------------------------------------------------------------------------
 
@@ -774,85 +801,6 @@
 
 
   # ---------------------------------------------------------------------------
-  # Initialize a query
-  # ---------------------------------------------------------------------------
-
-  def requestQuery (self, event):
-
-    if not event._form.endEditing ():
-      return
-
-    message = event._form.initQuery ()
-    if message:
-      self.displayMessageBox (message, 'Error')
-      return
-
-    event._form.refreshDisplay (event._form)
-    self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
-                       _form = event._form)
-    event._form.beginEditing()
-    event._form.update_status()
-
-
-  # ---------------------------------------------------------------------------
-  # Cancel current query
-  # ---------------------------------------------------------------------------
-
-  def cancelQuery (self, event):
-
-    if not event._form.endEditing ():
-      return
-
-    message = event._form.cancelQuery ()
-    if message:
-      self.displayMessageBox (message, 'Error')
-      return
-
-    event._form.refreshDisplay (event._form)
-    self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
-                       _form = event._form)
-    event._form.beginEditing()
-    event._form.update_status()
-
-
-  # ---------------------------------------------------------------------------
-  # Copy the current query
-  # ---------------------------------------------------------------------------
-
-  def copyQuery (self, event):
-    if not event._form.endEditing ():
-      return
-
-    message = event._form.copyQuery ()
-    if message:
-      self.displayMessageBox (message, 'Error')
-      return
-
-    event._form.refreshDisplay (event._form)
-    self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
-                       _form = event._form)
-    event._form.beginEditing()
-    event._form.update_status()
-
-
-  # ---------------------------------------------------------------------------
-  # Execute the current query
-  # ---------------------------------------------------------------------------
-
-  def executeQuery (self, event):
-
-    if not event._form.endEditing ():
-      return
-
-    message = event._form.executeQuery ()
-    if message:
-      self.displayMessageBox (message, 'Error')
-
-    event._form.refreshDisplay (event._form._currentBlock)
-    self._entryUpdated (event._form)
-
-
-  # ---------------------------------------------------------------------------
   # Perform a commit
   # ---------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2006-09-06 11:38:57 UTC (rev 
8660)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2006-09-11 12:42:57 UTC (rev 
8661)
@@ -117,8 +117,8 @@
     self._triggerFunctions = {
             # Record status
             'get_record_status': {'function': self.get_record_status},
+            'isPending': {'function': self.is_pending},
             'isSaved': {'function': self.is_saved},             # deprecated?
-            'isPending': {'function': self.is_pending},         # deprecated?
             'isEmpty': {'function': self.is_empty},             # deprecated?
 
             # Record navigation
@@ -135,12 +135,6 @@
             'deleteRecord': {'function': self.delete_record},
             'undeleteRecord': {'function': self.undelete_record},
 
-            # Queries
-            'initQuery': {'function': self.initQuery},
-            'copyQuery': {'function': self.copyQuery},
-            'cancelQuery': {'function': self.cancelQuery},
-            'executeQuery': {'function': self.processQuery},
-
             # Transactions
             'commit': {'function': self.commit},
             'rollback': {'function': self.processRollback},
@@ -851,102 +845,35 @@
 
 
   # ---------------------------------------------------------------------------
-  # Shared code called whenever focus enters or leaves a record
+  # Queries
   # ---------------------------------------------------------------------------
 
-  def __focus_in(self):
+  def init_query(self):
 
-        if self._form.get_focus_block() is self:
-            self.processTrigger('PRE-FOCUSIN')
+        self.mode = 'query'
+        self._queryValues = {}
+        self._queryValues.update(self._queryDefaults)
+        self.__switch_record(0)
 
-            self._form.update_record_counter()
-            self._form.update_record_status()
-
-            self.processTrigger('POST-FOCUSIN')
-
   # ---------------------------------------------------------------------------
 
-  def __focus_out(self, do_auto_commit=True):
+  def copy_query(self):
 
-        if self._form.get_focus_block() is self:
-            self.processTrigger('PRE-FOCUSOUT')
+        self._queryValues = {}
+        self._queryValues.update(self._lastQueryValues)
+        self.__switch_record(0)
 
-            if do_auto_commit and self.autoCommit and self._resultSet.current:
-                self._form.commit()
-
-            self.processTrigger('POST-FOCUSOUT')
-
   # ---------------------------------------------------------------------------
-  # Function and Update
-  # ---------------------------------------------------------------------------
 
-  def callFunction (self, name, parameters):
+  def cancel_query(self):
 
-    try:
-      # Remember the current record; the record pointer is not reliable between
-      # postAll and requeryAll!
-      current = self._resultSet.current
-      self._dataSourceLink.postAll ()
+        self.mode = 'normal'
+        self.__switch_record(0)
 
-      try:
-        res = current.call (name, parameters)
-      finally:
-        self._dataSourceLink.requeryAll (False)
-
-    finally:
-      self.__switch_record (0)
-
-    return res
-
   # ---------------------------------------------------------------------------
 
-  def updateCurrentRecordSet (self):
+  def execute_query(self):
 
-    try:
-      self._dataSourceLink.postAll ()
-      self._dataSourceLink.requeryAll (False)
-
-    finally:
-      self.__switch_record (0)
-
-
-  # ---------------------------------------------------------------------------
-  # Query
-  # ---------------------------------------------------------------------------
-
-  def initQuery (self):
-
-    # If Enter-Query is hit once, enter query mode
-    # If Enter-Query is hit twice, bring back conditions from last query.
-    # If Enter-Query is hit thrice, cancel the query and go into normal mode.
-
-    if self.mode != 'query':
-      self.mode = 'query'
-      self._query2 = int (gConfigForms ("RememberLastQuery"))
-      self._queryValues = {}
-      self._queryValues.update (self._queryDefaults)
-      self.__switch_record (0)
-
-  # ---------------------------------------------------------------------------
-
-  def copyQuery (self):
-
-    self._query2 = 0
-    self._queryValues = {}
-    self._queryValues.update (self._lastQueryValues)
-    self.__switch_record (0)
-
-  # ---------------------------------------------------------------------------
-
-  def cancelQuery (self):
-
-    self.mode = 'normal'
-    self.__switch_record (0)
-
-  # ---------------------------------------------------------------------------
-
-  def processQuery (self):
-
     # Set the maxList to a single master block as a placeholder.
     maxList = [self._getTopMasterBlock ()]
 
@@ -1012,6 +939,66 @@
 
 
   # ---------------------------------------------------------------------------
+  # Shared code called whenever focus enters or leaves a record
+  # ---------------------------------------------------------------------------
+
+  def __focus_in(self):
+
+        if self._form.get_focus_block() is self:
+            self.processTrigger('PRE-FOCUSIN')
+
+            self._form.update_record_counter()
+            self._form.update_record_status()
+
+            self.processTrigger('POST-FOCUSIN')
+
+  # ---------------------------------------------------------------------------
+
+  def __focus_out(self, do_auto_commit=True):
+
+        if self._form.get_focus_block() is self:
+            self.processTrigger('PRE-FOCUSOUT')
+
+            if do_auto_commit and self.autoCommit and self._resultSet.current:
+                self._form.commit()
+
+            self.processTrigger('POST-FOCUSOUT')
+
+  # ---------------------------------------------------------------------------
+  # Function and Update
+  # ---------------------------------------------------------------------------
+
+  def callFunction (self, name, parameters):
+
+    try:
+      # Remember the current record; the record pointer is not reliable between
+      # postAll and requeryAll!
+      current = self._resultSet.current
+      self._dataSourceLink.postAll ()
+
+      try:
+        res = current.call (name, parameters)
+      finally:
+        self._dataSourceLink.requeryAll (False)
+
+    finally:
+      self.__switch_record (0)
+
+    return res
+
+  # ---------------------------------------------------------------------------
+
+  def updateCurrentRecordSet (self):
+
+    try:
+      self._dataSourceLink.postAll ()
+      self._dataSourceLink.requeryAll (False)
+
+    finally:
+      self.__switch_record (0)
+
+
+  # ---------------------------------------------------------------------------
   # Commit and Rollback
   # ---------------------------------------------------------------------------
 





reply via email to

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