commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef samples/contact.gfd src/GFEvent.py s...


From: James Thompson
Subject: gnue/gnuef samples/contact.gfd src/GFEvent.py s...
Date: Fri, 06 Oct 2000 19:02:02 -0700

CVSROOT:        /cvs
Module name:    gnue
Changes by:     James Thompson <address@hidden> 00/10/06 19:02:01

Modified files:
        gnuef/samples  : contact.gfd 
        gnuef/src      : GFEvent.py GFForm.py GFObjects.py Makefile.am 
Added files:
        gnuef/samples  : zip_code.gfd 
        gnuef/src      : DBobjectserver.py DBpostgresql.py 
Removed files:
        gnuef/src      : DSobjectServer.py DSpostgresql.py 

Log message:
        Partially functional query system

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/samples/zip_code.gfd.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/samples/contact.gfd.diff?r1=1.7&r2=1.8
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DBobjectserver.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DBpostgresql.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFEvent.py.diff?r1=1.4&r2=1.5
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFForm.py.diff?r1=1.13&r2=1.14
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFObjects.py.diff?r1=1.9&r2=1.10
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/Makefile.am.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DSobjectServer.py.diff?r1=1.1&r2=NONE
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DSpostgresql.py.diff?r1=1.3&r2=NONE

Patches:
Index: gnue/gnuef/samples/contact.gfd
diff -u gnue/gnuef/samples/contact.gfd:1.7 gnue/gnuef/samples/contact.gfd:1.8
--- gnue/gnuef/samples/contact.gfd:1.7  Thu Oct  5 22:25:10 2000
+++ gnue/gnuef/samples/contact.gfd      Fri Oct  6 19:02:01 2000
@@ -8,12 +8,6 @@
   <width>500</width>
 </options>
 
-
-  <database name="gnue" provider="postgresql" dbname="gnue" host="gnue"/>
-  <dataset name="qrySomeQuery" databaseName="gnue_data" 
-   query="select * from country;"/>
-  <datasource name="dtsrcCoolBeans" DataSet="qrySomeQuery"/>   
-
   <page>
     <block dbName="test" tableName="country">
       <label text="General" x="5" y="1"/>
Index: gnue/gnuef/src/GFEvent.py
diff -u gnue/gnuef/src/GFEvent.py:1.4 gnue/gnuef/src/GFEvent.py:1.5
--- gnue/gnuef/src/GFEvent.py:1.4       Tue Oct  3 22:04:58 2000
+++ gnue/gnuef/src/GFEvent.py   Fri Oct  6 19:02:01 2000
@@ -60,7 +60,8 @@
   #
   def processEvent(self, event):
     try:
-#      print "Received ", event.getEvent()
+      if GFOptions.DEBUG > 99:
+        print "received %s event" % (event.getEvent())
       self.incommingEvent[event.getEvent()] (event)
     except KeyError:
       if GFOptions.DEBUG > 99:
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.13 gnue/gnuef/src/GFForm.py:1.14
--- gnue/gnuef/src/GFForm.py:1.13       Thu Oct  5 22:25:11 2000
+++ gnue/gnuef/src/GFForm.py    Fri Oct  6 19:02:01 2000
@@ -25,8 +25,8 @@
     GFEventAware.__init__(self)
     self.type = "GFForm"
     self.currentObject = [self]
+    self.mode = 'normal'
 
