Author: jmorliaguet
Date: Sat Apr 29 16:23:20 2006
New Revision: 2984

Added:
   cpsskins/branches/paris-sprint-2006/setup/io.py   (contents, props changed)
Modified:
   cpsskins/branches/paris-sprint-2006/ftests/test_registration.py
   cpsskins/branches/paris-sprint-2006/setup/README.txt
   cpsskins/branches/paris-sprint-2006/setup/configure.zcml
   cpsskins/branches/paris-sprint-2006/setup/interfaces.py
   cpsskins/branches/paris-sprint-2006/setup/manager.py
   cpsskins/branches/paris-sprint-2006/setup/registration.py
   cpsskins/branches/paris-sprint-2006/setup/utils.py
   cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py
   cpsskins/branches/paris-sprint-2006/standard/io/area.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/box.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/color.py
   cpsskins/branches/paris-sprint-2006/standard/io/color.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/element.py
   cpsskins/branches/paris-sprint-2006/standard/io/element.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/page.py
   cpsskins/branches/paris-sprint-2006/standard/io/page.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml
   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/settings.py
   cpsskins/branches/paris-sprint-2006/standard/io/storage.py
   cpsskins/branches/paris-sprint-2006/standard/io/style.py
   cpsskins/branches/paris-sprint-2006/standard/io/theme.py
   cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml
   cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py
Log:

- added support for URI mappings (not functional yet)

- renamed resources.find() as resources.resolve() to resolve URIs



Modified: cpsskins/branches/paris-sprint-2006/ftests/test_registration.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ftests/test_registration.py     
(original)
+++ cpsskins/branches/paris-sprint-2006/ftests/test_registration.py     Sat Apr 
29 16:23:20 2006
@@ -13,7 +13,7 @@
 ##############################################################################
 """Registration tests
 
-$Id:$
+$Id$
 """
 __docformat__ = "reStructuredText"
 

Modified: cpsskins/branches/paris-sprint-2006/setup/README.txt
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/README.txt        (original)
+++ cpsskins/branches/paris-sprint-2006/setup/README.txt        Sat Apr 29 
16:23:20 2006
@@ -659,11 +659,11 @@
     <BLANKLINE>
 
 
-Refering to resources
-=====================
+Resolving URIs
+==============
 
 Resources can be accessed by using the name of the setting under which the
