diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 070d1d386565cebd2907917dd69e700423695ce6..7a68623d390d871443d828c2fdfdc51419bfade6 100755 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -63,6 +63,7 @@ from zLOG import LOG from OFS.ObjectManager import customImporters from gzip import GzipFile from xml.dom.minidom import parse +from Products.CMFCore.Expression import Expression import tarfile @@ -147,7 +148,7 @@ class BusinessTemplateFolder(BusinessTemplateArchive): def _initImport(self, file=None, path=None, **kw): self.file_list = file # to make id consistent, must remove a part of path while importing - self.root_path_len = len(string.split(path, os.sep)) + 1 + self.root_path_len = len(string.split(path, os.sep)) def importFiles(self, klass, **kw): """ @@ -1030,31 +1031,24 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): xml_data = '<catalog_method>' for method in catalog_method_list: value = getattr(self, method, 0)[method_id] - xml_data += os.linesep+' <method>' - xml_data += os.linesep+' <key>%s</key>' %(method) + xml_data += os.linesep+' <item key="%s" type="int">' %(method,) xml_data += os.linesep+' <value>%s</value>' %(str(int(value))) - xml_data += os.linesep+' </method>' + xml_data += os.linesep+' </item>' if catalog.filter_dict.has_key(method_id): for method in catalog_method_filter_list: value = getattr(self, method, '')[method_id] if method == '_filter_expression_instance_archive': - # convert instance to a xml file - object = self._filter_expression_instance_archive[method_id] - object_io = StringIO() - XMLExportImport.exportXML(object._p_jar, object._p_oid, object_io) - bta.addObject(object = object_io.getvalue(), name=id+'.filter_instance', path=path) + pass else: if type(value) in (type(''), type(u'')): - xml_data += os.linesep+' <method type="">' - xml_data += os.linesep+' <key>%s</key>' %(method) + xml_data += os.linesep+' <item key="%s" type="str">' %(method,) xml_data += os.linesep+' <value>%s</value>' %(str(value)) - xml_data += os.linesep+' </method>' + xml_data += os.linesep+' </item>' elif type(value) in (type(()), type([])): - xml_data += os.linesep+' <method type="tuple">' - xml_data += os.linesep+' <key>%s</key>' %(method) + xml_data += os.linesep+' <item key="%s" type="tuple">'%(method) for item in value: xml_data += os.linesep+' <value>%s</value>' %(str(item)) - xml_data += os.linesep+' </method>' + xml_data += os.linesep+' </item>' xml_data += os.linesep+'</catalog_method>' f.write(str(xml_data)) f.close() @@ -1116,13 +1110,15 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): if is_filtered: expression = self._filter_expression_archive[method_id] - expression_instance = self._filter_expression_instance_archive[method_id] + if (getattr(self, 'template_format_version', 0)) == 1: + expr_instance = Expression(expression) + else: + expr_instance = self._filter_expression_instance_archive[method_id] type = self._filter_type_archive[method_id] - catalog.filter_dict[method_id] = PersistentMapping() catalog.filter_dict[method_id]['filtered'] = 1 catalog.filter_dict[method_id]['expression'] = expression - catalog.filter_dict[method_id]['expression_instance'] = expression_instance + catalog.filter_dict[method_id]['expression_instance'] = expr_instance catalog.filter_dict[method_id]['type'] = type elif method_id in catalog.filter_dict.keys(): catalog.filter_dict[method_id]['filtered'] = 0 @@ -1140,6 +1136,11 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): def uninstall(self, context, **kw): + # XXXx to be removed + ObjectTemplateItem.uninstall(self, context, **kw) + return + + try: catalog = context.portal_catalog.getSQLCatalog() except KeyError: @@ -1186,7 +1187,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ObjectTemplateItem.uninstall(self, context, **kw) def _importFile(self, file_name, file): - if not '.catalog_keys' in file_name and not '.filter_instance' in file_name: + if not '.catalog_keys' in file_name: # just import xml object obj = self connection = None @@ -1195,25 +1196,23 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): connection=obj._p_jar obj = connection.importFile(file, customImporters=customImporters) self._objects[file_name[:-4]] = obj - elif not '.filter_instance' in file_name and '.catalog_keys' in file_name: + elif '.catalog_keys' in file_name: # recreate data mapping specific to catalog method path, name = os.path.split(file_name) id = string.split(name, '.')[0] xml = parse(file) - method_list = xml.getElementsByTagName('method') + method_list = xml.getElementsByTagName('item') for method in method_list: - type = method.getAttribute('type') - if type == "": - key = method.getElementsByTagName('key')[0].childNodes[0].data - value = method.getElementsByTagName('value')[0].childNodes[0].data + key = method.getAttribute('key') + type = str(method.getAttribute('type')) + if type == "str": + value = str(method.getElementsByTagName('value')[0].childNodes[0].data) + key = str(key) + elif type == "int": + value = int(method.getElementsByTagName('value')[0].childNodes[0].data) key = str(key) - if key in catalog_method_list: - value = int(value) - else: - value = str(value) elif type == "tuple": value = [] - key = method.getElementsByTagName('key')[0].childNodes[0].data value_list = method.getElementsByTagName('value') for item in value_list: value.append(item.childNodes[0].data) @@ -1222,18 +1221,6 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): continue dict = getattr(self, key) dict[id] = value - elif '.filter_instance' in file_name: - # get filter expression instance object from xml file - path, name = os.path.split(file_name) - id = string.split(name, '.')[0] - obj = self - connection = None - while connection is None: - obj=obj.aq_parent - connection=obj._p_jar - obj = connection.importFile(file, customImporters=customImporters) - self._filter_expression_instance_archive[id]=obj - class ActionTemplateItem(ObjectTemplateItem):