commit-gnue
[Top][All Lists]
Advanced

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

r6406 - in trunk: gnue-appserver/samples gnue-appserver/share gnue-appse


From: johannes
Subject: r6406 - in trunk: gnue-appserver/samples gnue-appserver/share gnue-appserver/src gnue-appserver/src/gcd gnue-appserver/src/language gnue-common/src/datasources/drivers/appserver/appserver
Date: Mon, 27 Sep 2004 14:29:31 -0500 (CDT)

Author: johannes
Date: 2004-09-27 14:29:30 -0500 (Mon, 27 Sep 2004)
New Revision: 6406

Modified:
   trunk/gnue-appserver/samples/sample-de.gld
   trunk/gnue-appserver/share/gnue.gsd
   trunk/gnue-appserver/share/repository.ini
   trunk/gnue-appserver/src/gcd/GCParser.py
   trunk/gnue-appserver/src/gcd/readgcd.py
   trunk/gnue-appserver/src/geasInstance.py
   trunk/gnue-appserver/src/geasSession.py
   trunk/gnue-appserver/src/geasSessionManager.py
   trunk/gnue-appserver/src/language/Session.py
   trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
Log:
*) Added automatich timestamping to appserver
*) Added filter-capability to appserver
*) Added a 'session' object to procedure-namespace, giving access to the 
current session (including all it's functions and properties)


Modified: trunk/gnue-appserver/samples/sample-de.gld
===================================================================
--- trunk/gnue-appserver/samples/sample-de.gld  2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/samples/sample-de.gld  2004-09-27 19:29:30 UTC (rev 
6406)
@@ -18,7 +18,7 @@
     <property name="born" pos="800" label="Geburtsdatum"/>
     <property name="lastmeeting" pos="900" label="Letzte Sitzung"/>
     <property name="meettime" pos="1000" label="Sitzungszeit"/>
-    <procedure name="getnextmeeting" pos="1100" label="Nächste Sitzung"/>
+    <property name="nextmeeting" pos="1100" label="Nächste Sitzung"/>
     <property name="human" pos="1200" label="Menschlich"/>
   </class>
 

Modified: trunk/gnue-appserver/share/gnue.gsd
===================================================================
--- trunk/gnue-appserver/share/gnue.gsd 2004-09-27 19:22:20 UTC (rev 6405)
+++ trunk/gnue-appserver/share/gnue.gsd 2004-09-27 19:29:30 UTC (rev 6406)
@@ -65,6 +65,8 @@
                description="Module that defined this class" />
         <field name="gnue_name" type="string" length="35" nullable="N"
                description="Classname without modulename" />
+        <field name="gnue_filter" type="string" length="35"
+               description="Master-Class of the class" />
       </fields>
       <indexes/>
       <constraints>
@@ -262,6 +264,49 @@
       </primarykey>
     </table>
 
+    <!-- ============================================================ -->
+    <!-- Company                                                      -->
+    <!-- ============================================================ -->
+    <table name="gnue_company">
+      <fields>
+        <field name="gnue_id" type="string" length="32" nullable="N"
+               description="Object ID"/>
+        <field name="gnue_code" type="string" length="8" nullable="N" 
+               description="Code of the company"/>
+        <field name="gnue_name" type="string" length="35" nullable="N"
+               description="Name of the company"/>
+      </fields>
+      <indexes/>
+      <constraints/>
+      <primarykey name="pk_gnue_company">
+        <pkfield name="gnue_id"/>
+      </primarykey>
+    </table>
+
+    <!-- ============================================================ -->
+    <!-- Year                                                         -->
+    <!-- ============================================================ -->
+    <table name="gnue_year">
+      <fields>
+        <field name="gnue_id" type="string" length="32" nullable="N"
+               description="Object ID"/>
+        <field name="gnue_company" type="string" length="32" nullable="N" 
+               description="Company this year is assigned to"/>
+        <field name="gnue_code" type="string" length="8" nullable="N" 
+               description="Code of the year"/>
+      </fields>
+      <indexes/>
+      <constraints>
+        <constraint name="fk_gnue_year_gnue_company" type="foreignkey">
+          <constraintfield name="gnue_company"/>
+          <constraintref name="gnue_id" table="gnue_company"/>
+        </constraint>
+      </constraints>
+      <primarykey name="pk_gnue_year">
+        <pkfield name="gnue_id"/>
+      </primarykey>
+    </table>
+
   </tables>
   <data>
 
@@ -338,6 +383,19 @@
           <value field="gnue_module">00000000000000000000000000000000</value>
           <value field="gnue_name">message</value>
         </row>
+        <row>
+          <value field="gnue_comment">GNU Enterprise Company</value>
+          <value field="gnue_id">00000000000000000000000000000090</value>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_name">company</value>
+        </row>
+        <row>
+          <value field="gnue_comment">GNU Enterprise Year</value>
+          <value field="gnue_id">000000000000000000000000000000A0</value>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_name">year</value>
+          <value field="gnue_filter">gnue_company</value>
+        </row>
       </rows>
     </tabledata>
 
@@ -433,6 +491,16 @@
           <value field="gnue_nullable">TRUE</value>
           <value field="gnue_type">string</value>
         </row>
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">00000000000000000000000000000020</value>
+          <value field="gnue_id">00000000000000000000000000000025</value>
+          <value field="gnue_comment">Master-Class of the class</value>
+          <value field="gnue_length">35</value>
+          <value field="gnue_name">filter</value>
+          <value field="gnue_nullable">TRUE</value>
+          <value field="gnue_type">string</value>
+        </row>
 
         <!-- ============================================================ -->
         <!-- Properties of gnue_property                                  -->
@@ -846,6 +914,71 @@
           <value field="gnue_type">string</value>
           <value field="gnue_nullable">TRUE</value>
         </row>
+
+        <!-- ============================================================ -->
+        <!-- Properties of gnue_company                                   -->
+        <!-- ============================================================ -->
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">00000000000000000000000000000090</value>
+          <value field="gnue_id">00000000000000000000000000000091</value>
+          <value field="gnue_comment">Object ID</value>
+          <value field="gnue_name">id</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">id</value>
+        </row>
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">00000000000000000000000000000090</value>
+          <value field="gnue_id">00000000000000000000000000000092</value>
+          <value field="gnue_comment">Code of the company</value>
+          <value field="gnue_name">code</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">string</value>
+          <value field="gnue_length">8</value>
+        </row>
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">00000000000000000000000000000090</value>
+          <value field="gnue_id">00000000000000000000000000000093</value>
+          <value field="gnue_comment">Name of the company</value>
+          <value field="gnue_name">name</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">string</value>
+          <value field="gnue_length">35</value>
+        </row>
+
+        <!-- ============================================================ -->
+        <!-- Properties of gnue_year                                      -->
+        <!-- ============================================================ -->
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">000000000000000000000000000000A0</value>
+          <value field="gnue_id">000000000000000000000000000000A1</value>
+          <value field="gnue_comment">Object ID</value>
+          <value field="gnue_name">id</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">id</value>
+        </row>
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">000000000000000000000000000000A0</value>
+          <value field="gnue_id">000000000000000000000000000000A2</value>
+          <value field="gnue_comment">Code of the year</value>
+          <value field="gnue_name">code</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">string</value>
+          <value field="gnue_length">8</value>
+        </row>
+        <row>
+          <value field="gnue_module">00000000000000000000000000000000</value>
+          <value field="gnue_class">000000000000000000000000000000A0</value>
+          <value field="gnue_id">000000000000000000000000000000A3</value>
+          <value field="gnue_comment">Company this year is assigned to</value>
+          <value field="gnue_name">company</value>
+          <value field="gnue_nullable">FALSE</value>
+          <value field="gnue_type">gnue_company</value>
+        </row>
       </rows>
     </tabledata>
 
@@ -870,7 +1003,7 @@
         <row>
           <value field="gnue_class">00000000000000000000000000000020</value>
           <value field="gnue_comment">Generate GNUe Form Definition</value>
-          <value field="gnue_id" 
key="Y">00000000000000000000000000007001</value>
+          <value field="gnue_id">00000000000000000000000000007001</value>
           <value field="gnue_language">python</value>
           <value field="gnue_module">00000000000000000000000000000000</value>
           <value field="gnue_name">form</value>
@@ -878,13 +1011,10 @@
           <value field="gnue_type">string</value>
           <value field="gnue_code">
             from gnue.appserver import labels
-
             labels.find  = find
             labels.abort = abort
-
             formGen = labels.FormGenerator (self, language, connection,
                                             formwidth, formheight)
-
             return formGen.generateForm ()
           </value>
         </row>
@@ -908,7 +1038,7 @@
       <rows>
         <row>
           <value 
field="gnue_procedure">00000000000000000000000000007001</value>
-          <value field="gnue_id" 
key="Y">00000000000000000000000000770001</value>
+          <value field="gnue_id">00000000000000000000000000770001</value>
           <value field="gnue_name">language</value>
           <value field="gnue_comment">Langage (locale) for labels</value>
           <value field="gnue_length">5</value>
@@ -916,7 +1046,7 @@
         </row>
         <row>
           <value 
field="gnue_procedure">00000000000000000000000000007001</value>
-          <value field="gnue_id" 
key="Y">00000000000000000000000000770002</value>
+          <value field="gnue_id">00000000000000000000000000770002</value>
           <value field="gnue_name">connection</value>
           <value field="gnue_comment">Name of the connection to use</value>
           <value field="gnue_length">35</value>
@@ -924,7 +1054,7 @@
         </row>
         <row>
           <value 
field="gnue_procedure">00000000000000000000000000007001</value>
-          <value field="gnue_id" 
key="Y">00000000000000000000000000770003</value>
+          <value field="gnue_id">00000000000000000000000000770003</value>
           <value field="gnue_name">formwidth</value>
           <value field="gnue_comment">Maximum width of the form</value>
           <value field="gnue_type">number</value>
@@ -932,7 +1062,7 @@
         </row>
         <row>
           <value 
field="gnue_procedure">00000000000000000000000000007001</value>
-          <value field="gnue_id" 
key="Y">00000000000000000000000000770004</value>
+          <value field="gnue_id">00000000000000000000000000770004</value>
           <value field="gnue_name">formheight</value>
           <value field="gnue_comment">Maximum height of the form</value>
           <value field="gnue_type">number</value>

Modified: trunk/gnue-appserver/share/repository.ini
===================================================================
--- trunk/gnue-appserver/share/repository.ini   2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/share/repository.ini   2004-09-27 19:29:30 UTC (rev 
6406)
@@ -40,30 +40,35 @@
 gnue_module  = 00000000000000000000000000000000
 gnue_name    = module
 gnue_comment = GNU Enterprise Business Object Module
+gnue_filter  =
 
 [gnue_class]
 gnue_id      = 00000000000000000000000000000020
 gnue_module  = 00000000000000000000000000000000
 gnue_name    = class
 gnue_comment = GNU Enterprise Business Object Class
+gnue_filter  =
 
 [gnue_property]
 gnue_id      = 00000000000000000000000000000030
 gnue_module  = 00000000000000000000000000000000
 gnue_name    = property
 gnue_comment = GNU Enterprise Business Object Property
+gnue_filter  =
 
 [gnue_procedure]
 gnue_id      = 00000000000000000000000000000040
 gnue_module  = 00000000000000000000000000000000
 gnue_name    = procedure
 gnue_comment = GNU Enterprise Business Object Procedure
+gnue_filter  =
 
 [gnue_parameter]
 gnue_id      = 00000000000000000000000000000050
 gnue_module  = 00000000000000000000000000000000
 gnue_name    = parameter
 gnue_comment = GNU Enterprise Business Object Procedure Parameter
+gnue_filter  =
 
 ; =============================================================================
 ; Property definitions
@@ -153,6 +158,17 @@
 gnue_comment   = Comment
 gnue_nullable  = 
 
+[gnue_class.gnue_filter]
+gnue_id        = 00000000000000000000000000000025
+gnue_class     = 00000000000000000000000000000020
+gnue_module    = 00000000000000000000000000000000
+gnue_name      = filter
+gnue_type      = string
+gnue_length    = 35
+gnue_scale     = 
+gnue_comment   = Master-Class of the class
+gnue_nullable  = 
+
 ; -----------------------------------------------------------------------------
 ; properties
 ; -----------------------------------------------------------------------------

Modified: trunk/gnue-appserver/src/gcd/GCParser.py
===================================================================
--- trunk/gnue-appserver/src/gcd/GCParser.py    2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/src/gcd/GCParser.py    2004-09-27 19:29:30 UTC (rev 
6406)
@@ -32,7 +32,6 @@
 xmlElements   = None
 _LENGTH_SCALE = re.compile ('^\w+\s*\(\s*(\d*)\s*[\,]{0,1}\s*(\d*)\s*\)\s*')
 
-
 # =============================================================================
 # Exceptions
 # =============================================================================
@@ -110,7 +109,9 @@
           'module': {
             'Typecast': GTypecast.name},
           'comment': {
-            'Typecast': GTypecast.text}
+            'Typecast': GTypecast.text},
+          'filter': {
+            'Typecast': GTypecast.name},
         },
         'ParentTags': ('module',)
       },
