[263] | 1 | from Products.CPSDocument.exportimport import importCPSObjects |
---|
| 2 | from Products.CMFCore.utils import getToolByName |
---|
| 3 | from zope.app import zapi |
---|
| 4 | from Products.GenericSetup.interfaces import INode |
---|
| 5 | import Products |
---|
| 6 | |
---|
| 7 | def _initObjects(self, node): |
---|
| 8 | for child in node.childNodes: |
---|
| 9 | if child.nodeName != 'object': |
---|
| 10 | continue |
---|
| 11 | if child.hasAttribute('deprecated'): |
---|
| 12 | continue |
---|
| 13 | parent = self.context |
---|
| 14 | |
---|
| 15 | obj_id = str(child.getAttribute('name')) |
---|
| 16 | if child.hasAttribute('remove'): |
---|
| 17 | parent._delObject(obj_id) |
---|
| 18 | continue |
---|
| 19 | |
---|
| 20 | if obj_id not in parent.objectIds(): |
---|
| 21 | portal_type = str(child.getAttribute('portal_type')) |
---|
| 22 | if portal_type: |
---|
| 23 | wftool = getToolByName(parent, 'portal_workflow') |
---|
| 24 | wftool.invokeFactoryFor(parent, portal_type, obj_id) |
---|
| 25 | else: |
---|
| 26 | meta_type = str(child.getAttribute('meta_type')) |
---|
| 27 | __traceback_info__ = obj_id, meta_type |
---|
| 28 | for mt_info in Products.meta_types: |
---|
| 29 | if mt_info['name'] == meta_type: |
---|
| 30 | parent._setObject(obj_id, mt_info['instance'](obj_id)) |
---|
| 31 | break |
---|
| 32 | else: |
---|
| 33 | raise ValueError("unknown meta_type '%s'" % meta_type) |
---|
| 34 | |
---|
| 35 | |
---|
| 36 | if child.hasAttribute('insert-before'): |
---|
| 37 | insert_before = child.getAttribute('insert-before') |
---|
| 38 | if insert_before == '*': |
---|
| 39 | parent.moveObjectsToTop(obj_id) |
---|
| 40 | else: |
---|
| 41 | try: |
---|
| 42 | position = parent.getObjectPosition(insert_before) |
---|
| 43 | if parent.getObjectPosition(obj_id) < position: |
---|
| 44 | position -= 1 |
---|
| 45 | parent.moveObjectToPosition(obj_id, position) |
---|
| 46 | except ValueError: |
---|
| 47 | pass |
---|
| 48 | elif child.hasAttribute('insert-after'): |
---|
| 49 | insert_after = child.getAttribute('insert-after') |
---|
| 50 | if insert_after == '*': |
---|
| 51 | parent.moveObjectsToBottom(obj_id) |
---|
| 52 | else: |
---|
| 53 | try: |
---|
| 54 | position = parent.getObjectPosition(insert_after) |
---|
| 55 | if parent.getObjectPosition(obj_id) < position: |
---|
| 56 | position -= 1 |
---|
| 57 | parent.moveObjectToPosition(obj_id, position+1) |
---|
| 58 | except ValueError: |
---|
| 59 | pass |
---|
| 60 | |
---|
| 61 | obj = getattr(self.context, obj_id) |
---|
| 62 | importer = zapi.queryMultiAdapter((obj, self.environ), INode) |
---|
| 63 | if importer: |
---|
| 64 | importer.node = child |
---|
| 65 | |
---|
| 66 | from Products.CPSDefault.exportimport import RootXMLAdapter |
---|
| 67 | RootXMLAdapter._initObjects = _initObjects |
---|
| 68 | |
---|