[Zope-Checkins] CVS: Zope/lib/python/OFS - Folder.py:1.94.60.1 ObjectManager.py:1.141.6.2 SimpleItem.py:1.91.4.2 SimpleItemInterfaces.py:1.1.2.2 Traversable.py:1.8.20.2

Shane Hathaway shane@digicool.com
Thu, 27 Sep 2001 17:17:55 -0400


Update of /cvs-repository/Zope/lib/python/OFS
In directory cvs.zope.org:/tmp/cvs-serv5757

Modified Files:
      Tag: ComponentArchitecture-branch
	Folder.py ObjectManager.py SimpleItem.py 
	SimpleItemInterfaces.py Traversable.py 
Log Message:
Got component factories to work.


=== Zope/lib/python/OFS/Folder.py 1.94 => 1.94.60.1 ===
     a management interface and can have arbitrary properties.
     """
-    __implements__ = (WriteLockInterface,)
+    __implements__ = (ObjectManager.ObjectManager.__implements__,
+                      WriteLockInterface)
     meta_type='Folder'
 
     _properties=({'id':'title', 'type': 'string'},)


=== Zope/lib/python/OFS/ObjectManager.py 1.141.6.1 => 1.141.6.2 ===
 import App.Management, Acquisition, Globals, CopySupport, Products
 import os, App.FactoryDispatcher, re, Products
-from OFS.Traversable import Traversable
+from OFS.Traversable import Traversable, getURLOf
 from Globals import DTMLFile, Persistent
 from Globals import MessageDialog, default__class_init__
 from webdav.NullResource import NullResource
@@ -104,9 +104,11 @@
 from zLOG import LOG, ERROR
 import sys,string,fnmatch,copy
 from App.ZopeComponents import listAddableTypes, AdderEntry, \
-     convertMetaTypeList
+     convertMetaTypeList, Adder
 from ZPublisher.Browser import BrowserPublish
 import ComponentArchitecture
+from SimpleItemInterfaces import ObjectManagerInterface
+
 
 import XMLExportImport
 customImporters={
@@ -180,6 +182,8 @@
     This class provides core behavior for collections of heterogeneous objects. 
     """
 
+    __implements__ = ObjectManagerInterface
+
     __ac_permissions__=(
         ('View management screens', ('manage_main','manage_menu')),
         ('Access contents information',
@@ -321,7 +325,8 @@
         object=self._getOb(id)
 
         if set_owner:
-            object.manage_fixupOwnershipAfterAdd()
+            if hasattr(object, 'manage_fixupOwnershipAfterAdd'):
+                object.manage_fixupOwnershipAfterAdd()
 
             # Try to give user the local role "Owner", but only if
             # no local roles have been set on the object yet.
@@ -332,7 +337,8 @@
                     if name != 'Anonymous User':
                         object.manage_setLocalRoles(name, ['Owner'])
 
-        object.manage_afterAdd(object, self)
+        if hasattr(object, 'manage_afterAdd'):
+            object.manage_afterAdd(object, self)
         return id
 
     def manage_afterAdd(self, item, container):
@@ -732,6 +738,43 @@
             return (self, ())
         else:
             return p.__browser_default__(request)
+
+
+class ObjectManagerAdder (Acquisition.Explicit):
+    """
+    """
+    id = None
+
+    __implements__ = Adder, BrowserPublish
+
+    def addToContainer(self, ob, id=None):
+        if id is None:
+            id = self.id
+        self.aq_parent._setObject(id, ob)
+
+    def resultAfterAdd(self):
+        request = Acquisition.aq_get(self, 'REQUEST', None, 1)
+        request.response.redirect(getURLOf(self.aq_parent) + '/manage_main')
+        return ''
+##        return self.aq_parent.manage_workspace(request)
+
+    def __bobo_traverse__(self, request, name):
+        if name[:3] == '(p)':
+            return ComponentArchitecture.getPresentation(
+                self, name[3:], BrowserPublish)
+        elif name[:4] == '(id)':
+            self.id = name[4:]
+            return self
+        else:
+            raise 'NotFound'
+
+    def __browser_default__(self, request):
+        raise 'NotFound'
+
+
+ComponentArchitecture.providePresentation(
+    ObjectManagerInterface, 'add', BrowserPublish,
+    ObjectManagerAdder().__of__)
 
 
 def findChilds(obj,dirname=''):


=== Zope/lib/python/OFS/SimpleItem.py 1.91.4.1 => 1.91.4.2 ===
 from Acquisition import aq_base
 import time
-from SimpleItemInterfaces import SimpleItemInterfaces
+from SimpleItemInterfaces import SimpleItemInterface
 
 import marshal
 import ZDOM
@@ -119,7 +119,7 @@
            ):
     """A common base class for simple, non-container objects."""
 
-    __implements__ = SimpleItemInterfaces
+    __implements__ = SimpleItemInterface
 
     isPrincipiaFolderish=0
     isTopLevelPrincipiaApplicationObject=0


=== Zope/lib/python/OFS/SimpleItemInterfaces.py 1.1.2.1 => 1.1.2.2 ===
 
 
-class SimpleItemInterfaces (Content):
+class SimpleItemInterface (Content):
+    """
+    """
+
+
+class ObjectManagerInterface (SimpleItemInterface):
     """
     """
 


=== Zope/lib/python/OFS/Traversable.py 1.8.20.1 => 1.8.20.2 ===
             return ob
 
+
 def getPhysicalPathOf(ob):
     r = []
     while ob is not None:
@@ -123,13 +124,35 @@
         elif hasattr(base, '__name__'):
             r.append(ob.__name__)
         if hasattr(base, 'im_self'):
-            # SECURITY HOLE: im_self can be impersonated.
+            # XXX SECURITY HOLE: im_self can be impersonated.
             ob = ob.im_self
         else:
             ob = aq_parent(aq_inner(ob))
     r.append('')
     r.reverse()
-    return tuple(r)    
+    return tuple(r)
+
+
+def getURLOf(ob, relative=0):
+    try:
+        req = aq_get(ob, 'REQUEST', None, 1)
+        if req is None:
+            req = {}
+    except AttributeError:
+        req = {}
+    rpp = req.get('VirtualRootPhysicalPath', ('',))
+    spp = getPhysicalPathOf(ob)
+    i = 0
+    for name in rpp[:len(spp)]:
+        if spp[i] == name:
+            i = i + 1
+        else:
+            break
+    path = map(quote, spp[i:])
+    if relative:
+        # This is useful for physical path relative to a VirtualRoot
+        return join(path, '/')
+    return join([req['SERVER_URL']] + req._script + path, '/')
 
 
 class Traversable: