[Erp5-report] r37940 kazuhiko - in /erp5/trunk/products/ERP5: Document/ PropertySheet/ boot...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Aug 23 10:51:46 CEST 2010


Author: kazuhiko
Date: Mon Aug 23 10:51:35 2010
New Revision: 37940

URL: http://svn.erp5.org?rev=37940&view=rev
Log:
add sql_catalog_search_keys, that makes it possible to customise Column - SearchKey mappings.

Added:
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog/my_template_catalog_search_key_list.xml
Modified:
    erp5/trunk/products/ERP5/Document/BusinessTemplate.py
    erp5/trunk/products/ERP5/PropertySheet/BusinessTemplate.py
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog.xml
    erp5/trunk/products/ERP5/tests/testBusinessTemplate.py

Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=37940&r1=37939&r2=37940&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Mon Aug 23 10:51:35 2010
@@ -3540,22 +3540,26 @@ class RoleTemplateItem(BaseTemplateItem)
     path = obsolete_key
     bta.addObject(obj=xml_data, name=path)
 
-class CatalogResultKeyTemplateItem(BaseTemplateItem):
+class CatalogSearchKeyTemplateItem(BaseTemplateItem):
+  key_list_attr = 'sql_catalog_search_keys'
+  key_list_title = 'search_key_list'
+  key_title = 'Search key'
 
   def build(self, context, **kw):
+    import ipdb; ipdb.set_trace()
     catalog = _getCatalogValue(self)
     if catalog is None:
       LOG('BusinessTemplate', 0, 'no SQL catalog was available')
       return
-    sql_search_result_keys = list(catalog.sql_search_result_keys)
+    catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
     key_list = []
     for key in self._archive.keys():
-      if key in sql_search_result_keys:
+      if key in catalog_key_list:
         key_list.append(key)
       elif not self.is_bt_for_diff:
-        raise NotFound, 'Result key "%r" not found in catalog' %(key,)
+        raise NotFound, '%s %r not found in catalog' %(self.key_title, key)
     if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'result_key_list'] = key_list
+      self._objects['%s/%s' % (self.__class__.__name__, self.key_list_title)] = key_list
 
   def _importFile(self, file_name, file):
     if not file_name.endswith('.xml'):
