Author: jmorliaguet
Date: Thu Apr 13 23:23:57 2006
New Revision: 2835

Modified:
   cpsskins/branches/jmo-perspectives/setup/interfaces.py
   cpsskins/branches/jmo-perspectives/standard/io/effect.py
   cpsskins/branches/jmo-perspectives/standard/io/effect.zcml
   cpsskins/branches/jmo-perspectives/standard/io/relation.py
   cpsskins/branches/jmo-perspectives/standard/io/relation.zcml
   cpsskins/branches/jmo-perspectives/standard/io/storage.py
   cpsskins/branches/jmo-perspectives/standard/io/storage.zcml
   cpsskins/branches/jmo-perspectives/standard/io/style.py
   cpsskins/branches/jmo-perspectives/standard/io/style.zcml
   cpsskins/branches/jmo-perspectives/standard/io/widget.py
   cpsskins/branches/jmo-perspectives/standard/io/widget.zcml
   cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py
Log:

- saving work:

  refactoring of XML importers:

  - storages have their own importer view

  - format importers are named views for storage importers

  - added a prototype of a relation importer
    (still need an element URI -> element factory mapper. Can be done by 
    registering standard zope3 factories for each type of element)



Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/setup/interfaces.py      (original)
+++ cpsskins/branches/jmo-perspectives/setup/interfaces.py      Thu Apr 13 
23:23:57 2006
@@ -103,6 +103,6 @@
 class IDataImporter(Interface):
     """A data importer is used to import data from XML
     """
-    def load(xml):
-        """Load data from XML."""
+    def load(dom):
+        """Load data from a DOM fragment."""
 

Modified: cpsskins/branches/jmo-perspectives/standard/io/effect.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/effect.py    (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/effect.py    Thu Apr 13 
23:23:57 2006
@@ -17,8 +17,6 @@
 """
 __docformat__ = "reStructuredText"
 
-from xml.dom.minidom import parseString
-
 from zope.app import pagetemplate
 from zope.component import adapts
 from zope.interface import implements
@@ -55,15 +53,14 @@
 class Importer(object):
     """Import effects
     """
-    adapts(IEffect)
     implements(IDataImporter)
 
-    def __init__(self, context):
+    def __init__(self, context, request):
         self.context = context
+        self.request = request
 
-    def load(self, xml=u''):
+    def load(self, dom):
         context = self.context
-        dom = parseString(xml)
         # TODO
         print dom
 

Modified: cpsskins/branches/jmo-perspectives/standard/io/effect.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/effect.zcml  (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/effect.zcml  Thu Apr 13 
23:23:57 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".effect.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.standard.formats.storage.IFormatStorage"
+      class=".effect.Importer"
+      permission="zope.ManageContent"
+      name="effect"
   />
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/standard/io/relation.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/relation.py  (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/relation.py  Thu Apr 13 
23:23:57 2006
@@ -27,6 +27,11 @@
 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.utils import getThemeManager
+
 class Exporter(object):
     """Export a relation.
     """
@@ -64,16 +69,33 @@
         self.context = context
         self.request = request
 
-    def load(self, xml=u''):
+    def load(self, dom):
         context = self.context
-        dom = parseString(xml)
 
-        for relation in dom.getElementsByTagName('relation'):
-            predicate = relation.getAttribute('predicate')
-            position = 0
-            relates = relation.getElementsByTagName('relate')
-            for relate in relates:
-                uri = relate.getAttribute('uri')
-                obj = resolve(uri) # TODO
-            arity = len(relates)
+        relations = getThemeManager().getRelationStorage()
+
+        for relation_def in dom.getElementsByTagName('relation'):
+            predicate_str = relation_def.getAttribute('predicate')
+            predicate = Predicate(predicate_str)
+
+            relates_def = relation_def.getElementsByTagName('relate')
+            relates = []
+
+            for relate_def in relates_def:
+                uri = relate_def.getAttribute('uri')
+                #obj = resolve(uri) # TODO
+                obj = uri
+                relates.append(obj)
+
+            arity = len(relates_def)
+
+            if arity == 1:
+                rel = MonadicRelation(predicate=predicate, first=relates[0])
+            elif arity == 2:
+                rel = DyadicRelation(predicate=predicate, first=relates[0],
+                                     second=relates[1])
+            elif arity == 3:
+                rel = TriadicRelation(predicate=predicate, first=relates[0],
+                                      second=relates[1], third=relates[2])
 
+            relations.add(rel)

Modified: cpsskins/branches/jmo-perspectives/standard/io/relation.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/relation.zcml        
(original)
+++ cpsskins/branches/jmo-perspectives/standard/io/relation.zcml        Thu Apr 
13 23:23:57 2006
@@ -15,6 +15,7 @@
       for="cpsskins.relations.interfaces.IRelationStorage"
       class=".relation.Importer"
       permission="zope.ManageContent"
+      name="relation"
   />
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/standard/io/storage.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/storage.py   (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/storage.py   Thu Apr 13 
23:23:57 2006
@@ -17,10 +17,8 @@
 """
 __docformat__ = "reStructuredText"
 
-from xml.dom.minidom import parseString
-
 from zope.app import zapi
-from zope.component import adapts, getMultiAdapter
+from zope.component import adapts, getMultiAdapter, queryMultiAdapter
 from zope.interface import implements
 
 from cpsskins.storage.interfaces import IStorage
@@ -56,16 +54,25 @@
         }
 
 class Importer(object):