@@ -342,19 +343,21 @@
   def _complete (self):
     # check if there's a gnue_id in new classes
     if self.action == 'create':
-      items = [c.fullName for c in self.findChildrenOfType ('GCProperty')]
-      if not 'gnue_id' in items:
-        gnueId = GCProperty (self)
-        gnueId.name     = 'id'
-        gnueId.type     = 'string'
-        gnueId.length   = 32
-        gnueId.comment  = 'Object ID'
-        gnueId.nullable = False
+      self.__addProperty ('id', 'Object ID', pType = 'string', length = 32)
+      self.__addProperty ('createdate', 'Date instance was created',
+          pType = 'datetime', nullable = True)
+      self.__addProperty ('createuser', 'User who created the instance',
+          pType = 'string', length = 8, nullable = True)
+      self.__addProperty ('modifydate', 'Date instance was last modified',
+          pType = 'datetime', nullable = True)
+      self.__addProperty ('modifyuser', 'User who last modified the instance',
+          pType = 'string', length = 8, nullable = True)
 
-        gnueId._validate ()
-        gnueId.module  = 'gnue'
-        gnueId.fullName= 'gnue_id'
+      if hasattr (self, 'filter'):
+        (fModule, fName) = Namespace.splitName (self.filter)
+        self.__addProperty (fName, module = fModule)
 
