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

Reply via email to