Author: jmorliaguet
Date: Tue Apr 11 14:00:29 2006
New Revision: 2813

Modified:
   cpsskins/branches/jmo-perspectives/elements/configure.zcml
   cpsskins/branches/jmo-perspectives/elements/element.py
   cpsskins/branches/jmo-perspectives/elements/interfaces.py
Log:

- added an intermediate 'Typeable' adapter to get the type of elements. 
  ITypeable(element).getType() return a tuple which can be used to create
  a unique type signature.



Modified: cpsskins/branches/jmo-perspectives/elements/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/configure.zcml  (original)
+++ cpsskins/branches/jmo-perspectives/elements/configure.zcml  Tue Apr 11 
14:00:29 2006
@@ -17,6 +17,11 @@
       factory=".element.Relatable"
   />
 
+  <!-- this adapter makes elements typeable -->
+  <adapter
+      factory=".element.Typeable"
+  />
+
   <!-- this adapter makes elements identifiable -->
   <adapter
       factory=".element.Identifiable"

Modified: cpsskins/branches/jmo-perspectives/elements/element.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/element.py      (original)
+++ cpsskins/branches/jmo-perspectives/elements/element.py      Tue Apr 11 
14:00:29 2006
@@ -29,7 +29,7 @@
 
 from cpsskins.elements.interfaces import IElement, IElementType, IType, INode
 from cpsskins.elements.interfaces import IInnerNode, ILeaf, INodeTraverser
-from cpsskins.elements.interfaces import IIdentifiable
+from cpsskins.elements.interfaces import IIdentifiable, ITypeable
 from cpsskins.relations.interfaces import IRelatable
 from cpsskins.setup.interfaces import IResourceType
 
@@ -60,6 +60,20 @@
         id = self.element.identifier or u''
         return str(id)
 
+class Typeable(object):
+    """This adapter makes elements typeable.
+    """
+    adapts(IElement)
+    implements(ITypeable)
+
+    def __init__(self, element):
+        self.element = element
+
+    def getType(self):
+        type = IType(self.element)
+        return uniq([type.getElementType(), type.getResourceType(),
+                     type.getContentType()])
+
 class Identifiable(object):
     """This adapter makes elements uniquely identifiable.
     """
@@ -71,19 +85,14 @@
 
     def getURI(self):
         element = self.element
-        type = IType(element)
-
-        elementname = type.elementname
-        resourcename = type.resourcename
-        contentname = type.contentname
+        type = ITypeable(element).getType()
 
         relatable = IRelatable(element, None)
         if relatable is None:
             relatable = IRelatable(getParent(element), u'')
         identifier = str(relatable)
 
-        prefix = uniq([elementname, resourcename, contentname])
-        return '-'.join(prefix + [identifier])
+        return '-'.join([t.getTaggedValue('name') for t in type] + 
[identifier])
 
 class Node(Element):
     """A Node is an element in a tree structure.

Modified: cpsskins/branches/jmo-perspectives/elements/interfaces.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/interfaces.py   (original)
+++ cpsskins/branches/jmo-perspectives/elements/interfaces.py   Tue Apr 11 
14:00:29 2006
@@ -59,6 +59,11 @@
     def getContentName():
         """ """
 
+class ITypeable(Interface):
+
+    def getType():
+        """Return the element's complete type as a tuple
+        """
 
 class INode(IElement):
     """A generic tree node"""
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to