/*!
@header FTDefaultServiceManagerImpl
@abstract Module of FT
@availability OS X, GNUstep
@copyright 2004, 2005, 2006 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-------------------------------------------------------------------------
Modification history
28.09.05 ola initial version
23.08.06 ola license changed
-------------------------------------------------------------------------
*/
#if !defined(__FTDefaultServiceManagerImpl_H)
#define __FTDefaultServiceManagerImpl_H
#include
#include
#include
#include
/*!
* @class FTDefaultServiceManagerImpl
* @abstract A generic implementation of the service manager protocol
*/
@interface FTDefaultServiceManagerImpl : FTObject {
@private
NSMutableDictionary *serviceIdToServiceLoader;
FTServerImpl *server;
NSLock *rwLock;
}
/*!
* @method initWithServer
* @param aServer underlying server
* @result self
*/
- initWithServer: (FTServerImpl *) aServer;
- (void) dealloc;
/*!
* @method allServicesForGraph
* @abstract This method gives information about the availability of
* services for a particular graph
*/
- (id ) allServicesForGraph: (id ) aGraph;
/*!
* @method allServicesForNode
* @abstract This method gives information about the availability of services
* for a particular node
*/
- (id ) allServicesForNode: (id ) aNode
ofGraph: (id ) aGraph;
/*!
* @method registerServiceWithId
* @abstract This method is used to register a service.
* @discussion The current implementation simply removes older version if newer
* ones are being registered.
* @param serviceId identifier for the service
* @param serviceVersion version of this service
* @param serviceLoader loader of this service
* @throws ECAlreadyExistsException if the service already exists
* (same service-id and version)
* @result self
*/
- registerServiceWithId: (NSString *) serviceId
withVersion: (id ) serviceVersion
withServiceLoader: (id ) serviceLoader;
/*!
* @method rwLock
* @abstract sets a read-write-lock.
* @result self;
*/
- rwLock;
/*!
* @method rwUnlock
* @abstract releases the read-write-lock.
* @result self;
*/
- rwUnlock;
/*!
* @method serviceWithId
* @abstract returns the specified service
* @result the specified service
*/
- (id ) serviceWithId: (NSString *) aServiceId
forGraph: (id ) aGraph;
/*!
* @method serviceWithId
* @abstract returns the specified service
* @result the specified service
*/
- (id ) serviceWithId: (NSString *) aServiceId
forGraph: (id ) aGraph forNode: (id ) aNode;
/*!
* @method switchAllServicesToMode
* @param serviceMode mode to switch to
* @result self
* @abstract Switches all registered services to the specified mode
*/
- switchAllServicesToMode: (ft_serviceMode_t) serviceMode;
/*!
* @method unregisterAllVersionsOfServiceWithId
* @abstract removes all versions of the specified service
* @result self
*/
- unregisterAllVersionsOfServiceWithId: (NSString *) serviceId;
@end
#endif