From 071be697745bdc3d6dd8f1d92d3932f8b6c4d782 Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@nexedi.com>
Date: Wed, 18 Feb 2004 17:23:53 +0000
Subject: [PATCH] added CMF setters

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@489 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5CPS/CPSDefaultPatch.py  |  6 ++
 product/ERP5CPS/CPSDocumentPatch.py | 87 +++++++++++++++++++++++++----
 2 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/product/ERP5CPS/CPSDefaultPatch.py b/product/ERP5CPS/CPSDefaultPatch.py
index a01f46673b..bf092994a3 100755
--- a/product/ERP5CPS/CPSDefaultPatch.py
+++ b/product/ERP5CPS/CPSDefaultPatch.py
@@ -20,8 +20,14 @@ from Products.CPSDefault.Folder import Folder
 from Products.ERP5Type.Document.Folder import Folder as ERP5Folder
 from Products.ERP5Type.Base import Base
 
+def _propertyMap(self):
+  """Return a tuple of mappings, giving meta-data for properties """
+  return tuple(list(self._properties) + list(getattr(self, '_local_properties', ())))
+
+
 Folder._setProperty = Base._setProperty
 Folder.setProperty = Base.setProperty
+Folder._propertyMap = _propertyMap
 Folder.getProperty = Base.getProperty
 Folder._edit = Base._edit
 Folder.asXML = ERP5Folder.asXML
diff --git a/product/ERP5CPS/CPSDocumentPatch.py b/product/ERP5CPS/CPSDocumentPatch.py
index a7a3064e86..37603014b9 100755
--- a/product/ERP5CPS/CPSDocumentPatch.py
+++ b/product/ERP5CPS/CPSDocumentPatch.py
@@ -18,7 +18,7 @@
 
 from Products.CPSDocument.CPSDocument import CPSDocument
 from Products.CPSSchemas.BasicFields import CPSImageField, CPSFileField, CPSDateTimeField
-from Products.CPSSchemas.BasicFields import CPSStringField
+from Products.CPSSchemas.BasicFields import CPSStringField, CPSIntField
 from Products.ERP5Type.Base import Base
 from Products.ERP5Type.Utils import UpperCase
 from Acquisition import aq_base, aq_inner
@@ -42,7 +42,12 @@ class PatchedCPSDocument(CPSDocument):
         'type'  :   'object'
       }
       )
-    field_list = self.getTypeInfo().getDataModel(self)._fields.items()
+    type_info = self.getTypeInfo()
+    field_list = []
+    if type_info is not None:
+      data_model = type_info.getDataModel(self)
+      if data_model is not None:
+        field_list = data_model._fields.items()
     field_list.sort()
     for (prop_id,field) in field_list:
       #for field in schema.objectValues():
@@ -56,9 +61,11 @@ class PatchedCPSDocument(CPSDocument):
       elif isinstance(field,CPSStringField):
         f_type = 'string'
       elif isinstance(field,CPSDateTimeField):
-        f_type = 'string'
+        f_type = 'date'
       elif isinstance(field,CPSFileField):
         f_type = 'object'
+      elif isinstance(field,CPSIntField):
+        f_type = 'int'
       elif isinstance(field,CPSDocument):
         pass
       #prop_id = schema.getIdUnprefixed(field.id)
@@ -116,11 +123,16 @@ class PatchedCPSDocument(CPSDocument):
       Set the property for cps objects
     """
     LOG('PatchCPSDoc._setProperty',0,'key: %s, value: %s' % (repr(key),repr(value)))
-    data_model = self.getTypeInfo().getDataModel(self)
-    #data_model.set(key,value)
-    type_info = self.getTypeInfo()
-    kw = {key:value}
-    type_info.editObject(self,kw)
+    accessor_name = 'set' + UpperCase(key)
+    if hasattr(aq_base(self),accessor_name):
+      method = getattr(self, accessor_name)
+      return method(value)
+    else:
+      setattr(self,key,value)
+      #data_model = self.getTypeInfo().getDataModel(self)
+      #type_info = self.getTypeInfo()
+      #kw = {key:value}
+      #type_info.editObject(self,kw)
 
   security.declarePrivate('edit' )
   def edit(self, REQUEST=None, force_update = 0, reindex_object = 0, **kw):
@@ -144,17 +156,70 @@ class PatchedCPSDocument(CPSDocument):
       categoryIds = self._getCategoryTool().getBaseCategoryIds()
     except:
       categoryIds = []
-    if kw.has_key('layout_and_schema'):
-      self.setLayoutAndSchema(kw['layout_and_schema'])
+    #if kw.has_key('layout_and_schema'):
+    #  self.setLayoutAndSchema(kw['layout_and_schema'])
     for key in kw.keys():
+      accessor = 'get' + UpperCase(key)
       #if key in categoryIds:
       #  self._setCategoryMembership(key, kw[key])
-      if key != 'id' and key!= 'layout_and_schema':
+      #if key != 'id' and key!= 'layout_and_schema':
+      if key != 'id' :
         # We only change if the value is different
         # This may be very long.... 
         self._setProperty(key, kw[key])
 
+def getCoverage(self):
+  """
+  """
+  if hasattr(self,'coverage'):
+    return self.coverage
+  return None
+
+def getCreator(self):
+  """
+  """
+  #if hasattr(self,'coverage'):
+  #  return self.coverage
+  return None
+
+def getRelation(self):
+  """
+  """
+  if hasattr(self,'relation'):
+    return self.relation
+  return None
+
+def getSource(self):
+  """
+  """
+  if hasattr(self,'source'):
+    return self.source
+  return None
+
+def getPreview(self):
+  """
+  """
+  if hasattr(self,'preview'):
+    return self.preview
+  return None
+
+def setCreator(self,value):
+  """
+  """
+  setattr(self,'creator',value)
+
+def setCreationDate(self,value):
+  """
+  """
+  setattr(self,'creation_date',value)
 
+CPSDocument.getCoverage = getCoverage
+CPSDocument.getCreator = getCreator
+CPSDocument.getRelation = getRelation
+CPSDocument.setCreator = setCreator
+CPSDocument.getSource = getSource
+CPSDocument.getPreview = getPreview
+CPSDocument.setCreationDate = setCreationDate
 CPSDocument.getProperty = PatchedCPSDocument.getProperty
 CPSDocument.getLayoutAndSchema = PatchedCPSDocument.getLayoutAndSchema
 CPSDocument.setLayoutAndSchema = PatchedCPSDocument.setLayoutAndSchema
-- 
2.30.9