From e2f1aff17327108a34b0670a8ccc721ba02816a9 Mon Sep 17 00:00:00 2001
From: Jean-Paul Smets <jp@nexedi.com>
Date: Wed, 14 Feb 2007 14:29:40 +0000
Subject: [PATCH] Required for transactional ClassTool. Also updated RAD
 environment so that it is possible to use addXMLObject as constructor for
 portal types.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@12697 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/Utils.py | 76 +++++++++++++--------------------------
 1 file changed, 25 insertions(+), 51 deletions(-)

diff --git a/product/ERP5Type/Utils.py b/product/ERP5Type/Utils.py
index 59af0f672d..eb9555b6d3 100644
--- a/product/ERP5Type/Utils.py
+++ b/product/ERP5Type/Utils.py
@@ -56,14 +56,6 @@ from Products.ERP5Type import PropertySheet
 
 from zLOG import LOG, BLATHER, PROBLEM
 
-#####################################################
-# Global Switches
-#####################################################
-
-INITIALIZE_PRODUCT_RAD = 0 # If set to 0, product documents are not
-                           # initialized this will divide by two memory
-                           # usage taken by getters and setters 0 value
-                           # is suggested for new ERP5 projetcs
 
 #####################################################
 # Compatibility - XXX - BAD
@@ -71,7 +63,6 @@ INITIALIZE_PRODUCT_RAD = 0 # If set to 0, product documents are not
 
 from Accessor.TypeDefinition import *
 
-
 #####################################################
 # Generic sort method
 #####################################################
@@ -405,8 +396,9 @@ def readLocalPropertySheet(class_id):
   f.close()
   return text
 
-def writeLocalPropertySheet(class_id, text, create=1):
-  instance_home = getConfiguration().instancehome
+def writeLocalPropertySheet(class_id, text, create=1, instance_home=None):
+  if instance_home is None:
+    instance_home = getConfiguration().instancehome
   path = os.path.join(instance_home, "PropertySheet")
   path = os.path.join(path, "%s.py" % class_id)
   if create:
@@ -418,6 +410,7 @@ def writeLocalPropertySheet(class_id, text, create=1):
 def importLocalPropertySheet(class_id, path = None):
   from Products.ERP5Type import PropertySheet
   if path is None:
+    # We should save a copy in ZODB here XXX
     instance_home = getConfiguration().instancehome
     path = os.path.join(instance_home, "PropertySheet")
   path = os.path.join(path, "%s.py" % class_id)
@@ -534,8 +527,9 @@ def readLocalConstraint(class_id):
   f.close()
   return text
 
-def writeLocalExtension(class_id, text, create=1):
-  instance_home = getConfiguration().instancehome
+def writeLocalExtension(class_id, text, create=1, instance_home=None):
+  if instance_home is None:
+    instance_home = getConfiguration().instancehome
   path = os.path.join(instance_home, "Extensions")
   path = os.path.join(path, "%s.py" % class_id)
   if create:
@@ -544,8 +538,9 @@ def writeLocalExtension(class_id, text, create=1):
   f = open(path, 'w')
   f.write(text)
 
-def writeLocalTest(class_id, text, create=1):
-  instance_home = getConfiguration().instancehome
+def writeLocalTest(class_id, text, create=1, instance_home=None):
+  if instance_home is None:
+    instance_home = getConfiguration().instancehome
   path = os.path.join(instance_home, "tests")
   path = os.path.join(path, "%s.py" % class_id)
   if create:
@@ -554,8 +549,9 @@ def writeLocalTest(class_id, text, create=1):
   f = open(path, 'w')
   f.write(text)
 
-def writeLocalConstraint(class_id, text, create=1):
-  instance_home = getConfiguration().instancehome
+def writeLocalConstraint(class_id, text, create=1, instance_home=None):
+  if instance_home is None:
+    instance_home = getConfiguration().instancehome
   path = os.path.join(instance_home, "Constraint")
   path = os.path.join(path, "%s.py" % class_id)
   if create:
@@ -596,8 +592,9 @@ def readLocalDocument(class_id):
   f.close()
   return text
 
-def writeLocalDocument(class_id, text, create=1):
-  instance_home = getConfiguration().instancehome
+def writeLocalDocument(class_id, text, create=1, instance_home=None):
+  if instance_home is None:
+    instance_home = getConfiguration().instancehome
   path = os.path.join(instance_home, "Document")
   path = os.path.join(path, "%s.py" % class_id)
   if create:
@@ -823,50 +820,22 @@ def initializeProduct( context,
   if content_classes is None: content_classes = []
   product_name = this_module.__name__.split('.')[-1]
 
-  # Define content classes from document_classes
-  extra_content_classes = []
-  #if document_module is not None:
-  if 0:
-    for module_name in document_classes:
-      #LOG('Inspecting %s %s' % (document_module, module_name),0,'')
-      candidate = getattr(document_module, module_name)
-      candidate = getattr(candidate, module_name)
-      #LOG('Found %s' % candidate,0,'')
-      if hasattr(candidate, 'isPortalContent'):
-        if candidate.isPortalContent == 1:
-          extra_content_classes += [candidate]
-
-  # Initialize Default Properties and Constructors for RAD classes
-  if INITIALIZE_PRODUCT_RAD:
-    #initializeDefaultProperties(content_classes)
-    #initializeDefaultProperties(extra_content_classes)
-    initializeDefaultProperties(object_classes)
-    #initializeDefaultConstructors(content_classes) #Does not work yet
-
-
   # Define content constructors for Document content classes (RAD)
+  initializeDefaultConstructors(content_classes)
   extra_content_constructors = []
-  for content_class in extra_content_classes:
+  for content_class in content_classes:
     if hasattr(content_class, 'add' + content_class.__name__):
       extra_content_constructors += [
                 getattr(content_class, 'add' + content_class.__name__)]
-    else:
-      extra_content_constructors += [
-                getattr(document_module, 'add' + content_class.__name__)]
 
   # Define FactoryTypeInformations for all content classes
   contentFactoryTypeInformations = []
   for content in content_classes:
     if hasattr(content, 'factory_type_information'):
       contentFactoryTypeInformations.append(content.factory_type_information)
-  for content in extra_content_classes:
-    if hasattr(content, 'factory_type_information'):
-      contentFactoryTypeInformations.append(content.factory_type_information)
 
   # Aggregate
-  content_classes = list(content_classes) + list(extra_content_classes)
-  content_constructors = list(content_constructors)\
-                          + list(extra_content_constructors)
+  content_constructors = list(content_constructors) + list(extra_content_constructors)
 
   # Begin the initialization steps
   bases = tuple(content_classes)
@@ -909,6 +878,7 @@ def initializeProduct( context,
     if hasattr(klass, 'permission_type'):
       klass_permission=klass.permission_type
 
+    #LOG("ContentInit", 0, str(content_constructors))
     utils.ContentInit( klass.meta_type,
                        content_types=[klass],
                        permission=klass_permission,
@@ -971,7 +941,11 @@ def setDefaultConstructor(klass):
       Create the default content creation method
     """
     if not hasattr(klass, 'add' + klass.__name__):
-      setattr(klass, 'add' + klass.__name__, Constructor(klass))
+      document_constructor = DocumentConstructor(klass)
+      document_constructor_name = "add%s" % klass.__name__
+      setattr(klass, document_constructor_name, document_constructor)
+      document_constructor.__name__ = document_constructor_name
+
 
 # Creation of default property accessors and values
 def initializeDefaultProperties(property_holder_list, object=None):
-- 
2.30.9