-resource has been registered.
+resource has been registered (cpsskins://[EMAIL PROTECTED]).
 
     >>> from cpsskins.standard.fields.color import Color
 
@@ -677,7 +677,7 @@
     >>> ITypeable(color).getTypeName()
     u'field-color'
 
-    >>> res = resources.find(u'cpsskins://[EMAIL PROTECTED]', context=root)
+    >>> res = resources.resolve(u'cpsskins://[EMAIL PROTECTED]', context=root)
 
     >>> res is color
     True
@@ -686,7 +686,7 @@
     #ff0000
 
 
-This makes it possible to refer to resources using a string notation.
+This makes it possible to refer to resources in text.
 
     >>> style = Style()
     >>> root[u'style'] = style

Modified: cpsskins/branches/paris-sprint-2006/setup/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/configure.zcml    (original)
+++ cpsskins/branches/paris-sprint-2006/setup/configure.zcml    Sat Apr 29 
16:23:20 2006
@@ -63,7 +63,7 @@
   <!-- field IO -->
 
   <adapter
-      factory="cpsskins.setup.utils.ListField"
+      factory="cpsskins.setup.io.ListField"
   />
 
 </configure>

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     Sat Apr 29 
16:23:20 2006
@@ -30,7 +30,7 @@
 class ISetting(Interface):
     """Setting"""
 
-    name = Attribute("The setting's name.")
+    name = Attribute(u"The setting's name.")
 
     title = TextLine(
         title=u"Title",
@@ -43,12 +43,12 @@
 class IGlobalSetting(ISetting):
     """ """
 
-    filename = Attribute("The resource filename.")
+    filename = Attribute(u"The resource filename.")
 
 class ILocalSetting(ISetting):
     """ """
 
-    custom = Attribute("Is this a custom setting?.")
+    custom = Attribute(u"Is this a custom setting?.")
 
 class IResource(Interface):
 
@@ -92,17 +92,24 @@
         """Returns true if the resource has been customized"""
 
 class IDataExporter(Interface):
-    """A data exporter is used to export data to XML
+    """A data exporter exports data to XML
     """
+    mapping = Attribute(u"URI mapping")
+
     def __call__():
         """Export to XML."""
 
+    def save():
+        """Save data as a DOM fragment."""
+
     def getInfo():
-        """Return some export information (dictionary, ...)"""
+        """Return some export information (dictionary, ...)."""
 
 class IDataImporter(Interface):
-    """A data importer is used to import data from XML
+    """A data importer imports data from XML
     """
+    mapping = Attribute(u"URI mapping")
+
     def load(dom):
         """Load data from a DOM fragment."""
 

Added: cpsskins/branches/paris-sprint-2006/setup/io.py
==============================================================================
--- (empty file)
+++ cpsskins/branches/paris-sprint-2006/setup/io.py     Sat Apr 29 16:23:20 2006
@@ -0,0 +1,161 @@
+##############################################################################
+#
+# Copyright (c) 2005-2006 Nuxeo and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import zope.schema
+
+from zope.component import createObject, adapts
+from zope.interface import implements, Interface
+
+from cpsskins.elements.interfaces import IIdentifiable, IType
+from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.utils import editObject
+
+class DataExporter(object):
+    """Base class for data exporters
+    """
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+        self.mapping = {}
+
+    def __call__(self):
+        """Export to XML.
+        """
+        raise NotImplementedError
+
+    def save(self):
+        """Save data as a DOM fragment.
+        """
+        raise NotImplementedError
+
+    def getInfo(self):
+        """Return some export information (dictionary, ...).
+        """
+        raise NotImplementedError
+
+class DataImporter(object):
+    """Base class for data importers"""
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+        self.mapping = {}
+
+    def load(self, dom):
+        """Load data from a DOM fragment. Returns an object.
+        """
+        raise NotImplementedError
+
+class ObjectExporter(DataExporter):
+    """Export objects
+    """
+    implements(IDataExporter)
+
+    def __call__(self):
+        context = self.context
+
+        properties = []
+        schema = IType(context).getContentType()
+
+        content = []
+        for name, field in zope.schema.getFieldsInOrder(schema):
+            obj = getattr(context, name)
+
+            field_io = IFieldIO(field, None)
+            if field_io is not None:
+                value = field_io.dump(obj)
+            else:
+                value = obj
+
+            content.append(
+                u'<%(name)s value="%(value)s"/>' % {
+                'name': name,
+                'value': value,
+                })
+
+        return u"""<?xml version="1.0"?>
+<%(name)s uri="%(uri)s">
+  %(content)s
+</%(name)s>
+        """ % {
+            'name': IType(context).resourcename,
+            'uri': IIdentifiable(context).getURI(),
+            'content': u'\n  '.join(content),
+            }
+
+class ObjectImporter(DataImporter):
+    """Import objects
+    """
+    implements(IDataImporter)
+
+    def load(self, dom):
+        context = self.context
+
+        object_name = dom.tagName
+        object = createObject(object_name)
+        schema = IType(object).getContentType()
+
+        props = {}
+        for name, field in zope.schema.getFieldsInOrder(schema):
+            text = dom.getAttribute(name)
+
+            field_io = IFieldIO(field, None)
+            if field_io is not None:
+                value = field_io.load(text)
+            else:
+                value = text
+
+            props[name] = value
+
+        editObject(object, props)
+
+        context.add(object)
+        return object
+
+#######################################################################
+# Field importer / exporter
+#######################################################################
+
+class IFieldIO(Interface):
+    """A field importer / exporter"""
+
+    def dump(obj):
+        """convert the object into a string"""
+
+    def load(text):
+        """convert the string into an object"""
+
+class ListField:
+    """A list field"""
+
+    adapts(zope.schema.interfaces.IList)
+    implements(IFieldIO)
+
+    def __init__(self, field):
+        self.field = field
+
+    def dump(self, obj):
+        return u','.join(obj)
+
+    def load(self, text):
+        return text.split(',')
+
+

Modified: cpsskins/branches/paris-sprint-2006/setup/manager.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/manager.py        (original)
+++ cpsskins/branches/paris-sprint-2006/setup/manager.py        Sat Apr 29 
16:23:20 2006
@@ -40,9 +40,8 @@
 
         self.gsm = getGlobalSiteManager()
 
-    ###################################################################
-    # Registration
-    ###################################################################
+
+    ### Registration of resources  #####################################
 
     def register(self, name=u'', title=u'', resource=None, filename=None,
                        custom=False, context=None):
@@ -80,9 +79,8 @@
 
         settings.unregisterUtility(provided=ISetting, name=name)
 
-    ###################################################################
-    # Finding resources
-    ###################################################################
+
+    ### Finding resources  ############################################
 
     def lookup(self, name=u'', type=None, context=None, default=None):
         if not name:
@@ -109,9 +107,7 @@
         return default
 
     def list(self, type=None, context=None):
-
         items = {}
-
         entries = list(self.gsm.getUtilitiesFor(ISetting))
         if context is not None:
             settings = getThemeManager(context).getSettings()
@@ -127,18 +123,29 @@
             items[name] = resource
         return items.values()
 
-    def find(self, name, context=None):
-        parts = name.split('cpsskins://')
-        if len(parts) != 2:
-            return None
-        name = parts[1]
-        type_name, resource_id = name.split('@')
-        type = getContentType(type_name)
-        return self.lookup(name=resource_id, type=type, context=context)
-
-    ###################################################################
-    # Customization
-    ###################################################################
+    def resolve(self, uri, context=None):
+        if not uri.startswith('cpsskins://'):
+            raise ValueError("Unkown URI scheme in '%s'" % uri)
+
+        resource = None
+        location = uri[11:]
+
+        if '@' in location:
+            type_name, resource_id = uri.split('@')
+            type = getContentType(type_name)
+            resource = self.lookup(name=resource_id, type=type, 
context=context)
+
+        elif ':' in location:
+            type_name, resource_id = uri.split(':')
+            type = getContentType(type_name)
+            # TODO
+
+        else:
+            raise ValueError("'%s' has no name or identifier." % uri)
+
+        return resource
+
+    ### Customization  ################################################
 
     def isGlobal(self, name=u''):
         setting = self.gsm.queryUtility(ISetting, name)

Modified: cpsskins/branches/paris-sprint-2006/setup/registration.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/registration.py   (original)
+++ cpsskins/branches/paris-sprint-2006/setup/registration.py   Sat Apr 29 
16:23:20 2006
@@ -91,7 +91,7 @@
         logger.debug("reloaded setting %s in %s", name, filename)
 
     # load the data
-    IDataImporter(resource).load(resource_def.toxml())
+    #IDataImporter(resource).load(resource_def.toxml())
     return resource
 
 

Modified: cpsskins/branches/paris-sprint-2006/setup/utils.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/utils.py  (original)
+++ cpsskins/branches/paris-sprint-2006/setup/utils.py  Sat Apr 29 16:23:20 2006
@@ -24,19 +24,9 @@
 from tarfile import TarFile
 from tarfile import TarInfo
 
-import zope.schema
+from zope.component import queryUtility, getUtilitiesFor
 
-from zope.component import createObject, adapts
-from zope.component import getUtility, queryUtility, getUtilitiesFor
-from zope.component.interface import getInterface
-from zope.interface import implements, Interface
-
-from cpsskins.elements.interfaces import IIdentifiable, IType
-from cpsskins.setup.interfaces import IDataExporter, IDataImporter
-from cpsskins.setup.interfaces import IResourceManager, INameType
-from cpsskins.utils import getThemeManager
-
-from  cpsskins.elements import interfaces
+from cpsskins.setup.interfaces import INameType
 
 logger = logging.getLogger("cpsskins")
 
@@ -106,99 +96,3 @@
             continue
         setattr(obj, k, v)
 
-
-class ObjectExporter(object):
-    """Export objects
-    """
-    implements(IDataExporter)
-
-    def __call__(self):
-        context = self.context
-
-        properties = []
-        schema = IType(context).getContentType()
-
-        content = []
-        for name, field in zope.schema.getFieldsInOrder(schema):
-            obj = getattr(context, name)
-
-            field_io = IFieldIO(field, None)
-            if field_io is not None:
-                value = field_io.dump(obj)
-            else:
-                value = obj
-
-            content.append(
-                u'<%(name)s value="%(value)s"/>' % {
-                'name': name,
-                'value': value,
-                })
-
-        return u"""<?xml version="1.0"?>
-<%(name)s uri="%(uri)s">
-  %(content)s
-</%(name)s>
-        """ % {
-            'name': IType(context).resourcename,
-            'uri': IIdentifiable(context).getURI(),
-            'content': u'\n  '.join(content),
-            }
-
-class ObjectImporter(object):
-    """Import objects
-    """
-    implements(IDataImporter)
-
-    def load(self, dom):
-        context = self.context
-
-        object_name = dom.tagName
-        object = createObject(object_name)
-        schema = IType(object).getContentType()
-
-        props = {}
-        for name, field in zope.schema.getFieldsInOrder(schema):
-            text = dom.getAttribute(name)
-
-            field_io = IFieldIO(field, None)
-            if field_io is not None:
-                value = field_io.load(text)
-            else:
-                value = text
-
-            props[name] = value
-
-        editObject(object, props)
-
-        context.add(object)
-        return object
-
-#######################################################################
-# Field importer / exporter
-#######################################################################
-
-class IFieldIO(Interface):
-    """A field importer / exporter"""
-
-    def dump(obj):
-        """convert the object into a string"""
-
-    def load(text):
-        """convert the string into an object"""
-
-class ListField:
-    """A list field"""
-
-    adapts(zope.schema.interfaces.IList)
-    implements(IFieldIO)
-
-    def __init__(self, field):
-        self.field = field
-
-    def dump(self, obj):
-        return u','.join(obj)
-
-    def load(self, text):
-        return text.split(',')
-
-

Modified: cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py      
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py      
Sat Apr 29 16:23:20 2006
@@ -162,7 +162,7 @@
             props = []
             for p, r in v.items():
                 if r.startswith('cpsskins://'):
-                    r = resources.find(r, context)
+                    r = resources.resolve(r, context)
                 props.append('%s:%s' % (p, r))
             rendered.append('%s.%s %s {%s}' % (s[0], style_id, sel,
                                               ';'.join(props)))

Modified: cpsskins/branches/paris-sprint-2006/standard/io/area.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/area.zcml   (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/area.zcml   Sat Apr 29 
16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.displays.area.IArea"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.displays.storage.IDisplayStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="area"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/box.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/box.zcml    (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/box.zcml    Sat Apr 29 
16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.displays.box.IBox"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.displays.storage.IDisplayStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="box"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml       
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml       Sat Apr 
29 16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.displays.boxgroup.IBoxGroup"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.displays.storage.IDisplayStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="boxgroup"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/color.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/color.py    (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/color.py    Sat Apr 29 
16:23:20 2006
@@ -23,10 +23,10 @@
 from zope.component import adapts
 from zope.interface import implements
 
-from cpsskins.standard.fields.color import IColor
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.io import DataExporter, DataImporter
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export a color.
     """
     implements(IDataExporter)
@@ -36,15 +36,11 @@
     def __call__(self):
         return self.template()
 
-class Importer(object):
+class Importer(DataImporter):
     """Import a color.
     """
-    adapts(IColor)
     implements(IDataImporter)
 
-    def __init__(self, context):
-        self.context = context
-
     def load(self, xml=u''):
         context = self.context
         dom = parseString(xml)

Modified: cpsskins/branches/paris-sprint-2006/standard/io/color.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/color.zcml  (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/color.zcml  Sat Apr 29 
16:23:20 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".color.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.setup.settings.ISettings"
+      class=".color.Importer"
+      permission="zope.ManageContent"
+      name="color"
   />
 
 </configure>

Modified: cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml Sat Apr 29 
16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.formats.effect.IEffect"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.formats.storage.IFormatStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="effect"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/element.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/element.py  (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/element.py  Sat Apr 29 
16:23:20 2006
@@ -24,6 +24,7 @@
 
 from cpsskins.elements.interfaces import IElement, IIdentifiable
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.io import DataExporter, DataImporter
 
 XML = u"""<element
   uri="%(uri)s"
@@ -31,7 +32,7 @@
   parent="%(parent)s"/>
 """
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export an element.
     """
     implements(IDataExporter)
@@ -57,15 +58,11 @@
             'parent': parent and IIdentifiable(parent).getURI() or u'',
         })
 
-class Importer(object):
+class Importer(DataImporter):
     """Import an element.
     """
-    adapts(IElement)
     implements(IDataImporter)
 
-    def __init__(self, context):
-        self.context = context
-
     def load(self, xml=u''):
         context = self.context
         dom = parseString(xml)

Modified: cpsskins/branches/paris-sprint-2006/standard/io/element.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/element.zcml        
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/element.zcml        Sat Apr 
29 16:23:20 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".element.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="*"
+      class=".element.Exporter"
+      permission="zope.ManageContent"
+      name="element"
   />
 
 </configure>

Modified: cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml Sat Apr 29 
16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.formats.layout.ILayout"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.formats.storage.IFormatStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="layout"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/page.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/page.py     (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/page.py     Sat Apr 29 
16:23:20 2006
@@ -25,9 +25,9 @@
 
 from cpsskins.elements.interfaces import IIdentifiable
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
-from cpsskins.elements.interfaces import IThemePage
+from cpsskins.setup.io import DataExporter, DataImporter
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export pages
     """
     implements(IDataExporter)
@@ -52,10 +52,9 @@
             }
 
 
-class Importer(object):
+class Importer(DataImporter):
     """Import pages
     """
-    adapts(IThemePage)
     implements(IDataImporter)
 
     def __init__(self, context):

Modified: cpsskins/branches/paris-sprint-2006/standard/io/page.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/page.zcml   (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/page.zcml   Sat Apr 29 
16:23:20 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".page.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.elements.interfaces.ITheme"
+      class=".page.Exporter"
+      permission="zope.ManageContent"
+      name="page"
   />
 
 </configure>

Modified: cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml    
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml    Sat Apr 
29 16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.perspectives.interfaces.IPerspective"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.setup.settings.ISettings"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="perspective"
   />

Modified: cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml        
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml        Sat Apr 
29 16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.elements.interfaces.IPortlet"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.portlets.storage.IPortletStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="portlet"
   />

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 Sat Apr 29 
16:23:20 2006
@@ -20,29 +20,26 @@
 from xml.dom.minidom import parseString
 
 from zope.app import pagetemplate
-from zope.component import adapts
+from zope.component import adapts, getUtility
 from zope.interface import implements
 
 from cpsskins.elements.interfaces import IIdentifiable
 from cpsskins.relations.interfaces import IRelation
-from cpsskins.setup.interfaces import IDataExporter, IDataImporter
-
 from cpsskins.relations.predicates import Predicate
-from cpsskins.relations.relations import (
-    MonadicRelation, DyadicRelation, TriadicRelation)
+from cpsskins.relations.relations import MonadicRelation, DyadicRelation
+from cpsskins.relations.relations import TriadicRelation
+from cpsskins.setup.io import DataExporter, DataImporter
+from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.interfaces import IResourceManager
 from cpsskins.utils import getThemeManager
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export a relation.
     """
     implements(IDataExporter)
 
     template = pagetemplate.ViewPageTemplateFile('relation.xml')
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def __call__(self):
         return self.template()
 
@@ -60,17 +57,14 @@
             'relates': relate_info,
             }
 
