commit-gnue
[Top][All Lists]
Advanced

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

r6425 - trunk/gnue-appserver/src/classrep


From: johannes
Subject: r6425 - trunk/gnue-appserver/src/classrep
Date: Wed, 29 Sep 2004 10:00:16 -0500 (CDT)

Author: johannes
Date: 2004-09-29 10:00:15 -0500 (Wed, 29 Sep 2004)
New Revision: 6425

Modified:
   trunk/gnue-appserver/src/classrep/Base.py
   trunk/gnue-appserver/src/classrep/Class.py
   trunk/gnue-appserver/src/classrep/Module.py
   trunk/gnue-appserver/src/classrep/Parameter.py
   trunk/gnue-appserver/src/classrep/Procedure.py
   trunk/gnue-appserver/src/classrep/Property.py
   trunk/gnue-appserver/src/classrep/__init__.py
Log:
Improved loading of class repository (reduced number of selects from 96 to 6)


Modified: trunk/gnue-appserver/src/classrep/Base.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Base.py   2004-09-29 09:26:36 UTC (rev 
6424)
+++ trunk/gnue-appserver/src/classrep/Base.py   2004-09-29 15:00:15 UTC (rev 
6425)
@@ -262,6 +262,7 @@
                                              self._getColumns ())
       if len (list) == 1:
         newItem = self._getNewItem (list [0])
+        newItem.complete ()
         try:
           newItem.validate ()
 
@@ -282,8 +283,16 @@
     del self._items [key.lower ()]
 
 
+  # ---------------------------------------------------------------------------
+  # Add an item to the internal dictionary
+  # ---------------------------------------------------------------------------
 
+  def __setitem__ (self, key, value):
+    self._items [key.lower ()] = value
 
+
+
+
 # =============================================================================
 # This class maps all dictionary-keys to properties
 # =============================================================================
@@ -374,3 +383,16 @@
     for (key, value) in self.__predefined.items ():
       if isinstance (value, types.UnicodeType) and value == aObject.objectId:
         self.__predefined [key] = aObject
+
+
+  # ---------------------------------------------------------------------------
+  # Complete an instance
+  # ---------------------------------------------------------------------------
+
+  def complete (self):
+    """
+    Descendants can override this function to perform tasks to make an instance
+    complete. This function will be called after a new instance has been
+    created on a request to the dictionary (__getitem__).
+    """
+    pass

Modified: trunk/gnue-appserver/src/classrep/Class.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Class.py  2004-09-29 09:26:36 UTC (rev 
6424)
+++ trunk/gnue-appserver/src/classrep/Class.py  2004-09-29 15:00:15 UTC (rev 
6425)
@@ -83,6 +83,7 @@
         # NOTE: this won't happen very often, since it is only called if a
         # module requests a list of all classes without having it's own
         # ClassDict-instance.
+        gDebug (2, "FORCE classdict.reload () in constructor ?!")
         self.reload ()
 
 
@@ -95,12 +96,36 @@
     This function reloads all available classes of a module, and all their
     properties and procedures.
     """
+    gDebug (2, "ClassDict::reload ()")
+
     BaseDictionary.reload (self)
+
+    gProp = PropertyDict (self._session, None, modules = self.modules)
+    gProp.reload ()
+
+    gParam = ParameterDict (self._session, None)
+    gParam.reload ()
+
+    gProc = ProcedureDict (self._session, None, modules = self.modules)
+    gProc.reload ()
+
+    for proc in gProc.values ():
+      for param in gParam.values ():
+        if param.gnue_procedure.gnue_id == proc.gnue_id:
+          proc.parameters [param.fullName] = param
+
     for aClass in self.values ():
-      aClass.properties.reload ()
-      aClass.procedures.reload ()
+      for prop in gProp.values ():
+        if prop.gnue_class.gnue_id == aClass.gnue_id:
+          aClass.properties [prop.fullName] = prop
 
+      for proc in gProc.values ():
+        if proc.gnue_class.gnue_id == aClass.gnue_id:
+          aClass.procedures [proc.fullName] = proc
 
+    gDebug (2, "End of ClassDict::Reload ()")
+
+
   # ---------------------------------------------------------------------------
   # Create a new instance for a dictionary-item
   # ---------------------------------------------------------------------------
@@ -110,11 +135,8 @@
     Create a new instance of a class and reload it's properties and procedures.
     """
     module = self.modules.find (aObject.gnue_module.objectId)
