diff --git a/integrator/browser/__init__.py b/integrator/browser/__init__.py new file mode 100644 index 0000000..38314f3 --- /dev/null +++ b/integrator/browser/__init__.py @@ -0,0 +1,3 @@ +""" +$Id$ +""" diff --git a/integrator/browser/bscw.py b/integrator/browser/bscw.py new file mode 100644 index 0000000..9c36be5 --- /dev/null +++ b/integrator/browser/bscw.py @@ -0,0 +1,67 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +BSCW repository view. + +$Id$ +""" + +from zope.app.pagetemplate import ViewPageTemplateFile +from zope import component +from zope.cachedescriptors.property import Lazy +from zope.traversing.browser import absoluteURL + +from cybertools.integrator.bscw import ContainerFactory +from cybertools.integrator.interfaces import IContainerFactory + + +listing_macros = ViewPageTemplateFile('listing.pt') + + +class BSCWView(object): + + template = listing_macros + + baseUrl = '' + baseId = '' + + def __init__(self, context, request): + self.context = context + self.request = request + + @Lazy + def listing(self): + return self.template.macros['listing'] + + def content(self): + url = self.context.getRepositoryURL() + if isinstance(url, basestring): + server, id = url.rsplit('/', 1) + self.baseUrl = server + else: # already a real server object + server = url + id = self.baseId + id = self.request.form.get('id', id) + factory = component.getUtility(IContainerFactory, name='bscw') + root = factory(id, server=server, baseUrl=self.baseUrl) + return root.values() + + def getUrlForObject(self, obj): + url = absoluteURL(self.context, self.request) + return '%s?id=%s' % (url, obj.internalPath) diff --git a/integrator/browser/listing.pt b/integrator/browser/listing.pt new file mode 100644 index 0000000..cd3dbd1 --- /dev/null +++ b/integrator/browser/listing.pt @@ -0,0 +1,14 @@ + + + +
+ +
+ +
+
+
+
+
+
diff --git a/integrator/bscw.txt b/integrator/bscw.txt index 3e88633..7b76eae 100644 --- a/integrator/bscw.txt +++ b/integrator/bscw.txt @@ -6,6 +6,8 @@ Integration of external sources. ($Id$) + >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown + >>> site = placefulSetUp(True) Accessing Objects on a Remote BSCW Repository ============================================= @@ -76,3 +78,34 @@ Let's also have a look at the item contained in the root object. >>> str(bs_5.externalUrlInfo) 'http://localhost/bscw.cgi/5' + +The BSCW Repository View +======================== + + >>> class BSCWAccess(object): + ... def __init__(self, server): + ... self.server = server + ... def getRepositoryURL(self): + ... return self.server + + >>> site['bscw'] = BSCWAccess(server) + >>> bscwAccess = site['bscw'] + + >>> from cybertools.integrator.browser.bscw import BSCWView + >>> from zope.publisher.browser import TestRequest + >>> view = BSCWView(bscwAccess, TestRequest()) + >>> view.baseUrl = 'http://localhost/bscw.cgi/' + >>> view.baseId = '4' + + >>> view.content() + [<...ReadContainer...>] + + >>> view.getUrlForObject(view.content()[0]) + 'http://127.0.0.1/bscw?id=bs_5' + + +Fin de partie +============= + + >>> placefulTearDown() +