-    """Import an element.
+    """Import storage elements
     """
-    adapts(IStorage)
     implements(IDataImporter)
 
-    def __init__(self, context):
+    def __init__(self, context, request):
         self.context = context
+        self.request = request
 
-    def load(self, xml=u''):
+    def load(self, dom):
         context = self.context
-        dom = parseString(xml)
-        print dom
+        request = self.request
+
+        for storage_def in dom.getElementsByTagName('storage'):
+            for element_def in storage_def.getElementsByTagName('*'):
+                element_type = element_def.tagName
+
+                importer = queryMultiAdapter((context, request), IDataImporter,
+                                             name=element_type)
+
+                if importer is not None:
+                    importer.load(element_def)
 

Modified: cpsskins/branches/jmo-perspectives/standard/io/storage.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/storage.zcml (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/storage.zcml Thu Apr 13 
23:23:57 2006
@@ -11,8 +11,11 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".storage.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.storage.interfaces.IStorage"
+      class=".storage.Importer"
+      permission="zope.ManageContent"
   />
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/standard/io/style.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/style.py     (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/style.py     Thu Apr 13 
23:23:57 2006
@@ -17,8 +17,6 @@
 """
 __docformat__ = "reStructuredText"
 
-from xml.dom.minidom import parseString
-
 from zope.app import pagetemplate
 from zope.component import adapts
 from zope.interface import implements
@@ -51,15 +49,15 @@
 class Importer(object):
     """This adapter makes it possible to import style resources.
     """
-    adapts(IStyle)
     implements(IDataImporter)
 
-    def __init__(self, context):
+    def __init__(self, context, request):
         self.context = context
+        self.request = request
 
-    def load(self, xml=u''):
+    def load(self, dom):
         context = self.context
-        dom = parseString(xml)
+
         for style in dom.getElementsByTagName('style'):
             for sel in style.getElementsByTagName('selector'):
                 sel_name = sel.getAttribute('name')

Modified: cpsskins/branches/jmo-perspectives/standard/io/style.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/style.zcml   (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/style.zcml   Thu Apr 13 
23:23:57 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".style.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.standard.formats.storage.IFormatStorage"
+      class=".style.Importer"
+      permission="zope.ManageContent"
+      name="style"
   />
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/standard/io/widget.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/widget.py    (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/widget.py    Thu Apr 13 
23:23:57 2006
@@ -17,8 +17,6 @@
 """
 __docformat__ = "reStructuredText"
 
-from xml.dom.minidom import parseString
-
 from zope.app import pagetemplate
 from zope.component import adapts
 from zope.interface import implements
@@ -55,15 +53,14 @@
 class Importer(object):
     """Import widgets
     """
-    adapts(IWidget)
     implements(IDataImporter)
 
-    def __init__(self, context):
+    def __init__(self, context, request):
         self.context = context
+        self.request = request
 
-    def load(self, xml=u''):
+    def load(self, dom):
         context = self.context
-        dom = parseString(xml)
         # TODO
         print dom
 

Modified: cpsskins/branches/jmo-perspectives/standard/io/widget.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/standard/io/widget.zcml  (original)
+++ cpsskins/branches/jmo-perspectives/standard/io/widget.zcml  Thu Apr 13 
23:23:57 2006
@@ -11,8 +11,12 @@
   />
 
   <!-- XML import -->
-  <adapter
-      factory=".widget.Importer"
+  <browser:view
+      provides="cpsskins.setup.interfaces.IDataImporter"
+      for="cpsskins.standard.formats.storage.IFormatStorage"
+      class=".widget.Importer"
+      permission="zope.ManageContent"
+      name="widget"
   />
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py  
(original)
+++ cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py  Thu Apr 
13 23:23:57 2006
@@ -17,6 +17,8 @@
 """
 __docformat__ = "reStructuredText"
 
+from xml.dom.minidom import parseString
+
 from zope.app.interface import queryType
 from zope.app.file import File
 from zope.app.publisher.browser import BrowserView
@@ -154,13 +156,15 @@
         relations_data = archive[u'relations.xml']
 
         mgr = getThemeManager()
+
+        formats = mgr[u'formats']
+        formats.purge()
+        self.importStorage(u'formats', formats_data)
+
         relations = mgr[u'relations']
         relations.purge()
-
         self.importStorage(u'relations', relations_data)
 
-        return relations_data
-
     ###################################################################
     # Snapshots
     ###################################################################
@@ -217,9 +221,9 @@
         mgr = getThemeManager()
         storage = mgr[name]
 
+        dom = parseString(xml)
         importer = getMultiAdapter((storage, request), IDataImporter)
-        importer.load(xml)
-        print xml
+        importer.load(dom)
 
     ###################################################################
     # Themes
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to