diff -r 1a2a00e78665 -r f62f87b200ec homescreensrv_plat/servicemodel_api/servicefinder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/servicemodel_api/servicefinder.h Fri Mar 19 09:35:23 2010 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: HsService Finder +* +*/ + + +#ifndef SERVICEFINDER_H +#define SERVICEFINDER_H + +#include +#include "serviceinterfaceid.h" +#include "hsiserviceprovider.h" +#include "servicemodel_global.h" + +class IHsServiceBase; +class HsServiceFinderPrivate; +class HsService; + +/** + * @ingroup group_hsservicemodel group_service_api_candidates + * @brief Helper class to search and create services. + * HsService adapter is the component to find different platform service implementations + * and offer interface to use services. + */ +class HSSERVICEMODEL_EXPORT HsServiceFinder : public QObject +{ + Q_OBJECT + +public: + + /** + * Constructor. + * @since S60 ?S60_version. + * @param aPluginManifestDirectory Directory that contains plugin manifests. + * @param aPluginDirectory Directory that contains plugin binaries. + * @param aParent Parent object. + */ + HsServiceFinder(const QString& aPluginManifestDirectory, + const QString& aPluginDirectory, + QObject* aParent = 0); + + + /** + * Destructor + */ + virtual ~HsServiceFinder(); + +public: + + /** + * Get list of all services in the device implemented according the service architecture. + * @return list of services (empty list if no services in the device). + */ + QList getServiceList(); + + /** + * Get list of all services in the device implemented according the service architecture. + * @param aService for example 'BackupService' + * @return list of matched services (empty list if no services in the device). + * @code + * if (!mServiceFinder) + * { + * mServiceFinder = new HsServiceFinder("c:/hsplugins","c:/hsplugins",this); + * } + * IBackupService* service = 0; + * QList serviceList = mServiceFinder->getServiceList(IBackupService::type().mImplementationId ); + * if ( serviceList.count() ) + * { + * // use first found service + * service = mServiceFinder->getService(IBackupService::type(), serviceList.at(0)); + * } + * + * @endcode + */ + QList getServiceList(const QString &aService); + + /** + * Get service. This method returns the service as a QObject. + * @param aService for example 'HsService.Messaging' + * @param aInterface for example 'IMessaging' + * @return pointer to HsService object. Ownership is NOT transferred to caller. + * @see releaseService + * @code + * if (!mServiceFinder) + * { + * mServiceFinder = new HsServiceFinder("c:/hsplugins","c:/hsplugins",this); + * } + * HsService* servicePtr = mServiceFinder->getService("HsService.Messaging", "IMessaging"); + * @endcode + */ + HsService *getService(const QString &aService, const QString &aInterface); + + /** + * Get service. This method returns the service as an abstract interface. + * @param aInterfaceId service interface identifier + * @param aPluginName which plugin implements this service, if empty, then first found interface is used. + * @return pointer to service interface object. Ownership is NOT transferred to caller. + * + * Example in source code: + * @code + * if (!mServiceFinder) + * { + * mServiceFinder = new HsServiceFinder("c:/hsplugins","c:/hsplugins",this); + * } + * IBackupService* service = 0; + * service = mServiceFinder->getService(IBackupService::type(), "backupservice"); + * if ( service ) + * { + * service->backupPage(); + * } + * @endcode + * where IBackupService is defined in header file: + * @code + * static const HsServiceInterfaceId Identifier= + * { + * 0,"persistanceservice" + * }; + * + * class IBackupService: public IHsServiceBase + * { + * public: + * static inline const HsServiceInterfaceId& type() + * { + * return Identifier; + * } + * public: + * virtual void backupPage() = 0; + * virtual IHsServiceBase* resolveService(const HsServiceInterfaceId& aType) = 0; + * ... other possible API functions + * @endcode + * @see more details in example backupservice implementation, IBackupService, PersistanceService... + */ + template T *getService(const HsServiceInterfaceId &aInterfaceId, const QString &aPluginName) + { + return static_cast(getService(aInterfaceId, aPluginName)); + } + + /** + * Get service. This method returns the service as an abstract interface. + * @param aInterfaceId service interface identifier + * @param aToken which plugin implements this service + * @return pointer to service interface object. Ownership is NOT transferred to caller. + * + * @code + * if (!mServiceFinder) + * { + * mServiceFinder = new HsServiceFinder("c:/hsplugins","c:/hsplugins",this); + * } + * IBackupService* service = 0; + * QList serviceList = mServiceFinder->getServiceList(IBackupService::type().mImplementationId); + * if ( serviceList.count() ) + * { + * // use first found service + * service = mServiceFinder->getService(IBackupService::type(), serviceList.at(0)); + * } + * if ( service ) + * { + * service->backupPage(); + * } + * @endcode + */ + template T *getService(const HsServiceInterfaceId &aInterfaceId, const HsServiceToken &aToken) + { + return static_cast(getService(aInterfaceId, aToken)); + } + + /** + * Get service. This method returns the service as an Base interface of the all services. + * @param aInterfaceId service interface identifier + * @param aPluginName which plugin implements this service + * @return pointer to service interface object. Ownership is NOT transferred to caller. + */ + IHsServiceBase *getService(const HsServiceInterfaceId &aInterfaceId, const QString &aPluginName); + + /** + * Get service. This method returns the service as an Base interface of the all services. + * @param aInterfaceId service interface identifier + * @param aToken which plugin implements this service + * @return pointer to service interface object. Ownership is NOT transferred to caller. + */ + IHsServiceBase *getService(const HsServiceInterfaceId &aInterfaceId, const HsServiceToken &aToken); + + /** + * Release service + * @param aService service to be released and deleted. HsService is QObject based service. + */ + void releaseService(HsService *aService); + + /** + * Cancels asynchronous service requests. + * @param aService QObject based service. + */ + void cancel(HsService *aService); + +private: + + /** + * The private implementation. + */ + HsServiceFinderPrivate *mServiceFinderPrivate; + +}; + +#endif