+
     # transform all 'calculated properties' into procedures
     for prop in self.findChildrenOfType ('GCProperty') [:]:
       if True in [isinstance (c, GContent) for c in prop._children]:
@@ -380,6 +383,33 @@
 
         self._children.remove (prop)
 
+  # ---------------------------------------------------------------------------
+  # Add a property to the class
+  # ---------------------------------------------------------------------------
+
+  def __addProperty (self, name, comment = None, module = "gnue", pType = None,
+      length = None, nullable = False):
+    items = [c.fullName for c in self.findChildrenOfType ('GCProperty')]
+
+    fullName = Namespace.createName (module, name)
+    if fullName in items:
+      return None
+
+    prop = GCProperty (self)
+    prop.name     = name
+    prop.type     = pType or fullName
+    if length is not None:
+      prop.length = length
+    if comment is not None:
+      prop.comment  = comment
+    prop.nullable = nullable
+    prop._validate ()
+
+    prop.module   = module
+    prop.fullName = fullName
+
+    return prop
+
       
 
 

Modified: trunk/gnue-appserver/src/gcd/readgcd.py
===================================================================
--- trunk/gnue-appserver/src/gcd/readgcd.py     2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/src/gcd/readgcd.py     2004-09-27 19:29:30 UTC (rev 
6406)
@@ -219,10 +219,10 @@
 
     if aClass.action == 'create':
       self.tables [-1]['primarykey'] = {
-          'name'  : 'gnue_id_pk_%s' % aClass.fullName,
+          'name'  : 'pk_%s' % aClass.fullName,
           'fields': ['gnue_id']}
 
