[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS - FolderAdder.py:1.1.2.1

Tres Seaver tseaver@zope.com
Tue, 20 Nov 2001 17:54:45 -0500


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

Added Files:
      Tag: Zope-3x-branch
	FolderAdder.py 
Log Message:
 - Yeehaw!  FolderAdder works!

=== Added File Zope3/lib/python/Zope/App/OFS/FolderAdder.py ===
# 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.
# 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.

"""
    Define adder component for folders.
"""

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.ZMI.Addable import getAddables
from Zope.ComponentArchitecture import createObject, getPresentation

class FolderAdder( AttributePublisher ):

    __implements__ = AttributePublisher.__implements__
    
    def __init__( self, folder ):
        self._folder = folder

    def _extractAdderInfo( self, addable ):
        info = {}
        info['id'] = addable.id
        info[ 'title' ] = addable.title
        info[ 'desc' ] = addable.description

        # XXX:  We will fake this stuff out for now
        info['icon'] = None

        return info

    def listAddableInfo( self ):
        """
            Return a sequence of mappings for the addables for our
            folder.
        """
        return map( self._extractAdderInfo, getAddables( self._folder ) )

    def action( self, id, type_name ):
        """
            Instantiate an object and put it in our folder.
        """
        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.
        return getPresentation( self._folder.getObject( id ),
                 '', IBrowserPublisher ).index()

    #
    #   Make it possible for 'index' to find the folder.
    #
    def getContext( self ):
        return self._folder

    index = PageTemplateFile( 'folder_add.pt'
                            , '%s/www' % os.path.dirname(__file__)
                            )