[Zope3-checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser - AddModule.py:1.1.2.1 AddServiceConfiguration.py:1.1.2.1 Adding.py:1.1.2.1 ComponentAdding.py:1.1.2.1 EditConfiguration.py:1.1.2.1 EditModule.py:1.1.2.1 PackagesContents.py:1.1.2.1 ServiceConfigEdit.pt:1.1.2.1 ServiceConfigEditPart.pt:1.1.2.1 ServiceConfigSummary.pt:1.1.2.1 ServiceConfigURL.py:1.1.2.1 Services.pt:1.1.2.1 Services.py:1.1.2.1 __init__.py:1.1.2.1 add_module.pt:1.1.2.1 add_service_1.pt:1.1.2.1 add_service_2.pt:1.1.2.1 configure.zcml:1.1.2.1 editConfiguration.pt:1.1.2.1 edit_module.pt:1.1.2.1 packages_contents.pt:1.1.2.1
Jim Fulton
jim@zope.com
Sat, 30 Nov 2002 07:44:31 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser
In directory cvs.zope.org:/tmp/cvs-serv30047/lib/python/Zope/App/OFS/Services/ServiceManager/Browser
Added Files:
Tag: Zope3-Bangalore-TTW-Branch
AddModule.py AddServiceConfiguration.py Adding.py
ComponentAdding.py EditConfiguration.py EditModule.py
PackagesContents.py ServiceConfigEdit.pt
ServiceConfigEditPart.pt ServiceConfigSummary.pt
ServiceConfigURL.py Services.pt Services.py __init__.py
add_module.pt add_service_1.pt add_service_2.pt configure.zcml
editConfiguration.pt edit_module.pt packages_contents.pt
Log Message:
Refactored the way TTW component registration is done. There are now
separate registry objects that abstract the machinery for registering
multiple conflicting configurations and deciding which, if any are
active. Also provided a new field and widget for the status
information.
Along the way, cleaned up and streamlined placeful testing
infrastructure a bit.
Now checking into branch. Will give file-by-file (or at least more
specific logs) when the changes are merged into the head.
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/AddModule.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""Handle form to create module
$Id: AddModule.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.App.OFS.Services.ServiceManager.Module import Manager
class AddModule(BrowserView):
def action(self, name, source):
mgr = Manager()
mgr = self.context.add(mgr)
mgr.new(name, source)
self.request.response.redirect(self.context.nextURL())
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/AddServiceConfiguration.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: AddServiceConfiguration.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
__metaclass__ = type
from Zope.ComponentArchitecture import getServiceManager
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.App.OFS.Services.ServiceManager.ServiceConfiguration \
import ServiceConfiguration
from Zope.App.OFS.Services.ConfigurationInterfaces import IConfiguration
from Zope.App.Forms.Utility import setUpWidgets, getWidgetsDataForContent
class AddServiceConfiguration(BrowserView):
def __init__(self, *args):
super(AddServiceConfiguration, self).__init__(*args)
setUpWidgets(self, IConfiguration)
def services(self):
service = getServiceManager(self.context.context)
definitions = service.getServiceDefinitions()
names = [name for (name, interface) in definitions]
names.sort()
return names
def components(self):
service_type = self.request['service_type']
service = getServiceManager(self.context.context)
type = service.getInterfaceFor(service_type)
paths = [info['path']
for info in service.queryComponent(type=type)
]
paths.sort()
return paths
def action(self, service_type, component_path):
sd = ServiceConfiguration(service_type, component_path)
sd = self.context.add(sd)
getWidgetsDataForContent(self, IConfiguration, sd)
self.request.response.redirect(self.context.nextURL())
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/Adding.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""Adding components for components and configuration
$Id: Adding.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.App.OFS.Container.Views.Browser.Adding import Adding as ContentAdding
class ComponentAdding(ContentAdding):
"""Adding component for components
"""
menu_id = "add_component"
def action(self, type_name, id):
if not id:
# Generate an id from the type name
id = type_name
if id in self.context:
i=2
while ("%s-%s" % (id, i)) in self.context:
i=i+1
id = "%s-%s" % (id, i)
return super(ComponentAdding, self).action(type_name, id)
class ConfigurationAdding(ContentAdding):
"""Adding component for configuration
"""
menu_id = "add_configuration"
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/ComponentAdding.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""
$Id: ComponentAdding.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.App.OFS.Container.Views.Browser.Adding import Adding
from Zope.App.OFS.Services.ServiceManager.IServiceAdding import IServiceAdding
class ServiceAdding(Adding):
__implements__ = IServiceAdding
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/EditConfiguration.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""
$Id: EditConfiguration.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.ComponentArchitecture import getView, getAdapter
from Zope.Proxy.ContextWrapper import ContextWrapper
from Zope.App.OFS.Container.IZopeContainer import IZopeContainer
class EditConfiguration(BrowserView):
"""Adding component for service containers
"""
menu_id = "add_component"
def __init__(self, context, request):
self.request = request
self.context = context
def action(self):
"""Perform actions depending on user input.
"""
if 'keys' in self.request:
k = self.request['keys']
if 'add_submit' in self.request:
self.request.response.redirect('+')
elif 'remove_submit' in self.request:
self.remove_objects(k)
elif 'top_submit' in self.request:
self.context.arrange_object(k[0], 'top')
elif 'bottom_submit' in self.request:
self.context.arrange_object(k[0],'bottom')
elif 'up_submit' in self.request:
self.context.arrange_object(k[0],'up')
elif 'down_submit' in self.request:
self.context.arrange_object(k[0],'down')
return ''
def remove_objects(self, key_list):
"""Remove the directives from the container.
"""
container = getAdapter(self.context, IZopeContainer)
for item in key_list:
del container[item]
def configInfo(self):
"""Render View for each direcitves.
"""
r = []
for name, directive in self.context.items():
d = ContextWrapper(directive, self.context, name = name)
view = getView(d, 'ItemEdit', self.request)
view.setPrefix('config'+str(name))
r.append({'key': name, 'view': view})
return r
__doc__ = EditConfiguration.__doc__ + __doc__
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/EditModule.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""Handle form to edit module
$Id: EditModule.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.App.OFS.Services.ServiceManager.Module import Manager
class EditModule(BrowserView):
def update(self):
if "source" in self.request:
self.context.update(self.request["source"])
return u"The source was updated."
else:
return u""
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/PackagesContents.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""
Revision information: $Id: PackagesContents.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.App.OFS.Container.Views.Browser.Contents import Contents
from Zope.App.OFS.Services.ServiceManager.IServiceManager \
import IServiceManager
from Zope.App.OFS.Services.ServiceManager.Package import Package
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.App.PageTemplate import ViewPageTemplateFile
from Zope.App.OFS.Container.IContainer import IContainer
from Zope.ComponentArchitecture import queryView, getView
class PackagesContents(Contents):
__used_for__ = IServiceManager
index = ViewPageTemplateFile('packages_contents.pt')
def addPackage(self, name):
self.context.setObject(name, Package())
self.request.response.redirect('.')
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/ServiceConfigEdit.pt ===
<html metal:use-macro="views/standard_macros/page">
<body>
<div metal:fill-slot="body">
<div metal:use-macro="view/generated_form/macros/body">
<table metal:fill-slot="extra_info">
<tr>
<td>Service type</td>
<td tal:content="context/serviceType">Foo</td>
</tr>
<tr>
<td>Component Path</td>
<td tal:content="context/componentPath">
<a href='.'
tal:attributes="href view/componentURL"
tal:content="context/componentPath">foo/bar</a>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/ServiceConfigEditPart.pt ===
<div metal:use-macro="view/generated_form/macros/formbody">
<table metal:fill-slot="extra_info">
<tr>
<td>Service type</td>
<td tal:content="context/serviceType">Foo</td>
</tr>
<tr>
<td>Component Path</td>
<td>
<a href="."
tal:content="context/componentPath"
tal:define="service context/getService"
tal:attributes="href service/@@absolute_url"
>Foo</a>
</td>
</tr>
</table>
</div>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/ServiceConfigSummary.pt ===
<span tal:replace="context/title" />
<a href='.'
tal:attributes="href view/componentURL"
tal:content="context/componentPath">foo/bar</a>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/ServiceConfigURL.py ===
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""
$Id: ServiceConfigURL.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.ComponentArchitecture import getView
from Zope.App.Traversing import traverse
__metaclass__ = type
class ServiceConfigURL:
"""Describe C objects
"""
def componentURL(self):
ob = traverse(self.context, self.context.componentPath)
return str(getView(ob, 'absolute_url', self.request))
__doc__ = ServiceConfigURL.__doc__ + __doc__
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/Services.pt ===
<html metal:use-macro="views/standard_macros/page">
<body metal:fill-slot="body" tal:define="services view/update">
<h2>Services configured in this service manager.</h2>
<p tal:condition="not:services">
No services have been configured
</p>
<div tal:condition="services">
<p>For each service, the service name is given and all of the
components registered to provide the service are shown. You
map select the component to provide the service or disable the
service.
</p>
<p>Select a service name or a component name to visit the service
or component. </p>
<form action="." method="post"
tal:attributes="action request/URL">
<table width="100%">
<tr tal:repeat="service services">
<td valign="top" align="right">
<a href="Roles"
tal:content="service/name"
tal:attributes="href service/name"
tal:condition="service/active"
>Roles</a>
<span tal:replace="service/name"
tal:condition="service/inactive" />
</td>
<td tal:content="structure service/view">
</td>
</tr>
</table>
<input type=submit name="submit_update" value="Update"><br>
</form>
</div>
<p>To configure a service, add a service component to a
<em>package</em> in <a href="Packages">Packages</a> or to
the <a href="Packages/default">default package</a>. After the
component is added, add a service configuration that configures the
component to provide a service.
</p>
</body>
</html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/Services.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
"""
$Id: Services.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.ComponentArchitecture import getView
class Services(BrowserView):
def update(self):
service_types = list(self.context.getBoundServiceTypes())
service_types.sort()
services = []
for service_type in service_types:
registry = self.context.queryConfigurations(service_type)
view = getView(registry, "ChangeConfigurations", self.request)
view.setPrefix(service_type)
view.update()
active = registry.active() is not None
services.append(
{"name": service_type,
"active": active,
"inactive": not active,
"view": view,
})
return services
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/__init__.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# 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.
#
##############################################################################
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/add_module.pt ===
<html metal:use-macro="views/standard_macros/page">
<head><title>Add a module</title></head>
<body>
<div metal:fill-slot="body">
<p>Enter the absolute module name and source code.</p>
<form action="action.html">
<input name="name">
<textarea name="source:text" cols="65" rows="25"></textarea>
<input type="submit" value="Add module"/>
</form>
</div></body></html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/add_service_1.pt ===
<html metal:use-macro="views/standard_macros/page">
<head><title>Add a service component</title></head>
<body>
<div metal:fill-slot="body">
<form action="step2.html">
<table>
<tr>
<td>Service Type</td>
<td>
<select name="service_type">
<option tal:repeat="service view/services"
tal:attributes="value service"
tal:content="service">service</option>
</select>
</td>
</tr>
<tr>
<td>Title</td>
<td tal:content="structure view/title"><input type="text"></td>
</tr>
<tr>
<td>Description</td>
<td tal:content="structure view/description"><textarea></textarea></td>
</tr>
</table>
<input type=submit value="Next"/>
</form>
</div></body></html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/add_service_2.pt ===
<html metal:use-macro="views/standard_macros/page">
<head><title>Contact Information</title></head>
<body>
<div metal:fill-slot="body">
<form action="finish.html" method="post">
<input type="hidden" name="service_type" value=""
tal:attributes="value request/service_type" />
<table>
<tr>
<td>Service Type</td>
<td tal:content="request/service_type">Roles</td>
</tr>
<tr>
<td>Component</td>
<td><select name="component_path">
<option tal:repeat="path view/components"
tal:attributes="value path"
tal:content="path">path</option>
</select>
</td>
</tr>
<tr>
<td>Status</td>
<td tal:content="structure view/status"><input type="text"></td>
</tr>
<tr>
<td>Title</td>
<td tal:content="structure view/title"><input type="text"></td>
</tr>
<tr>
<td>Description</td>
<td tal:content="structure view/description"><textarea></textarea></td>
</tr>
</table>
<input type="submit" />
</form>
</div></body></html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/configure.zcml ===
<zope:zopeConfigure
xmlns:zope='http://namespaces.zope.org/zope'
xmlns='http://namespaces.zope.org/browser'
xmlns:form="http://namespaces.zope.org/form"
package="Zope.App.OFS.Services.ServiceManager"
>
<!-- ServiceManager -->
<defaultView
for=".IServiceManager."
name="index.html"
/>
<view
for=".IServiceManager."
name="index.html"
template="Browser/Services.pt"
class=".Browser.Services."
permission="Zope.ManageServices"
/>
<menuItems menu="zmi_views" for=".IServiceManager.">
<menuItem title="Services"
action="@@index.html"/>
<menuItem title="Packages"
action="Packages/@@SelectedManagementView.html"/>
<menuItem title="Default Package"
action="Packages/default/@@SelectedManagementView.html"/>
</menuItems>
<!-- Packages -->
<defaultView for=".IPackages." name="contents.html" />
<view
for=".IPackages."
permission="Zope.ManageServices"
factory=".Browser.PackagesContents.">
<page name="contents.html"
attribute="index"
/>
<page name="addPackage.html"
attribute="addPackage"
/>
<page name="removeObjects.html"
attribute="removeObjects"
/>
</view>
<menuItems menu="zmi_views" for=".IPackages.">
<menuItem title="Services"
action="@@contents.html"/>
</menuItems>
<defaultView for=".IPackage." name="contents.html" />
<!-- Package -->
<view
for=".IPackage."
permission="Zope.ManageServices"
factory="Zope.App.OFS.Container.Views.Browser.Contents."
>
<page name="contents.html" attribute="contents" />
<page name="removeObjects.html" attribute="removeObjects" />
</view>
<menuItems menu="zmi_views" for=".IPackage.">
<menuItem title="Services"
action="@@contents.html"/>
</menuItems>
<menu id="add_component"
title="Menu of objects to be added to service managers"
/>
<view
name="+"
permission="Zope.ManageServices"
for=".IPackage."
factory=".Browser.Adding.ComponentAdding">
<page name="index.html" attribute="index" />
<page name="action.html" attribute="action" />
</view>
<!-- ConfigurationManager -->
<defaultView
for=".IConfigurationManager."
name="contents.html"
/>
<view
for=".IConfigurationManager."
permission="Zope.ManageServices"
factory=".Browser.EditConfiguration.">
<page name="contents.html" template="Browser/editConfiguration.pt" />
</view>
<menuItems menu="zmi_views" for=".IConfigurationManager.">
<menuItem title="Configuration" action="contents.html" />
</menuItems>
<view
for=".IConfigurationManager."
name="+"
permission="Zope.ManageServices"
factory=".Browser.Adding.ConfigurationAdding">
<page name="index.html" attribute="index" />
<page name="action.html" attribute="action" />
</view>
<menuItem menu="add_component"
for="Zope.App.OFS.Container.IAdding."
action="Zope.App.OFS.Services.ServiceManager.ConfigurationManager"
title="Configuration"
/>
<menu id="add_configuration"
title="Menu of addable configuration objects"
/>
<!-- ServiceConfiguration -->
<defaultView
for=".IServiceConfiguration."
name="index.html"
/>
<menuItems menu="zmi_views" for=".IServiceConfiguration.">
<menuItem title="Edit"
action="index.html"/>
</menuItems>
<form:edit
for = ".IServiceConfiguration."
name = "index.html"
schema = "Zope.App.OFS.Services.ConfigurationInterfaces.IConfiguration."
label = "Service Configuration"
permission = "Zope.ManageServices"
template = "Browser/ServiceConfigEdit.pt"
/>
<form:edit
for = ".IServiceConfiguration."
name = "ItemEdit"
schema =
"Zope.App.OFS.Services.ConfigurationInterfaces.IConfigurationSummary."
label = "Service Configuration"
template = "Browser/ServiceConfigEditPart.pt"
class = ".Browser.ServiceConfigURL."
permission = "Zope.ManageServices"
/>
<view
for = ".IServiceConfiguration."
name = "ConfigurationSummary"
template = "Browser/ServiceConfigSummary.pt"
class = ".Browser.ServiceConfigURL."
permission="Zope.ManageServices"
/>
<view
for="Zope.App.OFS.Container.IAdding."
name="ServiceConfiguration"
factory=".Browser.AddServiceConfiguration."
permission="Zope.ManageServices"
>
<page name="step1.html" template="Browser/add_service_1.pt" />
<page name="step2.html" template="Browser/add_service_2.pt" />
<page name="finish.html" attribute="action" />
</view>
<menuItem
for="Zope.App.OFS.Container.IAdding."
menu="add_configuration"
action="ServiceConfiguration"
title="Service"
/>
<!-- Persistent Modules -->
<view for="Persistence.IPersistentModuleManager."
factory=".Browser.EditModule."
>
<page name="edit.html" template="Views/Browser/edit_module.pt" />
</view>
<menuItems menu="zmi_views" for="Persistence.IPersistentModuleManager.">
<menuItem title="Edit" action="edit.html" />
</menuItems>
<view for="Zope.App.OFS.Container.IAdding."
name="Module"
factory=".Browser.AddModule."
>
<page name="index.html" template="Views/Browser/add_module.pt" />
<page name="action.html" attribute="action" />
</view>
<menuItem menu="add_component" for="Zope.App.OFS.Container.IAdding."
action="Module" title="Module" />
</zope:zopeConfigure>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/editConfiguration.pt ===
<html metal:use-macro="views/standard_macros/page">
<head>
<title>View Service Configuration</title>
</head>
<body>
<div metal:fill-slot="body">
<form action="."
tal:define="info view/action"
tal:attributes="action request/URL">
<table align=center width=100% cellspacing=0 cellpadding=0>
<tr tal:repeat="config view/configInfo">
<td valign=top>
<input type=checkbox name='keys:list'
value='2'
tal:attributes="value config/key"/>
</td>
<td>
<table border=1 width=100%>
<tr><td tal:content="structure config/view">
Edit Adapter Directives
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td></td>
<td>
<input type=submit name='refresh_submit' value="Refresh">
<input type=submit name='update_submit' value="Update">
<input type=submit name='add_submit' value="Add">
<input type=submit name='remove_submit' value="Remove">
<input type=submit name='top_submit' value="Top">
<input type=submit name='up_submit' value="Up">
<input type=submit name='down_submit' value="Down">
<input type=submit name='bottom_submit' value="Bottom">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/edit_module.pt ===
<html metal:use-macro="views/standard_macros/page">
<head><title>Add a module</title></head>
<body>
<div metal:fill-slot="body">
<p>Enter the absolute module name and source code.</p>
<form action="edit.html">
<span tal:replace="view/update"></span>
<p>Module: <span tal:content="context/name">Module Name</span></p>
<textarea name="source:text" cols="65" rows="25"
tal:content="context/source"
></textarea>
<input type="submit" value="Edit"/>
</form>
</div></body></html>
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/packages_contents.pt ===
<html metal:use-macro="views/standard_macros/page">
<head>
<style metal:fill-slot="headers" type="text/css">
</style>
</head>
<body>
<div metal:fill-slot="body">
<form action="." method="get"
tal:define="container_contents view/listContentInfo"
>
<p>Package Contents</p>
<div metal:use-macro="view/contentsMacros/macros/contents_table" />
<br />
<input type="text" name="name" />
<input type="submit" name="@@addPackage.html:method" value="Add"
i18nXXX:attributes="value string:menu_add_button" />
<input type="submit" name="@@removeObjects.html:method" value="Delete"
i18nXXX:attributes="value string:menu_delete_button" />
</form>
</div>
</body>
</html>