-class Importer(object):
+class Importer(DataImporter):
     """Import a relation.
     """
     implements(IDataImporter)
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def load(self, dom):
         context = self.context
+        mapping = self.mapping
 
         relations = getThemeManager(context).getRelationStorage()
 
@@ -80,10 +74,12 @@
         relates_def = dom.getElementsByTagName('relate')
         relates = []
 
+        resources = getUtility(IResourceManager)
+
         for relate_def in relates_def:
             uri = relate_def.getAttribute('uri')
-            #obj = resolve(uri) # TODO
-            obj = uri
+            uri = mapping[uri]
+            obj = resources.resolve(uri, self.context)
             relates.append(obj)
 
         arity = len(relates_def)

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  Sat Apr 29 
16:23:20 2006
@@ -26,9 +26,10 @@
 
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
 from cpsskins.setup.interfaces import IResource, ISetting, IResourceType
+from cpsskins.setup.io import DataImporter, DataExporter
 
-class Exporter(object):
-    """Export settings
+class Exporter(DataExporter):
+    """Export a setting
     """
     implements(IDataExporter)
 
@@ -56,15 +57,11 @@
             }
 
 
-class Importer(object):
-    """Import settings
+class Importer(DataImporter):
+    """Import a setting
     """
     implements(IDataImporter)
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def load(self, dom):
         context = self.context
 

