Author: jmorliaguet Date: Mon May 1 23:57:17 2006 New Revision: 3013 Modified: cpsskins/branches/paris-sprint-2006/setup/interfaces.py cpsskins/branches/paris-sprint-2006/setup/io.py cpsskins/branches/paris-sprint-2006/standard/io/relation.py cpsskins/branches/paris-sprint-2006/standard/io/setting.py cpsskins/branches/paris-sprint-2006/standard/io/style.py cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Log:
- simplifications - the URI mapping is now working, i.e. the relation importer gets the information about the URIs of imported objects that changed during the import. Modified: cpsskins/branches/paris-sprint-2006/setup/interfaces.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/interfaces.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/interfaces.py Mon May 1 23:57:17 2006 @@ -139,7 +139,7 @@ document = Attribute(u"The document element.") - objecttype = Attribute(u"Type name of objects.") + object_type = Attribute(u"Type name of objects.") mapping = Attribute(u"Mapping between old and new URIs") @@ -148,27 +148,12 @@ fields_as_attributes = Attribute( u"The list of fields written as DOM attributes.") - def setDocument(document): - """Set the document element""" - - def getDocument(): - """Get the document element""" - - def setObjectType(type): - """Set the type of objects.""" - - def writeAsAttributes(fields): - """Set the list of fields written as attributes.""" - - def ignoreFields(fields): - """Set the list of ignored fields.""" - - def updateURIMapping(mapping): - """Update the URI mapping.""" - def save(): """Save data as a DOM fragment.""" + def updateURIMapping(): + """Update the URI mapping.""" + def load(): """Load data from a DOM fragment.""" Modified: cpsskins/branches/paris-sprint-2006/setup/io.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/io.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/io.py Mon May 1 23:57:17 2006 @@ -41,7 +41,7 @@ """ document = None - objecttype = u'' + object_type = u'' mapping = {} @@ -53,27 +53,6 @@ self.context = context self.node = node - def setDocument(self, document): - self.document = document - - def getDocument(self): - if self.document is None: - raise ValueError("The DOM document is not set, " - "use setDocument(document) to set the document element.") - return self.document - - def setObjectType(self, type): - self.objecttype = type - - def writeAsAttributes(self, fields): - self.fields_as_attributes = fields - - def ignoreFields(self, fields): - self.ignored_fields = fields - - def updateURIMapping(self, mapping): - self.mapping.update(mapping) - def save(self): """Save data in the DOM fragment. """ @@ -84,14 +63,20 @@ """ raise NotImplementedError + def updateURIMapping(self): + old_uri = u'cpsskins://%s:%s' % (IType(self.context).name, + self.node.getAttribute(u'id')) + new_uri = IIdentifiable(self.context).getURI() + self.mapping.update({old_uri: new_uri}) + def clone(self, other): """Clone the DOM adapter. """ - self.setDocument(other.document) - self.writeAsAttributes(other.fields_as_attributes) - self.ignoreFields(other.ignored_fields) - self.updateURIMapping(other.mapping) - self.setObjectType(other.objecttype) + self.document = other.document + self.object_type = other.object_type + self.ignored_fields = other.ignored_fields + self.fields_as_attributes = other.fields_as_attributes + self.mapping = other.mapping class DOMAdapter(BaseDOMAdapter): """Generic DOM adapter @@ -160,11 +145,8 @@ context = self.context node = self.node - schema = IType(context).getContentType() - - uri_mapping = {} - # properties + schema = IType(context).getContentType() for name, field in zope.schema.getFieldsInOrder(schema): if name in self.ignored_fields: continue @@ -189,26 +171,24 @@ break contentname = child_el.getAttribute(u'type') or child_el.tagName - factory_name = u'cpsskins.%s.%s' % (self.objecttype, contentname) + factory_name = u'cpsskins.%s.%s' % (self.object_type, contentname) + # create the object element = createObject(factory_name) - typename = IType(element).getTypeName() + # add it to the container if IStorage.providedBy(context): context.add(element, contentname) else: name = INameChooser(context).chooseName(contentname, element) context[name] = element + #a importer = getMultiAdapter((element, child_el), IDOMAdapter) importer.clone(self) + importer.updateURIMapping() importer.load() - old_uri = '%s:%s' % (typename, child_el.getAttribute(u'id')) - new_uri = IIdentifiable(element).getURI() - - importer.updateURIMapping({old_uri: new_uri}) - ####################################################################### # Field importer / exporter Modified: cpsskins/branches/paris-sprint-2006/standard/io/relation.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/relation.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/relation.py Mon May 1 23:57:17 2006 @@ -48,13 +48,11 @@ node = self.node context.predicate = node.getAttribute(u'predicate') - relates = () + relates = () for relate_el in node.getElementsByTagName('relate'): uri = relate_el.getAttribute(u'uri') - #uri = self.mapping[uri] - - print '%s -> %s' % (uri, self.mapping.get(uri)) + uri = self.mapping[uri] obj = uri # FIXME: resolve the uri Modified: cpsskins/branches/paris-sprint-2006/standard/io/setting.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/setting.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/setting.py Mon May 1 23:57:17 2006 @@ -34,7 +34,7 @@ context = self.context node = self.node - document = self.getDocument() + document = self.document resource = IResource(context).getResource() @@ -46,8 +46,7 @@ # export the resource exporter = getMultiAdapter((resource, setting_el), IDOMAdapter) - exporter.setDocument(document) - exporter.writeAsAttributes(self.attributes) + exporter.clone(self) exporter.save() def load(self): Modified: cpsskins/branches/paris-sprint-2006/standard/io/style.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/style.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/style.py Mon May 1 23:57:17 2006 @@ -19,7 +19,7 @@ from zope.interface import implements -from cpsskins.setup.interfaces import IDOMAdapter, IIdentifiable +from cpsskins.setup.interfaces import IDOMAdapter, IIdentifiable, IType from cpsskins.setup.io import BaseDOMAdapter from cpsskins.relations.interfaces import IRelatable @@ -32,7 +32,7 @@ context = self.context node = self.node - document = self.getDocument() + document = self.document style_el = document.createElement(u'style') style_el.setAttribute(u'id', unicode(IRelatable(context))) Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Mon May 1 23:57:17 2006 @@ -99,7 +99,7 @@ root = document.documentElement exporter = getMultiAdapter((setting, root), IDOMAdapter) - exporter.setDocument(document) + exporter.document = document exporter.save() return document.toprettyxml(indent=u' ', encoding=u'utf-8') @@ -130,7 +130,7 @@ for name in settings: exporter = getMultiAdapter((settings[name], root), IDOMAdapter) - exporter.setDocument(document) + exporter.document = document exporter.save() return document.toprettyxml(indent=u' ', encoding=u'utf-8') @@ -195,8 +195,8 @@ relation = createObject(factory_name) importer = getMultiAdapter((relation, el), IDOMAdapter) - importer.setDocument(document) - importer.updateURIMapping(uri_mapping) + importer.document = document + importer.mapping = uri_mapping importer.load() relations.add(relation) @@ -258,8 +258,8 @@ for id in storage: exporter = getMultiAdapter((storage[id], root), IDOMAdapter) - exporter.setDocument(document) - exporter.writeAsAttributes((u'title', u'description')) + exporter.document = document + exporter.fields_as_attributes = u'title', u'description' exporter.save() xml = document.toprettyxml(indent=u' ', encoding=u'utf-8') @@ -290,20 +290,19 @@ contentname = el.getAttribute('type') or el.tagName factory_name = u'cpsskins.%s.%s' % (typename, contentname) obj = createObject(factory_name) + storage.add(obj) importer = getMultiAdapter((obj, el), IDOMAdapter) - importer.setDocument(document) - importer.setObjectType(typename) + importer.document = document + importer.object_type = typename + importer.updateURIMapping() importer.load() - storage.add(obj) - uri_mapping.update(importer.mapping) document.unlink() return uri_mapping - ### Themes ####################################################### def exportThemes(self): @@ -314,9 +313,9 @@ for theme in getThemeManager(self.context).getThemes(): exporter = getMultiAdapter((theme, root), IDOMAdapter) - exporter.setDocument(document) - exporter.writeAsAttributes((u'title', u'description')) - exporter.ignoreFields((u'slot',)) + exporter.document = document + exporter.fields_as_attributes = u'title', u'description' + exporter.ignored_fields = u'slot', exporter.save() xml = document.toprettyxml(indent=u' ', encoding=u'utf-8') @@ -345,10 +344,14 @@ mgr.addTheme(theme) importer = getMultiAdapter((theme, el), IDOMAdapter) - importer.setDocument(document) - importer.setObjectType(u'canvas') + importer.document = document + importer.object_type = u'canvas' + importer.updateURIMapping() + importer.load() + uri_mapping.update(importer.mapping) + document.unlink() return uri_mapping -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins