--- /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 <QObject>
+#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<HsServiceToken> 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<HsServiceToken> serviceList = mServiceFinder->getServiceList(IBackupService::type().mImplementationId );
+ * if ( serviceList.count() )
+ * {
+ * // use first found service
+ * service = mServiceFinder->getService<IBackupService>(IBackupService::type(), serviceList.at(0));
+ * }
+ *
+ * @endcode
+ */
+ QList<HsServiceToken> 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>(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<class T> T *getService(const HsServiceInterfaceId &aInterfaceId, const QString &aPluginName)
+ {
+ return static_cast<T*>(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<HsServiceToken> serviceList = mServiceFinder->getServiceList(IBackupService::type().mImplementationId);
+ * if ( serviceList.count() )
+ * {
+ * // use first found service
+ * service = mServiceFinder->getService<IBackupService>(IBackupService::type(), serviceList.at(0));
+ * }
+ * if ( service )
+ * {
+ * service->backupPage();
+ * }
+ * @endcode
+ */
+ template<class T> T *getService(const HsServiceInterfaceId &aInterfaceId, const HsServiceToken &aToken)
+ {
+ return static_cast<T*>(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