Modified: cpsskins/branches/paris-sprint-2006/standard/io/settings.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/settings.py (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/settings.py Sat Apr 29 
16:23:20 2006
@@ -26,9 +26,10 @@
 
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
 from cpsskins.setup.interfaces import IResource, ISetting, IResourceType
+from cpsskins.setup.io import DataImporter, DataExporter
 from cpsskins.setup.settings import ISettings
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export settings
     """
     implements(IDataExporter)
@@ -48,15 +49,11 @@
 </settings>
 """ % {'content': xml}
 
-class Importer(object):
+class Importer(DataImporter):
     """Import settings
     """
     implements(IDataImporter)
 
-    def __init__(self, context):
-        self.context = context
-        self.request = request
-
     def load(self, dom):
         context = self.context
 

Modified: cpsskins/branches/paris-sprint-2006/standard/io/storage.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/storage.py  (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/storage.py  Sat Apr 29 
16:23:20 2006
@@ -22,23 +22,20 @@
 from zope.interface import implements
 
 from cpsskins.elements.interfaces import IIdentifiable
-from cpsskins.storage.interfaces import IStorage
+from cpsskins.setup.io import DataImporter, DataExporter
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.storage.interfaces import IStorage
 
 XML = u"""<storage name="%(name)s">
   %(content)s
 </storage>
 """
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export a storage.
     """
     implements(IDataExporter)
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def __call__(self):
         return u'<?xml version="1.0"?>\n' + self.toXML(self.context)
 
@@ -54,20 +51,15 @@
             'content': xml,
         }
 
-class Importer(object):
+class Importer(DataImporter):
     """Import storage elements
     """
     implements(IDataImporter)
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def load(self, dom):
         context = self.context
         request = self.request
 
-        mapping = {}
         for storage_def in dom.getElementsByTagName('storage'):
             for element_def in storage_def.getElementsByTagName('*'):
                 element_type = element_def.tagName
@@ -80,6 +72,6 @@
                     element = importer.load(element_def)
                     new_uri = IIdentifiable(element).getURI()
 
-                    mapping[old_uri] = new_uri
+                    # store information about URI mapping
+                    self.mapping[old_uri] = new_uri
 
-        return mapping

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    Sat Apr 29 
16:23:20 2006
@@ -21,12 +21,13 @@
 from zope.component import adapts
 from zope.interface import implements
 
-from cpsskins.standard.formats.style import IStyle, Style
 from cpsskins.elements.interfaces import IIdentifiable
+from cpsskins.standard.formats.style import IStyle, Style
 from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.io import DataImporter, DataExporter
 
-class Exporter(object):
-    """This adapter makes it possible to export style resources
+class Exporter(DataExporter):
+    """Export style resources
     """
     implements(IDataExporter)
 
@@ -46,15 +47,11 @@
             'selectors': selectors,
         }
 
-class Importer(object):
-    """This adapter makes it possible to import style resources.
+class Importer(DataImporter):
+    """Import style resources.
     """
     implements(IDataImporter)
 
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
     def load(self, dom):
         storage = self.context
 

Modified: cpsskins/branches/paris-sprint-2006/standard/io/theme.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/theme.py    (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/theme.py    Sat Apr 29 
16:23:20 2006
@@ -24,10 +24,11 @@
 from zope.interface import implements
 
 from cpsskins.elements.interfaces import IIdentifiable
-from cpsskins.setup.interfaces import IDataExporter, IDataImporter
 from cpsskins.elements.interfaces import ITheme
+from cpsskins.setup.interfaces import IDataExporter, IDataImporter
+from cpsskins.setup.io import DataImporter, DataExporter
 
-class Exporter(object):
+class Exporter(DataExporter):
     """Export themes
     """
     implements(IDataExporter)
@@ -52,15 +53,11 @@
             }
 
 
-class Importer(object):
+class Importer(DataImporter):
     """Import themes
     """
-    adapts(ITheme)
     implements(IDataImporter)
 
-    def __init__(self, context):
-        self.context = context
-
     def load(self, xml=u''):
         context = self.context
         dom = parseString(xml)

Modified: cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml  (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml  Sat Apr 29 
16:23:20 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".theme.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.thememanager.IThemeManagementFolder"
+      class=".theme.Exporter"
+      permission="zope.ManageContent"
+      name="theme"
   />
 
 </configure>

Modified: cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml (original)
+++ cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml Sat Apr 29 
16:23:20 2006
@@ -6,7 +6,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataExporter"
       for="cpsskins.standard.formats.widget.IWidget"
-      class="cpsskins.setup.utils.ObjectExporter"
+      class="cpsskins.setup.io.ObjectExporter"
       permission="zope.ManageContent"
   />
 
@@ -14,7 +14,7 @@
   <browser:view
       provides="cpsskins.setup.interfaces.IDataImporter"
       for="cpsskins.standard.formats.storage.IFormatStorage"
-      class="cpsskins.setup.utils.ObjectImporter"
+      class="cpsskins.setup.io.ObjectImporter"
       permission="zope.ManageContent"
       name="widget"
   />

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 Sat Apr 
29 16:23:20 2006
@@ -172,15 +172,14 @@
             data = archive[u'%s.xml' % storage_id]
             uri_mapping.update(self.importStorage(storage_id, data))
 
-        for k, v in uri_mapping.items():
-            print '%s -> %s' % (k, v)
-
         # relations
-        relations = mgr[u'relations']
+        relations = mgr.getRelationStorage()
         relations.purge()
 
-        relations_data = archive[u'relations.xml']
-        self.importStorage(u'relations', relations_data)
+        dom = parseString(archive[u'relations.xml'])
+        importer = getMultiAdapter((relations, self.request), IDataImporter)
+        importer.mapping = uri_mapping
+        importer.load(dom)
 
     ###################################################################
     # Snapshots
@@ -251,7 +250,9 @@
 
         dom = parseString(xml)
         importer = getMultiAdapter((storage, request), IDataImporter)
-        return importer.load(dom)
+        importer.load(dom)
+        return importer.mapping
+
 
     ###################################################################
     # Themes
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to