-
     # Event processing
     self.incommingEvent = {'requestNEXTENTRY'  : self.nextEntry,
                            'requestPREVENTRY'  : self.previousEntry,
@@ -46,8 +46,9 @@
 
                            'requestNEWRECORD'  : self.newRecord,
                            
-#                           'requestQUERY'      : self.requestQuery,
-#                           'cancelQUERY'       : self.requestQuery,
+                           'requestQUERY'      : self.processQuery,
+                           'cancelQUERY'       : self.processQuery,
+                           'executeQUERY'      : self.processQuery,
 
                            'recordSWITCHED'    : self.recordSwitched,
 
@@ -86,12 +87,13 @@
     # set the initial focus
     self.walk(self.setInitialFocus)
 
+    # Connect to the defined databases
+    self.walk(self.initDatabaseObjects)
+
     # build the block list
     self.walk(self.initBlocks)
     self.walk(self.initEntries)
-
-    # Connect to the defined databases
-    self.walk(self.initDatabaseObjects)
+    
     if GFOptions.DEBUG > 50:
       print "Database Dictionary"
       print self.databaseDictionary
@@ -117,14 +119,16 @@
   def initBlocks(self, object):
     if object.getObjectType() == 'GFBlock':
       self.blockList.append(object)
+      object.initialize()
 
   def initEntries(self, object):
     if object.getObjectType() == 'GFEntry':
-      object.valueArray[0] = object.value
+      object.value = object.block.dataSource.getField(0,object.field)
 
   def initDatabaseObjects(self, object):
-    if object.getObjectType() =='GFDatasource':
+    if object.getObjectType() =='GFDataSource':
       self.datasourceDictionary[object.name]=object
+      object.initialize()
       
     if object.getObjectType() =='GFDatabase':
       self.databaseDictionary[object.name]=object
@@ -164,9 +168,11 @@
   # objects.  Will eventually do more
   #
   def nextRecord(self, event):
+    print "Form next record received"
     self.dispatchEvent(GFEvent('nextRECORD',self.currentBlock))
 
   def prevRecord(self, event):
+    print "Form prev record received"
     self.dispatchEvent(GFEvent('prevRECORD',self.currentBlock))
   
   def newRecord(self, event):
@@ -395,10 +401,25 @@
   # it has switched to a different record
   #
   def recordSwitched(self, event):
-    print "We really should update ", event.data.getObjectType()
     self.dispatchEvent(GFEvent('updateENTRY',event.data))
 
+  #
+  # processQuery
+  # 
+  def processQuery(self, event):
+    if event.getEvent() == 'requestQUERY':
+      if self.mode != 'query':
+        self.mode = 'query'
+        # check the current data is saved
+      else:
+        self.mode = 'normal'
+      
+      #clear the current datasource
 
+    elif event.getEvent() == 'processQUERY':
+      # to be done 
+      pass
+    
   #
   # requireLogin
   #
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.9 gnue/gnuef/src/GFObjects.py:1.10
--- gnue/gnuef/src/GFObjects.py:1.9     Thu Oct  5 22:25:11 2000
+++ gnue/gnuef/src/GFObjects.py Fri Oct  6 19:02:01 2000
@@ -11,7 +11,6 @@
 # Copyright (c) 2000 James Thompson
 #
 
-import DSobjectServer
 from GFTrigger import *
 from GFEvent import *
 import GFOptions
@@ -83,36 +82,6 @@
     return self.value
 
 #
-# GFMultiValue
-#
-# An object that can store and retrieve a value
-#
-# Note: Do to the nature of the parser the
-# initial values of arguments are stored as
-# strings in the object.  So we must keep a
-# seperate array to hold strings then
-# move them back and forth from the value attribute
-#
-class GFMultiValue(GFObj):
-  # Add value attrib support
-  def __init__(self, parent=None, value=None):
-    self.value = value
-    
-    self.valueArray = []
-    self.valueArray.append(value)
-    
-    self.type = "GFValue"
-    GFObj.__init__(self, parent)
-    
-  def setValue(self, value):
-    self.value = self.valueArray[self.block.currentRecord] = value
-
-
-  def getValue(self):
-    return self.value
-
-
-#
 # GFPage
 #
 class GFPage(GFObj):
@@ -132,9 +101,91 @@
     if not self.value:
       GFValue.setValue(self,value)
 
+
+#
+# Data Access
 #
-#GFDatabase
+
 #
+#GFDataSource
+#
+# In memory store of data manipulated by forms
+#
+class GFDataSource(GFObj):
+  def __init__(self, parent=None):
+    GFObj.__init__(self, parent)
+    self.type = "GFDataSource"
+    self.emptyRecord = {}
+    self.resultSet = []
+    self.dataConnection = None
+    self.form = None
+
+    self.form = parent
+    while (self.form.getObjectType() != 'GFForm'):
+      self.form = self.form.parent
+
+    
+  def initialize(self):
+    if GFOptions.DEBUG:
+      print "Initializing datasource %s" % (self.name)
+    #get the connection to database
+    self.dataConnection = self.form.databaseDictionary[self.database]
+
+    # Build an empty record for new records and query mask seed
+    for field in self.dataConnection.getFieldList(self.table).keys():
+      self.emptyRecord[field] = ""        
+
+    # Set an initial empty record
+    self.resultSet = []
+    newentry = {}
+    for key in self.emptyRecord.keys():
+      newentry[key] = self.emptyRecord[key]  
+    self.resultSet.append(newentry)
+
+    # just for the heck of it
+    self.query()
+
+  #
+  # 
+  # 
+  def getLastRecordNumber(self):
+    return len(self.resultSet)-1
+  
+  def query(self,mask=None):
+    self.resultSet = self.dataConnection.query(self.table,mask)
+
+  def commit(self):
+    # go thru records
+    # see which have been altered
+    # pass those back for update/insert
+    # commit changes
+    pass
+    
+  def rollback(self):
+    resultSet = []
+    pass
+
+  def new(self):
+    newentry = {}
+    for key in self.emptyRecord.keys():
+      newentry[key] = self.emptyRecord[key]
+    self.resultSet.append(newentry)
+                
+    print self.resultSet
+    
+  def getField(self,recordNumber,fieldName):
+    return self.resultSet[recordNumber][fieldName]
+
+  def setField(self,recordNumber,fieldName,value):
+    self.resultSet[recordNumber][fieldName] = value
+    #lock that record in the datasource
+
+    pass
+#
+# GFDatabase
+#
+# The connection to a specific chunk of data
+#
 class GFDatabase(GFObj):
   def __init__(self, parent=None):
     GFObj.__init__(self, parent)
@@ -142,8 +193,8 @@
 
   def initialize(self,user,passwd):
     if self.provider == "postgresql":
-      import DSpostgresql
-      self.link = DSpostgresql.DSLink()
+      from DBpostgresql import DBpostgresql
+      self.link = DBpostgresql()
       self.link.connect(self.host,self.dbname,user,passwd)
 
   def query(self, table, mask):
@@ -160,30 +211,12 @@
   
   def delete(self, table, mask):
     self.link.insert(table,mask)
-      
 
-#
-#GFDataSource
-#
-class GFDataSource(GFObj):
-  def __init__(self, parent=None):
-    GFObj.__init__(self, parent)
-    self.type = "GFDataSource"
-    self.resultSet = {}
+  def getFieldList(self,table):
+    return self.link.getFieldList(table)
     
-  def initialize(self):
-    pass
 
 #
-#GFDataSet
-#
-class GFDataSet(GFObj):
-  def __init__(self, parent=None):
-    GFObj.__init__(self, parent)
-    self.type = "GFDataSet"
-    
-
-#
 # 
 # More complex objects below
 #
@@ -204,17 +237,16 @@
     GFEventAware.__init__(self)
     self.type = "GFBlock"
     
-    self.datalink = None
-
+    self.dataSource = None
+    
     self.currentRecord = 0
     self.recordCount = 0
 
     # Event processing
-    self.incommingEvent = {'nextRECORD'    : self.switchRecord,
+    self.incommingEvent = {'newRECORD'     : self.newRecord,
+                           'nextRECORD'    : self.switchRecord,
                            'prevRECORD'    : self.switchRecord,
-                           'newRECORD'     : self.newRecord,
-                           'recordSWITCHED': self.recordSwitched,
-                           'recordCREATED' : self.recordCreated
+                           'recordSWITCHED': self.recordSwitched
                            }
     
     # register to recieve events from it's parent GFForm
@@ -226,7 +258,23 @@
     #register the form to recieve events from the block
     self.registerEventListener(self.form.processEvent)
 
+  def initialize(self):
+    self.dataSource = self.form.datasourceDictionary[self.datasource]
+    self.recordCount = 
self.form.datasourceDictionary[self.datasource].getLastRecordNumber()
+
   #
+  # Adds a black record to the current records in memory
+  #
+  def newRecord(self, event):
+    if event.data == self:
+      self.recordCount = 
self.form.datasourceDictionary[self.datasource].getLastRecordNumber()
+    
+      self.dataSource.new()
+      oldRecord = self.currentRecord
+      self.currentRecord = self.recordCount    
+      
self.dispatchEvent(GFEvent('switchRECORD',[oldRecord,self.currentRecord]));
+
+  #
   # Moves the proper record into editing position
   #
   def switchRecord(self, event):
@@ -235,24 +283,15 @@
         adjustment = -1
       else:
         adjustment = 1
-        
+
+      oldRecord = self.currentRecord
       self.currentRecord = self.currentRecord + adjustment
         
       if self.currentRecord < 0 : self.currentRecord = self.recordCount
       if self.currentRecord > self.recordCount : self.currentRecord = 0
         
-      self.dispatchEvent(GFEvent('switchRECORD',self.currentRecord));
+      
self.dispatchEvent(GFEvent('switchRECORD',[oldRecord,self.currentRecord]));
     
-  #
-  # Adds a black record to the current records in memory
-  #
-  def newRecord(self, event):
-    if event.data == self:
-      self.recordCount = self.recordCount + 1
-      self.dispatchEvent(GFEvent('newRECORD',self.currentRecord));
-
-      self.currentRecord = self.recordCount    
-      self.dispatchEvent(GFEvent('switchRECORD',self.currentRecord));
       
   #
   # recordSwitched
@@ -262,23 +301,6 @@
       print event.data, " just switched records"
     self.dispatchEvent(GFEvent('recordSWITCHED',event.data))
 
-  #
-  # recordCreated
-  #
-  def recordCreated(self, event):
-    pass
-    #self.dispatchEvent(GFEvent('recordCREATED',self))
-    
-             
-  #def initDataSource(self):
-  #  try:
-  #    self.datalink = 
DSobjectServer.DSdataLink(self.__dict__["dbName"],self.__dict__["tableName"])
-  #  except KeyError:
-  #    print "Not tied to db"
-  #    pass
-
-
-
 #
 # GFEntry
 #
@@ -291,20 +313,17 @@
 #
 # It send events to its parent GFBlock
 #
-class GFEntry(GFMultiValue, GFEventAware):
+class GFEntry(GFValue, GFEventAware):
   def __init__(self, parent=None, value=None):
-    GFMultiValue.__init__(self, parent, value)
+    GFValue.__init__(self, parent, value)
     GFEventAware.__init__(self)    
     self.type = "GFEntry"
 
-    if value != None:
-      self.cursorPosition = len(value)
-    else:
-      self.cursorPosition = 0
+    self.value=""
+    self.cursorPosition = len(self.value)
 
     # Event processing
-    self.incommingEvent = {'switchRECORD': self.switchRecord,
-                           'newRECORD'   : self.newRecord
+    self.incommingEvent = {'switchRECORD': self.switchRecord
                           }
 
     # register to recieve events from it's parent GFBlock
@@ -322,18 +341,24 @@
   # Moves the proper record into editing position
   # 
   def switchRecord(self, event):
-    if GFOptions.DEBUG:
-      print "Switching to record ",event.data
-    self.value = self.valueArray[event.data]
-    self.dispatchEvent(GFEvent('recordSWITCHED',self));
-
-  #
-  # Adds a black record to the current records in memory
-  #
-  def newRecord(self, event):
-    self.valueArray.append("")
-    self.dispatchEvent(GFEvent('recordCREATED',self));
-
+    print "Switching to record %s from record %s" % (event.data[1] , 
event.data[0])
+      
 
+    self.block.dataSource.setField(event.data[0],self.field,self.value)
+    self.value = self.block.dataSource.getField(event.data[1],self.field)
+    #self.value = self.valueArray[event.data]
+    self.cursorPosition = len(self.value)
+    self.dispatchEvent(GFEvent('recordSWITCHED',self));
 
+#
+# Unused objects
+#
+#
+#GFDataSet
+#
+class GFDataSet(GFObj):
+  def __init__(self, parent=None):
+    GFObj.__init__(self, parent)
+    self.type = "GFDataSet"
+    
 
Index: gnue/gnuef/src/Makefile.am
diff -u gnue/gnuef/src/Makefile.am:1.1 gnue/gnuef/src/Makefile.am:1.2
--- gnue/gnuef/src/Makefile.am:1.1      Thu Sep 21 16:52:50 2000
+++ gnue/gnuef/src/Makefile.am  Fri Oct  6 19:02:01 2000
@@ -1,4 +1,6 @@
 EXTRA_DIST = \
+       DBpostgresql.py \
+       DBobjectserver.py \
        DPyGetOpt.py \
        GFClient.py \
        GFController.py \
@@ -7,6 +9,7 @@
        GFEvent.py \
        GFForm.py \
        GFObjects.py \
+       GFOptions.py \
        GFTrigger.py \
        GFView.py \
        UIbase.py \



reply via email to

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