@@ -3571,7 +3575,7 @@ class CatalogResultKeyTemplateItem(BaseT
       LOG('BusinessTemplate', 0, 'no SQL catalog was available')
       return
 
-    sql_search_result_keys = list(catalog.sql_search_result_keys)
+    catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
     if context.getTemplateFormatVersion() == 1:
       if len(self._objects.keys()) == 0: # needed because of pop()
         return
@@ -3583,31 +3587,31 @@ class CatalogResultKeyTemplateItem(BaseT
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
     # XXX same as related key
-    if update_dict.has_key('result_key_list') or force:
+    if update_dict.has_key(self.key_list_title) or force:
       if not force:
-        action = update_dict['result_key_list']
+        action = update_dict[self.key_list_title]
         if action == 'nothing':
           return
       for key in keys:
-        if key not in sql_search_result_keys:
-          sql_search_result_keys.append(key)
-      catalog.sql_search_result_keys = sql_search_result_keys
+        if key not in catalog_key_list:
+          catalog_key_list.append(key)
+      setattr(catalog, self.key_list_attr, catalog_key_list)
 
   def uninstall(self, context, **kw):
     catalog = _getCatalogValue(self)
     if catalog is None:
       LOG('BusinessTemplate', 0, 'no SQL catalog was available')
       return
-    sql_search_result_keys = list(catalog.sql_search_result_keys)
+    catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
     object_path = kw.get('object_path', None)
     if object_path is not None:
       object_keys = [object_path]
     else:
       object_keys = self._archive.keys()
     for key in object_keys:
-      if key in sql_search_result_keys:
-        sql_search_result_keys.remove(key)
-    catalog.sql_search_result_keys = sql_search_result_keys
+      if key in catalog_key_list:
+        catalog_key_list.remove(key)
+    setattr(catalog, self.key_list_attr, catalog_key_list)
     BaseTemplateItem.uninstall(self, context, **kw)
 
   # Function to generate XML Code Manually
@@ -3629,38 +3633,24 @@ class CatalogResultKeyTemplateItem(BaseT
       xml_data = self.generateXml(path=path)
       bta.addObject(obj=xml_data, name=path, path=None)
 
-class CatalogRelatedKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_search_related_keys = list(catalog.sql_catalog_related_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_search_related_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Related key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'related_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
+class CatalogResultKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_search_result_keys'
+  key_list_title = 'result_key_list'
+  key_title = 'Result key'
+
+class CatalogRelatedKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_related_keys'
+  key_list_title = 'related_key_list'
+  key_title = 'Related key'
 
+  # override this method to support 'key_list' for backward compatibility.
   def install(self, context, trashbin, **kw):
     catalog = _getCatalogValue(self)
     if catalog is None:
       LOG('BusinessTemplate', 0, 'no SQL catalog was available')
       return
 
-    sql_catalog_related_keys = list(catalog.sql_catalog_related_keys)
+    catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
     if context.getTemplateFormatVersion() == 1:
       if len(self._objects.keys()) == 0: # needed because of pop()
         return
@@ -3672,955 +3662,74 @@ class CatalogRelatedKeyTemplateItem(Base
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
     # XXX must a find a better way to manage related key
-    if update_dict.has_key('related_key_list') or update_dict.has_key('key_list') or force:
+    if update_dict.has_key(self.key_list_title) or update_dict.has_key('key_list') or force:
       if not force:
-        if update_dict.has_key('related_key_list'):
-          action = update_dict['related_key_list']
+        if update_dict.has_key(self.key_list_title):
+          action = update_dict[self.key_list_title]
         else: # XXX for backward compatibility
           action = update_dict['key_list']
         if action == 'nothing':
           return
       for key in keys:
-        if key not in sql_catalog_related_keys:
-          sql_catalog_related_keys.append(key)
-      catalog.sql_catalog_related_keys = tuple(sql_catalog_related_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_related_keys = list(catalog.sql_catalog_related_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_related_keys:
-        sql_catalog_related_keys.remove(key)
-    catalog.sql_catalog_related_keys = sql_catalog_related_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-class CatalogResultTableTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_search_result_tables = list(catalog.sql_search_tables)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_search_result_tables:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Result table "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'result_table_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_search_tables = list(catalog.sql_search_tables)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX same as related keys
-    if update_dict.has_key('result_table_list') or force:
-      if not force:
-        action = update_dict['result_table_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_search_tables:
-          sql_search_tables.append(key)
-      catalog.sql_search_tables = tuple(sql_search_tables)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_search_tables = list(catalog.sql_search_tables)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_search_tables:
-        sql_search_tables.remove(key)
-    catalog.sql_search_tables = sql_search_tables
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
+        if key not in catalog_key_list:
+          catalog_key_list.append(key)
+      setattr(catalog, self.key_list_attr, catalog_key_list)
+
+class CatalogResultTableTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_search_tables'
+  key_list_title = 'result_table_list'
+  key_title = 'Result table'
 
 # keyword
-class CatalogKeywordKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_keyword_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Keyword key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'keyword_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX same as related key
-    if update_dict.has_key('keyword_key_list') or force:
-      if not force:
-        action = update_dict['keyword_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_keyword_keys:
-          sql_keyword_keys.append(key)
-      catalog.sql_catalog_keyword_search_keys = sql_keyword_keys
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_keyword_keys:
-        sql_keyword_keys.remove(key)
-    catalog.sql_catalog_keyword_search_keys = sql_keyword_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
+class CatalogKeywordKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_keyword_search_keys'
+  key_list_title = 'keyword_key_list'
+  key_title = 'Keyword key'
 
 # datetime
-class CatalogDateTimeKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_datetime_keys = list(getattr(catalog, 'sql_catalog_datetime_search_keys', []))
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_datetime_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'DateTime key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'datetime_key_list'] = key_list
+class CatalogDateTimeKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_datetime_search_keys'
+  key_list_title = 'datetime_key_list'
+  key_title = 'DateTime key'
 
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(context)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
+# full text
+class CatalogFullTextKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_full_text_search_keys'
+  key_list_title = 'full_text_key_list'
+  key_title = 'Fulltext key'
 
-    sql_datetime_keys = list(getattr(catalog, 'sql_catalog_datetime_search_keys', []))
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX same as related key
-    if update_dict.has_key('datetime_key_list') or force:
-      if not force:
-        action = update_dict['datetime_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_datetime_keys:
-          sql_datetime_keys.append(key)
-      catalog.sql_catalog_datetime_search_keys = sql_datetime_keys
+# request
+class CatalogRequestKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_request_keys'
+  key_list_title = 'request_key_list'
+  key_title = 'Request key'
 
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(context)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available - uninstall')
-      return
-    sql_datetime_keys = list(getattr(catalog, 'sql_catalog_datetime_search_keys', []))
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_datetime_keys:
-        sql_datetime_keys.remove(key)
-    catalog.sql_catalog_datetime_search_keys = sql_datetime_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)      
-      
-# full text
-class CatalogFullTextKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_full_text_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Fulltext key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'full_text_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX same as related key
-    if update_dict.has_key('full_text_key_list') or force:
-      if not force:
-        action = update_dict['full_text_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_full_text_keys:
-          sql_full_text_keys.append(key)
-      catalog.sql_catalog_full_text_search_keys = sql_full_text_keys
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_full_text_keys:
-        sql_full_text_keys.remove(key)
-    catalog.sql_catalog_full_text_search_keys = sql_full_text_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-
-# request
-class CatalogRequestKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_request_keys = list(catalog.sql_catalog_request_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_request_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Request key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'request_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_request_keys = list(catalog.sql_catalog_request_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX must a find a better way to manage related key
-    if update_dict.has_key('request_key_list') or force:
-      if not force:
-        action = update_dict['request_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_request_keys:
-          sql_catalog_request_keys.append(key)
-      catalog.sql_catalog_request_keys = tuple(sql_catalog_request_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_request_keys = list(catalog.sql_catalog_request_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_request_keys:
-        sql_catalog_request_keys.remove(key)
-    catalog.sql_catalog_request_keys = sql_catalog_request_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-# multivalue
-class CatalogMultivalueKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_multivalue_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Multivalue key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'multivalue_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    if update_dict.has_key('multivalue_key_list') or force:
-      if not force:
-        action = update_dict['multivalue_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_multivalue_keys:
-          sql_catalog_multivalue_keys.append(key)
-      catalog.sql_catalog_multivalue_keys = tuple(sql_catalog_multivalue_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_multivalue_keys:
-        sql_catalog_multivalue_keys.remove(key)
-    catalog.sql_catalog_multivalue_keys = sql_catalog_multivalue_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
+# multivalue
+class CatalogMultivalueKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_multivalue_keys'
+  key_list_title = 'multivalue_key_list'
+  key_title = 'Multivalue key'
 
 # topic
-class CatalogTopicKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_topic_search_keys = list(catalog.sql_catalog_topic_search_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_catalog_topic_search_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Topic key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'topic_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_topic_search_keys = list(catalog.sql_catalog_topic_search_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX same as related key
-    if update_dict.has_key('topic_key_list') or force:
-      if not force:
-        action = update_dict['topic_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_topic_search_keys:
-          sql_catalog_topic_search_keys.append(key)
-      catalog.sql_catalog_topic_search_keys = sql_catalog_topic_search_keys
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_topic_search_keys = list(catalog.sql_catalog_topic_search_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_topic_search_keys:
-        sql_catalog_topic_search_keys.remove(key)
-    catalog.sql_catalog_topic_search_keys = sql_catalog_topic_search_keys
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-class CatalogScriptableKeyTemplateItem(BaseTemplateItem):
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_scriptable_keys = list(catalog.sql_catalog_scriptable_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_catalog_scriptable_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Scriptable key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'scriptable_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_scriptable_keys = list(catalog.sql_catalog_scriptable_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX must a find a better way to manage scriptable key
-    if update_dict.has_key('scriptable_key_list') or force:
-      if not force:
-        if update_dict.has_key('scriptable_key_list'):
-          action = update_dict['scriptable_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_scriptable_keys:
-          sql_catalog_scriptable_keys.append(key)
-      catalog.sql_catalog_scriptable_keys = tuple(sql_catalog_scriptable_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_scriptable_keys = list(catalog.sql_catalog_scriptable_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_scriptable_keys:
-        sql_catalog_scriptable_keys.remove(key)
-    catalog.sql_catalog_scriptable_keys = tuple(sql_catalog_scriptable_keys)
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-class CatalogRoleKeyTemplateItem(BaseTemplateItem):
-  # XXX Copy/paste from CatalogScriptableKeyTemplateItem
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_catalog_role_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'Role key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'role_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX must a find a better way to manage scriptable key
-    if update_dict.has_key('role_key_list') or force:
-      if not force:
-        if update_dict.has_key('role_key_list'):
-          action = update_dict['role_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_role_keys:
-          sql_catalog_role_keys.append(key)
-      catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_role_keys:
-        sql_catalog_role_keys.remove(key)
-    catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
-
-class CatalogLocalRoleKeyTemplateItem(BaseTemplateItem):
-  # XXX Copy/paste from CatalogScriptableKeyTemplateItem
-
-  def build(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
-    key_list = []
-    for key in self._archive.keys():
-      if key in sql_catalog_local_role_keys:
-        key_list.append(key)
-      elif not self.is_bt_for_diff:
-        raise NotFound, 'LocalRole key "%r" not found in catalog' %(key,)
-    if len(key_list) > 0:
-      self._objects[self.__class__.__name__+'/'+'local_role_key_list'] = key_list
-
-  def _importFile(self, file_name, file):
-    if not file_name.endswith('.xml'):
-      LOG('Business Template', 0, 'Skipping file "%s"' % (file_name, ))
-      return
-    xml = parse(file)
-    key_list = [key.text for key in xml.getroot()]
-    self._objects[file_name[:-4]] = key_list
-
-  def install(self, context, trashbin, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-
-    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
-    if context.getTemplateFormatVersion() == 1:
-      if len(self._objects.keys()) == 0: # needed because of pop()
-        return
-      keys = []
-      for k in self._objects.values().pop(): # because of list of list
-        keys.append(k)
-    else:
-      keys = self._archive.keys()
-    update_dict = kw.get('object_to_update')
-    force = kw.get('force')
-    # XXX must a find a better way to manage scriptable key
-    if update_dict.has_key('local_role_key_list') or force:
-      if not force:
-        if update_dict.has_key('local_role_key_list'):
-          action = update_dict['local_role_key_list']
-        if action == 'nothing':
-          return
-      for key in keys:
-        if key not in sql_catalog_local_role_keys:
-          sql_catalog_local_role_keys.append(key)
-      catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
-
-  def uninstall(self, context, **kw):
-    catalog = _getCatalogValue(self)
-    if catalog is None:
-      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
-      return
-    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
-    object_path = kw.get('object_path', None)
-    if object_path is not None:
-      object_keys = [object_path]
-    else:
-      object_keys = self._archive.keys()
-    for key in object_keys:
-      if key in sql_catalog_local_role_keys:
-        sql_catalog_local_role_keys.remove(key)
-    catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
-    BaseTemplateItem.uninstall(self, context, **kw)
-
-  # Function to generate XML Code Manually
-  def generateXml(self, path=None):
-    obj = self._objects[path]
-    xml_data = '<key_list>'
-    obj.sort()
-    for key in obj:
-      xml_data += '\n <key>%s</key>' %(key)
-    xml_data += '\n</key_list>'
-    return xml_data
-
-  def export(self, context, bta, **kw):
-    if len(self._objects.keys()) == 0:
-      return
-    path = os.path.join(bta.path, self.__class__.__name__)
-    bta.addFolder(name=path)
-    for path in self._objects.keys():
-      xml_data = self.generateXml(path=path)
-      bta.addObject(obj=xml_data, name=path, path=None)
+class CatalogTopicKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_topic_search_keys'
+  key_list_title = 'topic_key_list'
+  key_title = 'Topic key'
+
+class CatalogScriptableKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_scriptable_keys'
+  key_list_title = 'scriptable_key_list'
+  key_title = 'Scriptable key'
+
+class CatalogRoleKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_role_keys'
+  key_list_title = 'role_key_list'
+  key_title = 'Role key'
+
+class CatalogLocalRoleKeyTemplateItem(CatalogSearchKeyTemplateItem):
+  key_list_attr = 'sql_catalog_local_role_keys'
+  key_list_title = 'local_role_key_list'
+  key_title = 'LocalRole key'
 
 class MessageTranslationTemplateItem(BaseTemplateItem):
 
@@ -5004,6 +4113,7 @@ Business Template is a set of definition
       '_catalog_result_key_item',
       '_catalog_related_key_item',
       '_catalog_result_table_item',
+      '_catalog_search_key_item',
       '_catalog_keyword_key_item',
       '_catalog_datetime_key_item',
       '_catalog_full_text_key_item',
@@ -5135,6 +4245,9 @@ Business Template is a set of definition
                PathTemplateItem(self.getTemplatePathList())
       self._preference_item = \
                PreferenceTemplateItem(self.getTemplatePreferenceList())
+      self._catalog_search_key_item = \
+          CatalogSearchKeyTemplateItem(
+               self.getTemplateCatalogSearchKeyList())
       self._catalog_keyword_key_item = \
           CatalogKeywordKeyTemplateItem(
                self.getTemplateCatalogKeywordKeyList())
@@ -5855,6 +4968,7 @@ Business Template is a set of definition
         'CatalogResultKey' : '_catalog_result_key_item',
         'CatalogRelatedKey' : '_catalog_related_key_item',
         'CatalogResultTable' : '_catalog_result_table_item',
+        'CatalogSearchKey' : '_catalog_search_key_item',
         'CatalogKeywordKey' : '_catalog_keyword_key_item',
         'CatalogDateTimeKey' : '_catalog_datetime_key_item',
         'CatalogFullTextKey' : '_catalog_full_text_key_item',
@@ -5917,6 +5031,7 @@ Business Template is a set of definition
                      '_catalog_result_key_item', 
                      '_catalog_related_key_item',
                      '_catalog_result_table_item',
+                     '_catalog_search_key_item',
                      '_catalog_keyword_key_item',
                      '_catalog_datetime_key_item',
                      '_catalog_full_text_key_item',

Modified: erp5/trunk/products/ERP5/PropertySheet/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/PropertySheet/BusinessTemplate.py?rev=37940&r1=37939&r2=37940&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/PropertySheet/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/PropertySheet/BusinessTemplate.py [utf8] Mon Aug 23 10:51:35 2010
@@ -130,6 +130,11 @@ class BusinessTemplate:
       'type'        : 'lines',
       'mode'        : 'w',
       'default'     : () },
+    { 'id'          : 'template_catalog_search_key',
+      'description' : 'A list of ids of catalog search keys used by this template',
+      'type'        : 'lines',
+      'mode'        : 'w',
+      'default'     : () },
     { 'id'          : 'template_catalog_keyword_key',
       'description' : 'A list of ids of catalog keyword keys used by this template',
       'type'        : 'lines',

Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog.xml?rev=37940&r1=37939&r2=37940&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog.xml [utf8] (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog.xml [utf8] Mon Aug 23 10:51:35 2010
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="ERP5Form" module="Products.ERP5Form.Form"/>
-        <tuple/>
-      </tuple>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -77,6 +74,7 @@
                         <string>my_template_catalog_method_id_list</string>
                         <string>my_template_catalog_result_table_list</string>
                         <string>my_template_catalog_result_key_list</string>
+                        <string>my_template_catalog_search_key_list</string>
                         <string>my_template_catalog_keyword_key_list</string>
                         <string>my_template_catalog_datetime_key_list</string>
                         <string>my_template_catalog_role_key_list</string>

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog/my_template_catalog_search_key_list.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog/my_template_catalog_search_key_list.xml?rev=37940&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog/my_template_catalog_search_key_list.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_viewCatalog/my_template_catalog_search_key_list.xml [utf8] Mon Aug 23 10:51:35 2010
@@ -0,0 +1,298 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="LinesField" module="Products.Formulator.StandardFields"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_template_catalog_search_key_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+                <item>
+                    <key> <string>line_too_long</string> </key>
+                    <value> <string>A line was too long.</string> </value>
+                </item>
+                <item>
+                    <key> <string>required_not_found</string> </key>
+                    <value> <string>Input is required but no input given.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_long</string> </key>
+                    <value> <string>You entered too many characters.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_many_lines</string> </key>
+                    <value> <string>You entered too many lines.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Search Keys</string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string encoding="cdata"><![CDATA[
+
+<br />
+
+]]></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Modified: erp5/trunk/products/ERP5/tests/testBusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBusinessTemplate.py?rev=37940&r1=37939&r2=37940&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBusinessTemplate.py [utf8] Mon Aug 23 10:51:35 2010
@@ -1786,6 +1786,7 @@ class TestBusinessTemplate(ERP5TypeTestC
     related_key = 'fake_id | category/catalog/z_fake_method'
     result_key = 'catalog.title'
     result_table = 'fake_catalog'
+    search_key = 'fake_search_key | FakeSearchKey'
     keyword_key = 'fake_keyword'
     full_text_key = 'fake_full_text'
     request_key = 'fake_request'
@@ -1817,6 +1818,13 @@ class TestBusinessTemplate(ERP5TypeTestC
       sql_search_related_keys.sort()
       catalog.sql_catalog_related_keys = tuple(sql_search_related_keys)
     self.failUnless(related_key in catalog.sql_catalog_related_keys)
+    # search keys
+    if search_key not in catalog.sql_catalog_search_keys:
+      sql_catalog_search_keys = list(catalog.sql_catalog_search_keys)
+      sql_catalog_search_keys.append(search_key)
+      sql_catalog_search_keys.sort()
+      catalog.sql_catalog_search_keys = tuple(sql_catalog_search_keys)
+    self.failUnless(search_key in catalog.sql_catalog_search_keys)
     # keyword keys
     if keyword_key not in catalog.sql_catalog_keyword_search_keys:
       sql_catalog_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
@@ -1875,7 +1883,7 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(local_role_key in catalog.sql_catalog_local_role_keys)
 
     sequence.edit(related_key=related_key, result_key=result_key,
-                  result_table=result_table,
+                  result_table=result_table, search_key=search_key,
                   keyword_key=keyword_key, full_text_key=full_text_key,
                   request_key=request_key,
                   multivalue_key=multivalue_key, topic_key=topic_key, \
@@ -1951,6 +1959,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    search_key = sequence.get('search_key', None)
+    self.failUnless(search_key is not None)
     keyword_key = sequence.get('keyword_key', None)
     self.failUnless(keyword_key is not None)
     full_text_key = sequence.get('full_text_key', None)
@@ -1971,6 +1981,7 @@ class TestBusinessTemplate(ERP5TypeTestC
     bt.edit(template_catalog_related_key_list=[related_key],
             template_catalog_result_key_list=[result_key],
             template_catalog_result_table_list=[result_table],
+            template_catalog_search_key_list=[search_key],
             template_catalog_keyword_key_list=[keyword_key],
             template_catalog_full_text_key_list=[full_text_key],
             template_catalog_request_key_list=[request_key],
@@ -1991,6 +2002,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    search_key = sequence.get('search_key', None)
+    self.failUnless(search_key is not None)
     keyword_key = sequence.get('keyword_key', None)
     self.failUnless(keyword_key is not None)
     full_text_key = sequence.get('full_text_key', None)
@@ -2028,6 +2041,12 @@ class TestBusinessTemplate(ERP5TypeTestC
     sql_search_tables.sort()
     catalog.sql_search_tables = tuple(sql_search_tables)
     self.failUnless(result_table not in catalog.sql_search_tables)
+    # search keys
+    sql_catalog_search_keys = list(catalog.sql_catalog_search_keys)
+    sql_catalog_search_keys.remove(search_key)
+    sql_catalog_search_keys.sort()
+    catalog.sql_catalog_search_keys = tuple(sql_catalog_search_keys)
+    self.failUnless(search_key not in catalog.sql_catalog_search_keys)
     # keyword keys
     sql_catalog_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
     sql_catalog_keyword_keys.remove(keyword_key)
@@ -2087,6 +2106,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    search_key = sequence.get('search_key', None)
+    self.failUnless(search_key is not None)
     keyword_key = sequence.get('keyword_key', None)
     self.failUnless(keyword_key is not None)
     full_text_key = sequence.get('full_text_key', None)
@@ -2112,6 +2133,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(related_key in catalog.sql_catalog_related_keys)
     # result table
     self.failUnless(result_table in catalog.sql_search_tables)
+    # search key
+    self.failUnless(search_key in catalog.sql_catalog_search_keys)
     # keyword key
     self.failUnless(keyword_key in catalog.sql_catalog_keyword_search_keys)
     # full text key
@@ -2139,6 +2162,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    search_key = sequence.get('search_key', None)
+    self.failUnless(search_key is not None)
     keyword_key = sequence.get('keyword_key', None)
     self.failUnless(keyword_key is not None)
     full_text_key = sequence.get('full_text_key', None)
@@ -2164,6 +2189,8 @@ class TestBusinessTemplate(ERP5TypeTestC
     self.failUnless(related_key not in catalog.sql_catalog_related_keys)
     # result table
     self.failUnless(result_table not in catalog.sql_search_tables)
+    # search key
+    self.failUnless(search_key not in catalog.sql_catalog_search_keys)
     # keyword key
     self.failUnless(keyword_key not in catalog.sql_catalog_keyword_search_keys)
     # full text key




More information about the Erp5-report mailing list