store registration additionally in client, + IObjectRemovedEvent handler
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1922 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									5f290c0723
								
							
						
					
					
						commit
						94b10e85da
					
				
					 2 changed files with 35 additions and 6 deletions
				
			
		|  | @ -30,6 +30,16 @@ from cybertools.composer.schema.browser.common import BaseView | ||||||
| from cybertools.composer.schema.interfaces import IClientFactory | from cybertools.composer.schema.interfaces import IClientFactory | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class ServiceView(object): | ||||||
|  | 
 | ||||||
|  |     def __init__(self, context, request): | ||||||
|  |         self.context = context | ||||||
|  |         self.request = request | ||||||
|  | 
 | ||||||
|  |     def getRegistrations(self): | ||||||
|  |         return self.context.registrations | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class RegistrationTemplateView(BaseView): | class RegistrationTemplateView(BaseView): | ||||||
| 
 | 
 | ||||||
|     @Lazy |     @Lazy | ||||||
|  |  | ||||||
|  | @ -22,6 +22,7 @@ Service management classes. | ||||||
| $Id$ | $Id$ | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
|  | from time import time | ||||||
| from BTrees.OOBTree import OOBTree | from BTrees.OOBTree import OOBTree | ||||||
| from zope.cachedescriptors.property import Lazy | from zope.cachedescriptors.property import Lazy | ||||||
| from zope.component import adapts | from zope.component import adapts | ||||||
|  | @ -134,6 +135,7 @@ class Registration(object): | ||||||
|     def __init__(self, client, service): |     def __init__(self, client, service): | ||||||
|         self.client = client |         self.client = client | ||||||
|         self.service = service |         self.service = service | ||||||
|  |         self.timeStamp = int(time()) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class RegistrationTemplate(object): | class RegistrationTemplate(object): | ||||||
|  | @ -163,20 +165,37 @@ class ClientRegistrations(object): | ||||||
| 
 | 
 | ||||||
|     template = None |     template = None | ||||||
| 
 | 
 | ||||||
|  |     registrationsAttributeName = '__service_registrations__' | ||||||
|  | 
 | ||||||
|     def __init__(self, context): |     def __init__(self, context): | ||||||
|         self.context = context |         self.context = context | ||||||
| 
 | 
 | ||||||
|     def register(self, services): |     def register(self, services): | ||||||
|         for service in services: |         regs = [service.register(self.context) for service in services] | ||||||
|             service.register(self.context) |         old = getattr(self.context, self.registrationsAttributeName, []) | ||||||
|  |         regs.extend(r for r in old if r.service not in services) | ||||||
|  |         setattr(self.context, self.registrationsAttributeName, regs) | ||||||
| 
 | 
 | ||||||
|     def unregister(self, services): |     def unregister(self, services): | ||||||
|  |         old = getattr(self.context, self.registrationsAttributeName, []) | ||||||
|  |         regs = [r for r in old if r.service not in services] | ||||||
|  |         setattr(self.context, self.registrationsAttributeName, regs) | ||||||
|         for service in services: |         for service in services: | ||||||
|             service.unregister(self.context) |             service.unregister(self.context) | ||||||
| 
 | 
 | ||||||
|     def getRegistrations(self): |     def getRegistrations(self): | ||||||
|         for service in self.template.getServices(): |         return getattr(self.context, self.registrationsAttributeName, []) | ||||||
|             for reg in service.registrations.values(): |         #for service in self.template.getServices(): | ||||||
|                 if self.context == reg.client: |         #    for reg in service.registrations.values(): | ||||||
|                     yield reg |         #        if self.context == reg.client: | ||||||
|  |         #            yield reg | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | # event handlers | ||||||
|  | 
 | ||||||
|  | def clientRemoved(obj, event): | ||||||
|  |     """ Handle removal of a client object. | ||||||
|  |     """ | ||||||
|  |     regs = IClientRegistrations(obj) | ||||||
|  |     for r in regs.getRegistrations(): | ||||||
|  |         r.service.unregister(obj) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm