ZCML File
configure.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    i18n_domain="z3checkins"
    >
<class
    class=".message.Message"
    >
<require
    permission="zope.View"
    interface=".interfaces.IMessage"
    />
</class>
<class
    class=".message.CheckinMessage"
    >
<require
    permission="zope.View"
    interface=".interfaces.ICheckinMessage"
    />
</class>
<class
    class=".folder.CheckinFolder"
    >
<require
    permission="zope.View"
    interface="zope.app.container.interfaces.IReadContainer"
    />
<require
    permission="zope.ManageContent"
    interface="zope.app.container.interfaces.IWriteContainer"
    />
<require
    permission="zope.ManageContent"
    set_schema=".interfaces.ICheckinFolder"
    />
<require
    permission="zope.View"
    interface=".interfaces.ICheckinFolderSchema"
    />
<require
    permission="zope.View"
    attributes="messages"
    />
<factory
    id="z3checkins.CheckinFolder"
    title="Checkin Folder"
    description="A checkin folder"
    />
</class>
<adapter
    factory=".folder.MessageNameChooser"
    provides="zope.app.container.interfaces.INameChooser"
    for=".interfaces.ICheckinFolder"
    permission="zope.View"
    />
<adapter
    factory=".folder.MessageSized"
    provides="zope.size.interfaces.ISized"
    for=".interfaces.IMessage"
    permission="zope.View"
    />
<utility
    permission="zope.View"
    factory=".message.CheckinMessageParser"
    provides=".interfaces.IMessageParser"
    />
<view
    for="*"
    permission="zope.Public"
    name="rfc822"
    type="zope.publisher.interfaces.http.IHTTPRequest"
    factory=".timeutils.RFCDateTimeFormatter"
    />
<view
    for="*"
    permission="zope.Public"
    name="isodatetime"
    type="zope.publisher.interfaces.http.IHTTPRequest"
    factory=".timeutils.ISODateTimeFormatter"
    />
<browser:addform
    name="CheckinMessage"
    schema="zope.app.file.interfaces.IFile"
    permission="zope.ManageContent"
    class=".browser.MessageUpload"
    label="Upload a checkin message"
    fields="data"
    />
<browser:addMenuItem
    title="Checkin message"
    permission="zope.ManageContent"
    class=".browser.MessageUpload"
    view="CheckinMessage"
    />
<browser:addform
    name="CheckinFolder"
    schema=".interfaces.ICheckinFolderSchema"
    permission="zope.ManageContent"
    label="Create a checkin message folder"
    fields="description archive_url icons"
    content_factory=".folder.CheckinFolder"
    />
<browser:addMenuItem
    title="Checkin Folder"
    permission="zope.ManageContent"
    class=".folder.CheckinFolder"
    view="CheckinFolder"
    />
<browser:view
    class="zope.app.container.browser.adding.Adding"
    permission="zope.ManageContent"
    for=".interfaces.ICheckinFolder"
    name="+"
    menu="zmi_actions"
    title="Add"
    >
<page
    name="index.html"
    attribute="index"
    />
<page
    name="action.html"
    attribute="action"
    />
</browser:view>
<browser:editform
    name="EditFolder"
    schema=".interfaces.ICheckinFolderSchema"
    permission="zope.ManageContent"
    label="Change properties of a checkin message folder"
    menu="zmi_views"
    title="Edit properties"
    />
<browser:page
    class=".browser.MessageRSSView"
    for=".interfaces.IMessage"
    permission="zope.View"
    name="rss"
    attribute="index"
    />
<browser:page
    class=".browser.MessageView"
    for=".interfaces.IMessage"
    permission="zope.View"
    name="html"
    template="message_part.pt"
    />
<browser:page
    class=".browser.MessageView"
    for=".interfaces.IMessage"
    permission="zope.View"
    name="html-sidebar"
    template="message_sidebar.pt"
    />
<browser:page
    class=".browser.MessageView"
    for=".interfaces.IMessage"
    permission="zope.View"
    name="index.html"
    template="message.pt"
    />
<browser:page
    class=".browser.MessageView"
    for=".interfaces.IMessage"
    permission="zope.View"
    name="index.txt"
    attribute="body_plain"
    />
<browser:page
    class=".browser.MessageRSSView"
    for=".interfaces.ICheckinMessage"
    permission="zope.View"
    name="rss"
    attribute="index"
    />
<browser:page
    class=".browser.CheckinMessageView"
    for=".interfaces.ICheckinMessage"
    permission="zope.View"
    name="html"
    template="message_part.pt"
    />
<browser:page
    class=".browser.CheckinMessageView"
    for=".interfaces.ICheckinMessage"
    permission="zope.View"
    name="html-sidebar"
    template="message_sidebar.pt"
    />
<browser:page
    class=".browser.CheckinMessageView"
    for=".interfaces.ICheckinMessage"
    permission="zope.View"
    name="index.html"
    template="message.pt"
    menu="zmi_views"
    title="Preview"
    />
<browser:page
    for=".interfaces.IBookmark"
    permission="zope.View"
    name="html"
    template="bookmark.pt"
    />
<browser:containerViews
    for=".interfaces.ICheckinFolder"
    contents="zope.ManageContent"
    />
<browser:page
    class=".browser.ContainerView"
    for=".interfaces.ICheckinFolder"
    permission="zope.View"
    name="checkins.rss"
    template="rss_container.pt"
    />
<browser:page
    class=".browser.ContainerView"
    for=".interfaces.ICheckinFolder"
    permission="zope.View"
    name="index.html"
    template="container.pt"
    menu="zmi_views"
    title="View"
    />
<browser:page
    class=".browser.ContainerView"
    for=".interfaces.ICheckinFolder"
    permission="zope.View"
    name="checkins-sidebar.html"
    template="container_sidebar.pt"
    />
<browser:resource
    name="message.png"
    file="message.png"
    />
<browser:resource
    name="zope3.png"
    file="zope3.png"
    />
<browser:resource
    name="product.png"
    file="product.png"
    />
<browser:resource
    name="branch.png"
    file="branch.png"
    />
</configure>