-    cDef = self.fetchTags (aClass, ['name', 'module', 'comment'])
+    cDef = self.fetchTags (aClass, ['name', 'module', 'comment', 'filter'])
     cDef ['gnue_id'] = None
 
     self.classes [aClass.fullName] = cDef
@@ -455,7 +455,8 @@
     attributes = {'name'    : "dts_gnueClass",
                   'database': self.OPTIONS ['connection'],
                   'table'   : 'gnue_class'}
-    fieldList = ['gnue_id', 'gnue_name', 'gnue_module', 'gnue_comment']
+    fieldList = ['gnue_id', 'gnue_name', 'gnue_module', 'gnue_comment',
+                 'gnue_filter']
 
     datasource = GDataSource.DataSourceWrapper (
           connections = self.connections,

Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py    2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/src/geasInstance.py    2004-09-27 19:29:30 UTC (rev 
6406)
@@ -229,7 +229,7 @@
   # Set the value of a property
   # ---------------------------------------------------------------------------
 
-  def __putValue (self, propertyname, value):
+  def __putValue (self, propertyname, value, regular = True):
 
     propertydef = self.__classdef.properties [propertyname]
     if propertydef.isCalculated:
@@ -244,13 +244,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, {}, {'oldValue': self.__getValue (propertyname),
-                              'newValue': __value,
-                              'propertyName': propertydef.fullName})
+    if regular:
+      for proc in self.__classdef.procedures.values ():
+        if proc.gnue_name.upper () == 'ONCHANGE':
+          self.call (proc, {}, {'oldValue': self.__getValue (propertyname),
+                                'newValue': __value,
+                                'propertyName': propertydef.fullName})
 
