diff --git a/product/ERP5/Document/BusinessManager.py b/product/ERP5/Document/BusinessManager.py index a32891e57a0bb670aeec8a1daef5767dde214103..8fa37241f5cb480a83ddbb09aef981f755259b2a 100644 --- a/product/ERP5/Document/BusinessManager.py +++ b/product/ERP5/Document/BusinessManager.py @@ -153,7 +153,7 @@ class BusinessManager(Folder): """ _properties = ( - {'id': 'template_path_list', + {'id': 'manager_path_list', 'type': 'lines', 'default': 'python: ()', 'acquisition_base_category': (), @@ -174,10 +174,8 @@ class BusinessManager(Folder): ) """ - template_path_list = () template_format_version = 3 status = 'uninstalled' - _path_item_list = PersistentList() # Declarative security security = ClassSecurityInfo() @@ -216,26 +214,18 @@ class BusinessManager(Folder): portal = self.getPortalObject() pass - def edit(self, **kw): + def edit(self, manager_path_list=[], **kw): """ Explicilty edit the class instance XXX: No need of this class ? as we already have _edit from ERP5Type.Folder """ - if 'template_path_list' in kw: - path_item_list = kw.pop('template_path_list') - self._setTemplatePathList(path_item_list) - - def _setTemplatePathList(self, path_item_list): - self.template_path_list = path_item_list + super(BusinessManager, self).edit(manager_path_list=manager_path_list, **kw) def getTemplatePathList(self): - return self.template_path_list + return self.getProperty('manager_path_list') def getPathItemList(self): - try: - return self._path_item_list - except AttributeError: - return [] + return self.objectValues() security.declareProtected(Permissions.ManagePortal, '_getTemplatePathList') def _getTemplatePathList(self): @@ -244,10 +234,12 @@ class BusinessManager(Folder): result = tuple(result) return result + # XXX: Change into property security.declareProtected(Permissions.ManagePortal, 'getTemplateFormatVersion') def getTemplateFormatVersion(self): return self.template_format_version + # XXX: Change into property def _setTemplateFormatVersion(self, value): self.template_format_version = int(value) @@ -293,18 +285,19 @@ class BusinessManager(Folder): """ connection = self.aq_parent._p_jar file = open(path, 'rb') - obj = connection.importFile(file) - self.title = obj.title - self._path_item_list = obj._path_item_list[:] - self._setTemplatePathList(obj.getTemplatePathList()) + imported_manager = connection.importFile(file) + self.title = imported_manager.title + for obj in imported_manager.objectValues(): + self._setObject(obj.getId(), obj) + self.setProperty('manager_path_list', obj.getTemplatePathList()) def __add__(self, other): """ Adds the Business Item objects for the given Business Manager objects """ self._path_item_list.extend(other._path_item_list) - template_path_list = list(self.template_path_list)+list(other.template_path_list) - self.template_path_list = template_path_list + manager_path_list = list(self.manager_path_list)+list(other.manager_path_list) + self.manager_path_list = manager_path_list return self __radd__ = __add__ @@ -342,9 +335,6 @@ class BusinessManager(Folder): exisiting_path_item_id_list = [l for l in self.objectIds()] self.manage_delObjects(ids=exisiting_path_item_id_list) - # Create an empty _path_item_list everytime we storeTemplateData - self._path_item_list = PersistentList() - if path_item_list: path_item_list = [l.split(' | ') for l in path_item_list] @@ -359,7 +349,6 @@ class BusinessManager(Folder): item_sign=path_item[1], item_layer=path_item[2] ) - self._path_item_list.append(PathItem) else: # Here we check for the path which also add sub-objects, in that case, # we create separate BusinessItem objects for each sub-object with @@ -378,7 +367,6 @@ class BusinessManager(Folder): item_sign=path_item[1], item_layer=path_item[2] ) - self._path_item_list.append(PathItem) resolved_path = (' | ').join((path, path_item[1], path_item[2])) new_path_item_list.append(resolved_path) except IndexError: @@ -390,12 +378,10 @@ class BusinessManager(Folder): item_sign=path_item[1], item_layer=path_item[2] ) - # If not build, i.e, import/export, just update the _path_item_list - self._path_item_list.append(PathItem) if isBuild: # If build process, update the path list of the Business Manager - self._setTemplatePathList(new_path_item_list) + self.setProperty('manager_path_list', new_path_item_list) def _resolvePath(self, folder, relative_url_list, id_list): """ @@ -430,15 +416,15 @@ class BusinessManager(Folder): def getPathList(self): path_list = [] - for item in self._path_item_list: - path_list.append(item.path) + for item in self.objectValues(): + path_list.append(item.getProperty('path')) return path_list def getPathShaDict(self): path_sha_dict = {} # TODO: Handle error for BM with multiple items at same path - for item in self._path_item_list: - path_sha_dict[item.path] = item.sha + for item in self.objectValues(): + path_sha_dict[item.getProperty('path')] = item.getProperty('sha') return path_item_dict def getPathItemDict(self): @@ -461,40 +447,11 @@ class BusinessManager(Folder): LOG('Business Manager', INFO, 'Building Business Manager') if not no_action: self.storeTemplateData(isBuild=True) - for path_item in self._path_item_list: + for path_item in self.objectValues(): path_item.build(self, **kw) self.status = 'built' return self - def install(self): - """ - Installs the Business Manager in steps: - - 1. Reduction of the BT - 2. Flattenning the BT - 3. Copying the object at the path mentioned in BT - """ - if self.status == 'uninstalled': - self.reduceBusinessManager() - #elif self.status == 'reduced': - # self.flattenBusinessManager() - self._install() - - def _install(self): - """ - Run installation - """ - if self.status != 'reduced': - self.install() - else: - # Invoke install on every BusinessItem object - for path_item in self._path_item_list: - path_item.install() - - def upgrade(self): - """Upgrade the Business Manager""" - pass - def flattenBusinessManager(self): """ Flattening a reduced Business Manager with two path p1 and p2 where p1 <> p2: