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