-    c = Class (self._session, self, module, aObject,
-               {"gnue_id": aObject.objectId})
-    c.properties.reload ()
-    c.procedures.reload ()
-    return c
+    return Class (self._session, self, module, aObject,
+                  {"gnue_id": aObject.objectId})
 
 
   # ---------------------------------------------------------------------------
@@ -260,3 +282,20 @@
     for proc in self.procedures.values ():
       proc.replaceReferences (module)
       proc.replaceReferences (me)
+
+
+  # ---------------------------------------------------------------------------
+  # For a class to be complete, make sure properties and procedures are loaded
+  # ---------------------------------------------------------------------------
+
+  def complete (self):
+    """
+    After adding a new instance to the class dictionary make sure it's
+    properties and procedures are up to date too
+    """
+    gDebug (2, "Completing class %s" % self.fullName)
+    self.properties.reload ()
+    self.procedures.reload ()
+
+    self.validate ()
+

Modified: trunk/gnue-appserver/src/classrep/Module.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Module.py 2004-09-29 09:26:36 UTC (rev 
6424)
+++ trunk/gnue-appserver/src/classrep/Module.py 2004-09-29 15:00:15 UTC (rev 
6425)
@@ -143,8 +143,15 @@
     if attr == 'classes':
       self.__dict__ ['classes'] = ClassDict (self._session, self.modules, self)
 
-      # Make sure the created class-dictionary is up to date
-      self.classes.reload ()
+      if self.modules.classdict is not None:
+        for aClass in self.modules.classdict.values ():
+          if aClass.gnue_module.gnue_id == self.gnue_id:
+            self.classes [aClass.fullName] = aClass
+      else:
+        # Make sure the created class-dictionary is up to date
+        gDebug (2, "FORCE a classdict-reload through moduledict.classes ()")
+        self.classes.reload ()
+
       return self.classes
 
     else:

Modified: trunk/gnue-appserver/src/classrep/Parameter.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Parameter.py      2004-09-29 09:26:36 UTC 
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Parameter.py      2004-09-29 15:00:15 UTC 
(rev 6425)
@@ -65,7 +65,10 @@
   # ---------------------------------------------------------------------------
 
   def _getReloadCondition (self):
-    return ['eq', ['field', u'gnue_procedure'], ['const', self.__proc.gnue_id]]
+    if self.__proc is not None:
+      return ['eq', ['field', u'gnue_procedure'], 
['const',self.__proc.gnue_id]]
+    else:
+      return []
 
 
   # ---------------------------------------------------------------------------

Modified: trunk/gnue-appserver/src/classrep/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Procedure.py      2004-09-29 09:26:36 UTC 
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Procedure.py      2004-09-29 15:00:15 UTC 
(rev 6425)
@@ -49,39 +49,36 @@
   # ---------------------------------------------------------------------------
   # Construct a Procedure-Dictionary for class aClass
   # ---------------------------------------------------------------------------
-  def __init__ (self, session, aClass, predefs = None):
+  def __init__ (self, session, aClass, predefs = None, modules = None):
     BaseDictionary.__init__ (self, session, 'gnue_procedure')
 
-    self.__class  = aClass
-    self.__module = self.__class.module
+    self.__class = aClass
 
+    if aClass is not None:
+      self.__module  = self.__class.module
+      self.__modules = modules or self.__module.modules
+    else:
+      self.__module  = None
+      self.__modules = modules
 
