[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Folder - FolderAdder.py:1.1.2.5 FolderContents.py:1.1.2.3 folder.zcml:1.1.2.5 remove_confirmed.pt:NONE

Jim Fulton jim@zope.com
Mon, 4 Mar 2002 11:55:35 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Folder
In directory cvs.zope.org:/tmp/cvs-serv14494

Modified Files:
      Tag: Zope-3x-branch
	FolderAdder.py FolderContents.py folder.zcml 
Removed Files:
      Tag: Zope-3x-branch
	remove_confirmed.pt 
Log Message:
Refactored Folder (partially) to use Container framework.

Note that we are not reusing the Container content implementation (at
least for now), but we *are* reusing it's test.



=== Zope3/lib/python/Zope/App/OFS/Folder/FolderAdder.py 1.1.2.4 => 1.1.2.5 ===
 """
 
-import os
-
-from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
-from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
-from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
+from Zope.App.OFS.Container.Views.Browser.Adder import ContainerAdder
 from Zope.App.ZMI.Addable import ContentAddables
-from Zope.ComponentArchitecture import createObject
-
-class FolderAdderError( Exception ):
-    pass
-
-class DuplicateIDError( FolderAdderError ):
-    pass
-
-class FolderAdder( AttributePublisher ):
-
-    __implements__ = AttributePublisher.__implements__
-    
-    def __init__( self, folder ):
-        self._folder = folder
-
-
-    def _listAddables( self ):
-        """
-            Derived classes override this to change the registry
-            in which factories are looked up.
-        """
-        return ContentAddables.getAddables( self._folder )
-
-    def listAddableInfo( self ):
-        """
-            Return a sequence of mappings for the addables for our
-            folder.
-        """
-        return self._listAddables()
-
-    def action( self, id, type_name, REQUEST=None):
-        """
-            Instantiate an object and put it in our folder.
-        """
-        if id in self._folder.objectIds():
-            raise DuplicateIDError, "ID '%s' already in use." % id
-        self._folder.setObject( id, createObject( self._folder, type_name ) )
-
-        # XXX:  This is horribly broken, but I can't do better until
-        #       we have a way to compute absolute URLs.
-        if REQUEST is not None:
-            # for unit tests
-            REQUEST['RESPONSE'].redirect(REQUEST['URL2'])
-        return self.confirmed( type_name=type_name, id=id )
-
 
-    #
-    #   Make it possible for 'index' to find the folder.
-    #
-    def getContext( self ):
-        return self._folder
+class FolderAdder(ContainerAdder):
+    """Specialize addable list for service implemenations.
+    """
+    def _listAddables(self):
+        # Override to look up from the service class registry.
+        return ContentAddables.getAddables( self.getContext() )
 
-    index = PageTemplateFile('add.pt')
-    confirmed = PageTemplateFile('add_confirmed.pt')


=== Zope3/lib/python/Zope/App/OFS/Folder/FolderContents.py 1.1.2.2 => 1.1.2.3 ===
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
+# 
 # This software is subject to the provisions of the Zope Public License,
-# Version 1.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# Version 2.0 (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.
-
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE
+# 
+##############################################################################
 """
-    Define view component for folder contents.
+
+Revision information: $Id$
 """
 
+
 import os
 
-from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
-from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
 from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
-from Zope.App.Service.ServiceManager import ServiceManager
-
-class FolderContents( AttributePublisher ):
-
-    __implements__ = AttributePublisher.__implements__
-    
-    def __init__( self, folder ):
-        self._folder = folder
-
-
-    def _extractContentInfo( self, item ):
-        info = {}
-        info['id'] = item[0]
-        info['object'] = item[1]
+from Zope.App.OFS.ServiceManager.ServiceManager import ServiceManager
+from Zope.App.OFS.Container.Views.Browser.Contents import Contents
 
-        # XXX:  We will fake this stuff out for now
-        info[ 'title' ] = info[ 'url' ] = item[0]
-        info['icon'] = None
-
-        return info
-
-
-    def removeObjects(self, ids, REQUEST=None):
-        """ """
-        for id in ids:
-            self.remove(id)
-
-        # XXX:  This is horribly broken, but I can't do better until
-        #       we have a way to compute absolute URLs.
-        if REQUEST is not None:
-            # for unit tests
-            REQUEST['RESPONSE'].redirect(REQUEST['URL1'])
-        return self.confirmRemoved()
-    
-
-    def remove( self, name, silent=0 ):
-        """
-            Remove the object stored under 'name', or raise a KeyError
-            if no such object (pass non-zero 'silent' to suppress the
-            exception).
-        """
-        try:
-            self.getContext().delObject( name )
-        except KeyError:
-            if not silent:
-                raise
-        return self.confirmRemoved( name=name )
-
-    def listContentInfo( self ):
-        
-        return map( self._extractContentInfo, self._folder.objectItems() )
+class FolderContents(Contents):
 
     def addServiceManager(self, REQUEST=None):
         """Create a service manager then add it to the folder."""
@@ -77,11 +35,4 @@
         if REQUEST is not None:
             return self.index(REQUEST)
 
-    #
-    #   Make it possible for 'index' to find the folder.
-    #
-    def getContext( self ):
-        return self._folder
-
     index = PageTemplateFile('main.pt')
-    confirmRemoved = PageTemplateFile('remove_confirmed.pt')


=== Zope3/lib/python/Zope/App/OFS/Folder/folder.zcml 1.1.2.4 => 1.1.2.5 ===
                   description="Minimal folder" />
 
-<security:protectClass name="Zope.App.OFS.Folder.FolderContents."
-   permission_id="Zope.View" methods="index" />
-
-<browser:defaultView name="contents"
- for="Zope.App.OFS.Folder.Folder.IFolder."
- factory="Zope.App.OFS.Folder.FolderContents." />
-
-<security:protectClass name="Zope.App.OFS.Folder.FolderAdder."
-   permission_id="Zope.ManageContent" 
-   methods="index, confirmed, action, listAddableInfo" />
-
 <security:protectClass name="Zope.App.OFS.Folder."
    permission_id="Zope.View">
   <security:instances permission_id="Zope.View" />
-  <security:protect interface="Zope.ComponentArchitecture.IServiceManagerContainer." 
-	            permission_id="Zope.ManageServices" />
+  <security:protect
+      interface="Zope.ComponentArchitecture.IServiceManagerContainer." 
+      permission_id="Zope.ManageServices" />
 </security:protectClass>
 
-
 <security:protectClass name="Zope.App.OFS.Folder.FolderContents."
    permission_id="Zope.ManageContent" 
-   methods="index, listContentInfo, remove, removeObjects, confirmRemoved, addServiceManager"/>
-   
+   methods="index, listContentInfo, remove, removeObjects,
+            confirmRemoved, addServiceManager"/>
+
+<security:protectClass name="Zope.App.OFS.Folder.FolderAdder."
+   permission_id="Zope.ManageContent" 
+   methods="index, confirmed, action, listAddableInfo" />
+ 
+<browser:defaultView name="contents"
+ for="Zope.App.OFS.Folder.Folder.IFolder."
+ factory="Zope.App.OFS.Folder.FolderContents." />
+
+<browser:defaultView name="contents"
+ for="Zope.App.OFS.Folder.Folder.IFolder."
+ factory="Zope.App.OFS.Folder.FolderContents." />
 
 
 <browser:view name="adder"

=== Removed File Zope3/lib/python/Zope/App/OFS/Folder/remove_confirmed.pt ===