-
     self.__record.putField (propertydef.column, __value)
 
   # ---------------------------------------------------------------------------
@@ -274,7 +274,8 @@
     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)
+    sess = Session.Session (self.__session.sm, self.__session.id,
+                            self.__session.parameters)
 
     # Create an object representing the current business object
     obj = Object.Object (sess, self.__classdef.fullName,
@@ -297,8 +298,9 @@
     cx.shortname   = '%s.%s' % (self.__classdef.fullName, 
proceduredef.fullName)
     cx.description = proceduredef.gnue_comment
 
-    # the object itself
+    # the object itself and the session
     cx.bindObject ('self', obj)
+    cx.bindObject ('session', sess)
 
     if namespace is not None:
       for (key, value) in namespace.items ():
@@ -368,5 +370,25 @@
   def __getitem__ (self, key):
     return self.__getValue (key)
 
+
+  # ---------------------------------------------------------------------------
+  # Check wether a classdef has a property or not
+  # ---------------------------------------------------------------------------
+
   def has_key (self, key):
     return self.__classdef.properties.has_key (key)
+
+
+  # ---------------------------------------------------------------------------
+  # Update instance-stamps (creation- or modification-date/user )
+  # ---------------------------------------------------------------------------
+
+  def updateStamp (self, creation = False):
+    (datefield, userfield) = [('gnue_modifydate', 'gnue_modifyuser'),
+                              ('gnue_createdate', 'gnue_createuser')][creation]
+    if self.has_key (datefield):
+      self.__putValue (datefield, mx.DateTime.now ())
+
+    if self.has_key (userfield) and self.__session.user is not None:
+      self.__putValue (userfield, self.__session.user)
+

Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py     2004-09-27 19:22:20 UTC (rev 
6405)
+++ trunk/gnue-appserver/src/geasSession.py     2004-09-27 19:29:30 UTC (rev 
6406)
@@ -60,7 +60,27 @@
     msg = u_("Invalid condition data type '%s'") % type (condition)
     errors.ApplicationError.__init__ (self, msg)
 
+class NoFilterParamError (errors.UserError):
+  def __init__ (self, filterName):
+    msg = u_("No parameter for the filter %s specified") % filterName
+    errors.UserError.__init__ (self, msg)
 
+class InvalidFilterValueError (errors.AdminError):
+  def __init__ (self, filterName, filterValue):
+    msg = u_("'%(value)s' is not a valid filter of the type '%(name)s'") \
+          % {'value': filterValue,
+             'name': filterName}
+    errors.AdminError.__init__ (self, msg)
+
+class MultipleFilterValueError (errors.AdminError):
+  def __init__ (self, filterName, filterValue):
+    msg = u_("Multiple instances of the filter '%(name)s' matches the "
+             "value '%(value)s'") \
+          % {'name': filterName,
+             'value': filterValue}
+    errors.AdminError.__init__ (self, msg)
+
+
 # =============================================================================
 # Session class
 # =============================================================================
@@ -71,7 +91,7 @@
   # Initalize
   # ---------------------------------------------------------------------------
 
-  def __init__ (self, connections, authAdapter, sm, id, locale):
+  def __init__ (self, connections, authAdapter, sm, id, params):
 
     self.loggedIn = 0
     self.connections = connections
@@ -80,7 +100,6 @@
     except:
       self.database = "gnue"
 
-    self.__user           = ""
     self.__lists          = {}
     self.__listcount      = 0
     self.__authAdapter    = authAdapter
@@ -90,8 +109,14 @@
 
     self.sm     = sm                        # The session manager
     self.id     = id                        # The session id
-    self.locale = locale
+    self.parameters = params
+    self.locale  = params.get ('language')
+    self.user    = None
+    self.filters = {}
 
+    gDebug (2, "Session-Params: %s" % params)
+
+
   # ---------------------------------------------------------------------------
   # Get a class definition from a class name and check access
   # ---------------------------------------------------------------------------
@@ -99,7 +124,7 @@
   def __getClassdef (self, classname):
 
     # check if user has access rights for this class
-    if not self.__authAdapter.hasAccess (self, self.__user, classname):
+    if not self.__authAdapter.hasAccess (self, self.user, classname):
       raise AccessDeniedError, (classname)
 
     return self.sm.classes [classname]
@@ -202,6 +227,32 @@
 
 
   # ---------------------------------------------------------------------------
+  # Get the value for the given filter
+  # ---------------------------------------------------------------------------
+
+  def __getFilter (self, filterName):
+    if not self.filters.has_key (filterName):
+      filterValue = self.parameters.get (filterName, None)
+      if filterValue is None:
+        raise NoFilterParamError, (filterName)
+
+      cond = ['eq', ['field', 'gnue_code'], ['const', filterValue]]
+      fList = self.request (filterName, cond, [], ['gnue_id'])
+      idList = self.fetch (fList, 0, 5)
+
+      if not len (idList):
+        raise InvalidFilterValueError, (filterName, filterValue)
+
+      elif len (idList) > 1:
+        raise MultipleFilterValueError, (filterName, filterValue)
+
+      self.filters [filterName] = idList [0][0]
+
+    return self.filters [filterName]
+
+
+
+  # ---------------------------------------------------------------------------
   # Log into the application server
   # ---------------------------------------------------------------------------
 
@@ -212,9 +263,9 @@
 
     # This username/password is for the Application Server, not for the
     # database.
-    self.__user = user
-    self.loggedIn = self.__authAdapter.authenticate(self, user,
-                                                   {'password':password} )
+    self.user = user
+    self.loggedIn = self.__authAdapter.authenticate (self, user,
+                                                     {'password': password})
     if self.loggedIn:
       self.__connection = data.connection (self.connections, self.database)
 
@@ -248,6 +299,7 @@
     self.__connection.commit ()
     self.__dirtyInstances = {}
 
+
   # ---------------------------------------------------------------------------
   # Rollback the active transaction
   # ---------------------------------------------------------------------------
@@ -347,6 +399,7 @@
     list = self.__getList (list_id)
     return list.fetch (start, count)
 
+
   # ---------------------------------------------------------------------------
   # Create a single geasInstance object from an existing record
   # ---------------------------------------------------------------------------
@@ -376,6 +429,10 @@
 
     table    = classdef.table
     record   = self.__connection.insertRecord (table)
+    if classdef.gnue_filter is not None:
+      fName = classdef.gnue_filter
+      record.putField (fName, self.__getFilter (fName))
+
     instance = geasInstance.geasInstance (self, self.__connection, record,
                                           classdef)
 
@@ -430,14 +487,20 @@
 
       result = []
       i = 0
+
       for object_id in obj_id_list:
         if object_id:
           instance = self.__findInstance (classdef, object_id, [])
           new_object_id = object_id
+          created = False
         else:
           instance = self.__newInstance (classdef)
           new_object_id = instance.get ([u'gnue_id']) [0]
+          created = True
+
         instance.put (propertylist, data [i])
+        instance.updateStamp (created)
+
         i += 1
         result.append (new_object_id)
         self.__dirtyInstances [new_object_id] = instance
@@ -531,8 +594,14 @@
     by the datasource, and another one which has to be processed by appserver.
     """
 
+    if classdef.gnue_filter is not None:
+      filterCond = GConditions.buildConditionFromDict ( \
+          {classdef.gnue_filter: self.__getFilter (classdef.gnue_filter)})
+    else:
+      filterCond = None
+
     if condition is None:
-      return (None, None)
+      return (filterCond, None)
 
     if isinstance (condition, ListType):
       cTree = GConditions.buildTreeFromList (condition)
@@ -542,11 +611,23 @@
       cTree = condition
     else:
       raise ConditionDataTypeError, condition
+  
+    # If filterCond is already mentioned in the condition tree, keep that one
+    if filterCond is not None:
+      cList = cTree.findChildrenOfType ('GCCField', allowAllChildren = True)
+      if len (cList):
+        for item in cList:
+          if classdef.gnue_filter in item.name.split ('.'):
+            filterCond = None
+            break
 
     dbTrees = []
     asTrees = []
     forest  = []
 
+    if filterCond is not None:
+      self.__splitIntoAnd (filterCond, forest)
+
     if len (cTree._children):
       # NOTE: the first element of a condition tree is a GCondition object
       # self.__splitIntoAnd (cTree._children [0], forest)

Modified: trunk/gnue-appserver/src/geasSessionManager.py
===================================================================
--- trunk/gnue-appserver/src/geasSessionManager.py      2004-09-27 19:22:20 UTC 
(rev 6405)
+++ trunk/gnue-appserver/src/geasSessionManager.py      2004-09-27 19:29:30 UTC 
(rev 6406)
@@ -75,8 +75,8 @@
 
   def _buildInternalSession (self):
     self._internalSession = geasSession.geasSession (self._connections,
-      geasAuthentication.geasAuthAgent(), self, 0, None)
-    self._internalSession.login (None,None) # fake login
+      geasAuthentication.geasAuthAgent(), self, 0, {})
+    self._internalSession.login (None, None) # fake login
     self._sessions [0] = self._internalSession
 
   # ---------------------------------------------------------------------------
@@ -109,7 +109,7 @@
     conn = GConnections.GConnections(location, loginHandler, loginOptions)
    
     sess = geasSession.geasSession (conn, self._authAdapter, self,
-                                    self._sessNo, authentication ['language'])
+                                    self._sessNo, authentication)
 
     sess.login (authentication ['user'], authentication ['password'])
     self._sessions [self._sessNo] = sess

Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py        2004-09-27 19:22:20 UTC 
(rev 6405)
+++ trunk/gnue-appserver/src/language/Session.py        2004-09-27 19:29:30 UTC 
(rev 6406)
@@ -51,10 +51,11 @@
   # -------------------------------------------------------------------------
   # Constructor
   # -------------------------------------------------------------------------
-  def __init__ (self, sessionManager, sessionId):
+  def __init__ (self, sessionManager, sessionId, params = {}):
     self.__sm         = sessionManager
     self.__session_id = sessionId
     self.__context    = None
+    self.parameters   = params
 
   # -------------------------------------------------------------------------
   # Get the session's sessionManager
@@ -166,9 +167,10 @@
   # -------------------------------------------------------------------------
   # Constructor
   # -------------------------------------------------------------------------
-  def __init__ (self, sessionManager, user, password):
+  def __init__ (self, sessionManager, user, password, params = {}):
     Session.__init__ (self, sessionManager,
-                  sessionManager.open ({'user': user, 'password': password}))
+                  sessionManager.open ({'user': user, 'password': password}),
+                  params)
 
 
 # =============================================================================
@@ -179,6 +181,6 @@
   # -------------------------------------------------------------------------
   # Constructor
   # -------------------------------------------------------------------------
-  def __init__ (self, sessionManager):
-    Session.__init__ (self, sessionManager, 0)
+  def __init__ (self, sessionManager, params = {}):
+    Session.__init__ (self, sessionManager, 0, params)
 

Modified: 
trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py 
2004-09-27 19:22:20 UTC (rev 6405)
+++ trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py 
2004-09-27 19:29:30 UTC (rev 6406)
@@ -55,13 +55,19 @@
   # ---------------------------------------------------------------------------
 
   def getLoginFields (self):
+    result = []
+
     cfg = gConfigDict (section = 'appserver')
     dbauth = cfg.get ('authentication', 'False')
     if dbauth.lower () in ['true', 'yes', 'y']:
-      return [['_username', _('User Name'), 0], ['_password', _('Password'), 
1]]
-    else:
-      return []
+      result.extend ([['_username', _('User Name'), 0],
+                      ['_password', _('Password'), 1]])
 
+    result.extend ([['gnue_company', _('Company'), 0],
+                    ['gnue_year', _('Fiscal Year'), 0]])
+
+    return result
+
   # ---------------------------------------------------------------------------
   # Open a connection
   # ---------------------------------------------------------------------------
@@ -83,9 +89,15 @@
     self._sm = self._server.request ('Session')
 
     try:
-      self._sess_id = self._sm.open ({'user': user, 'password': passwd,
-          'language': connectData ['_language']})
+      if connectData.has_key ('_username'):
+        del connectData ['_username']
+      if connectData.has_key ('_password'):
+        del connectData ['_password']
+      connectData ['user']     = user
+      connectData ['password'] = passwd
 
+      self._sess_id = self._sm.open (connectData)
+
     except errors.RemoteError, e:
       if e.getName () == 'AuthError':
         raise Exceptions.LoginError, e.getMessage ()
@@ -96,7 +108,7 @@
       raise Exceptions.ConnectError, e.getMessage ()
 
     except:
-      raise Exceptions.ConnectError, "%s" % sys.exc_info () [1]
+      raise Exceptions.ConnectError, errors.getException () [2]
 
     # Can be removed after the call to _dataConnection.cursor() is removed from
     # the Base driver





reply via email to

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