-  # ---------------------------------------------------------------------------
-  # Reload the dictionary
-  # ---------------------------------------------------------------------------
 
-  def reload (self):
-    BaseDictionary.reload (self)
-    for aProc in self.values ():
-      aProc.parameters.reload ()
-
-
   # ---------------------------------------------------------------------------
   # Create a new instance of a dictionary item
   # ---------------------------------------------------------------------------
   def _getNewItem (self, aObject):
-    pMod = self.__module.modules.find (aObject.gnue_module.objectId)
-    aProc = Procedure (self._session, pMod, aObject,
+    pMod = self.__modules.find (aObject.gnue_module.objectId)
+    return Procedure (self._session, pMod, aObject,
                       {"gnue_id": aObject.objectId})
-    aProc.parameters.reload ()
-    return aProc
 
 
   # ---------------------------------------------------------------------------
   # A reload () returns only the procedures of the class
   # ---------------------------------------------------------------------------
   def _getReloadCondition (self):
-    return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+    if self.__class is not None:
+      return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+    else:
+      return []
 
 
   # ---------------------------------------------------------------------------
@@ -157,3 +154,12 @@
       self.calcFullName = None
 
     self.isValidated = True
+
+
+  # ---------------------------------------------------------------------------
+  # Complete the procedure instance
+  # ---------------------------------------------------------------------------
+
+  def complete (self):
+    gDebug (2, "Completing procudure %s" % self.fullName)
+    self.parameters.reload ()

Modified: trunk/gnue-appserver/src/classrep/Property.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Property.py       2004-09-29 09:26:36 UTC 
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Property.py       2004-09-29 15:00:15 UTC 
(rev 6425)
@@ -52,16 +52,21 @@
   # ---------------------------------------------------------------------------
   # Construct a Property-Dictionary for class aClass
   # ---------------------------------------------------------------------------
-  def __init__ (self, session, aClass, predefs = None):
+  def __init__ (self, session, aClass, predefs = None, modules = None):
     BaseDictionary.__init__ (self, session, 'gnue_property')
 
-    self.__class  = aClass
-    self.__module = self.__class.module
+    self.__class   = aClass
+    if aClass is not None:
+      self.__module  = self.__class.module
+      self.__modules = modules or self.__module.modules
+    else:
+      self.__module  = None
+      self.__modules = modules
 
     # predefs is a list of dictionaries, describing the properties
     if predefs is not None:
       for pDef in predefs:
-        pMod = self.__module.modules.find (pDef ['gnue_module'])
+        pMod = self.__modules.find (pDef ['gnue_module'])
         prop = Property (session, pMod, None, pDef)
 
         self._items [prop.fullName.lower ()] = prop
@@ -71,7 +76,7 @@
   # Create a new instance of a dictionary item
   # ---------------------------------------------------------------------------
   def _getNewItem (self, aObject):
-    pMod = self.__module.modules.find (aObject.gnue_module.objectId)
+    pMod = self.__modules.find (aObject.gnue_module.objectId)
     return Property (self._session, pMod, aObject,
                      {"gnue_id": aObject.objectId})
 
@@ -80,7 +85,10 @@
   # Restrict a reload () to the classes properties 
   # ---------------------------------------------------------------------------
   def _getReloadCondition (self):
-    return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+    if self.__class is not None:
+      return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+    else:
+      return []
 
 
   # ---------------------------------------------------------------------------

Modified: trunk/gnue-appserver/src/classrep/__init__.py
===================================================================
--- trunk/gnue-appserver/src/classrep/__init__.py       2004-09-29 09:26:36 UTC 
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/__init__.py       2004-09-29 15:00:15 UTC 
(rev 6425)
@@ -65,4 +65,5 @@
   for module in server.modules.values ():
     module.validate ()
 
+  gDebug (1, "Classrepository loaded")
   return





reply via email to

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