homescreensrv_plat/servicemodel_api/servicefinder.h
changeset 60 f62f87b200ec
--- /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