javaextensions/midppush/pushregistryplugin/inc/pushdbhandler.h
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/midppush/pushregistryplugin/inc/pushdbhandler.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,243 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+#ifndef PUSHDBHANDLER_H
+#define PUSHDBHANDLER_H
+
+#include <memory>
+#include <string>
+#include <set>
+#include <map>
+#include "javastorage.h"
+#include "scopedlocks.h"
+#include "javauid.h"
+#include "pushconstant.h"
+
+namespace java
+{
+namespace push
+{
+
+/**
+ * This class contains alarm information read from the Java Storage.
+ */
+class DbAlarmData
+{
+public:
+
+    /**
+     * @param aUid              UID of the application.
+     * @param aTimeInMilliSecs  Alarm time in milliseconds.
+     * @param aValidateTime     Indicates whether alarm time must be validate. In practice
+     *                          this means check weather alarm has expired.
+     */
+    DbAlarmData(const java::util::Uid& aUid,
+                const long long& aTimeInMilliSecs,bool aValidateTime);
+
+    virtual ~DbAlarmData();
+
+    DbAlarmData(const DbAlarmData&);
+
+    const java::util::Uid& getUid() const;
+
+    long long getTime() const;
+
+    bool validateAlarmTime() const;
+
+    DbAlarmData &operator=(const DbAlarmData&);
+
+private:
+
+    //Datamembers.
+    java::util::Uid mUid;
+    long long mTimeInMilliSecs;
+    bool mValidateTime;
+};
+
+class MidletSuiteData
+{
+public:
+
+    MidletSuiteData(const java::util::Uid& aMidletUid,const std::wstring& aMidletClassName)
+            : mMidletUid(aMidletUid),mMidletClassName(aMidletClassName),mMediaId(UNDEFINED_MEDIA_ID) {}
+
+    virtual ~MidletSuiteData() {}
+
+    MidletSuiteData &operator=(const MidletSuiteData &x)
+    {
+        mMidletUid = x.mMidletUid;
+        mMidletClassName = x.mMidletClassName;
+        mMediaId = x.mMediaId;
+        return *this;
+    }
+
+    MidletSuiteData(const MidletSuiteData& x)
+    {
+        *this = x;
+    }
+
+    java::util::Uid mMidletUid;
+    std::wstring mMidletClassName;
+    int mMediaId;
+};
+
+/**
+ * This class manages reading/writing/deleting data from Java Storage.
+ */
+class PushDBHandler
+{
+public:
+
+    PushDBHandler();
+
+    virtual ~PushDBHandler();
+
+    /**
+     * This operation stores dynamic push connnection into database. This operation assumes
+     * that validation of arguments has been done by user.
+     * @param aUid          UID of the MIDlet.
+     * @param aUri          Push connection URI.
+     * @param aMidletName   Class name of the MIdlet.
+     * @param aFilter       Connection URL indicating which senders are allowed to cause
+       *                      the MIDlet to be launched.
+       * @throws              PushException with following error code:
+       *                      DB_ERROR:
+       *                      Inserting dynamic push connection to the database failed.
+     */
+    void storeDynamicPushRegistration(const java::util::Uid& aUid,
+                                      const std::wstring& aUri,
+                                      const std::wstring& aMidletName,
+                                      const std::wstring& aFilter);
+
+    /**
+     * This operation deletes dynamic push registration from the db.
+     * @param aUid    MIDlet's UID.
+     * @param aUri    Push connection URI.
+     * @throws        PushException with following error code:
+     *                DB_ERROR:
+     *                Deleting push registration failed to the db error.
+     */
+    void unregisterDynamicPushRegistration(const java::util::Uid& aUid,
+                                           const std::wstring& aUri);
+
+    /**
+     * This operation stores MIDlet's wake-up time to the db.
+     * @param aUid              MIDlet's UID.
+     * @param aAlarmInMilliSecs Wake-up time in milliseconds.
+     * @throws                  PushException with following error code:
+     *                          DB_ERROR:
+       *                          Deleting push registration failed to the db error.
+     */
+    void storeAlarm(const java::util::Uid& aUid, const long long& aAlarmInMilliSecs);
+
+    /**
+     * Deletes MIDlet's wake-up time from the db.
+     * @param aUid  MIDlet's UID.
+     * @throws      PushException with following error code:
+     *              DB_ERROR:
+       *              Deleting push registration failed to the db error.
+     */
+    void deleteAlarm(const java::util::Uid& aUid);
+
+    /**
+     * This operation returns push registrations by Uid.
+     * @param aUid        All push registrations are read from the db if value of the uid is empty.
+     *                    Otherwise is returned push registrations by uid.
+     * @param aPushRegs   Output parameter. Contains all push registrations of all MIDlets.
+     *                    Empty list is returned if phone does not have any
+     *                    push registration.
+     * @throws            PushException with following error code:
+     *                    DB_ERROR:
+       *                    Deleting push registration failed to the db error.
+     */
+    void getPushRegs(const java::util::Uid& aUid,
+                     java::storage::JavaStorageApplicationList_t& aPushRegs);
+
+    /**
+     * This operation returns alarm times by Uid.
+     * @param aUid        All alarms are read from the db if value of the uid is empty.
+     *                    Otherwise is returned alarms by uid.
+     * @param aAlarmList  Output parameter. List contains all MIDlets' alarm time and
+     *                    UID. This operation does not do anything if no alarms has been defined
+     *                    to the phone.
+     */
+    void getAlarms(const java::util::Uid& aUid,std::list<DbAlarmData>& aAlarmList);
+
+    /**
+     * This operation returns container which contains <MIDlet suite uid,MIDlet uid> value pairs.
+     * @param aSuiteUid MIDlet suite UID of search condition. This can be also empty. All MIDlet suites
+     *        are returned in that case.
+     * @param aMidletSuiteInfo Output parameter. <MIDlet suite uid,MIDlet uid> value pairs.
+     * @throws            PushException with following error code:
+     *                    DB_ERROR:
+       *                    Retrieving MIDlet Suite info failed.
+     */
+    void getMidletSuiteInfo(const java::util::Uid& aSuiteUid,
+                            std::multimap<java::util::Uid,MidletSuiteData>& aMidletSuiteInfo);
+
+    /**
+     * This operation returns MIDlet Suite info by MIDlet uid.
+     * @param aMidletUid MIDlet UID of search condition.
+     * @param aMidletSuiteInfo Output parameter. <MIDlet suite uid,MIDlet uid> value pairs.
+     * @throws            PushException with following error code:
+     *                    DB_ERROR:
+       *                    Retrieving MIDlet Suite info failed.
+     */
+    void getMidletSuiteInfoByMidletUid(const java::util::Uid& aMidletUid,
+                                       std::multimap<java::util::Uid,MidletSuiteData>& aMidletSuiteInfo);
+
+private:
+
+    //Datamembers.
+    std::auto_ptr<java::storage::JavaStorage> mDbStorage;
+    //java::util::ScopedMutex mMutex;
+
+    //Internal operations.
+    void getMidletSuiteInfo(const java::util::Uid& aUid,
+                            const std::wstring& aSearchColumn,
+                            std::multimap<java::util::Uid,MidletSuiteData>& aMidletSuiteInfo);
+    void addMediaId(java::storage::JavaStorage& aStorageObj,
+                    std::multimap<java::util::Uid,MidletSuiteData>& aMidletSuiteInfo);
+    void getMediaId(java::storage::JavaStorage& aStorageObj,const java::util::Uid& aSuiteUid,
+                    std::map<java::util::Uid,int>& aMediaIdContainer);
+    void fillMidletId(const java::util::Uid& aSuiteUid,
+                      std::map<java::util::Uid,int>& aMediaIdContainer,
+                      java::storage::JavaStorageApplicationList_t& aFoundEntries);
+    void fillAlarmData(std::list<DbAlarmData>& aAlarmList,
+                       java::storage::JavaStorageApplicationList_t& aFoundEntries);
+    void fillMidletSuiteInfo(std::multimap<java::util::Uid,MidletSuiteData>& aMidletSuiteInfo,
+                             java::storage::JavaStorageApplicationList_t& aFoundEntries);
+    bool getDbValueAsUid(java::storage::JavaStorageApplicationList_t::iterator& aIter,
+                         java::storage::JavaStorageEntry& aFindPattern,java::util::Uid& aOutput);
+    bool getDbValueAsLongLong(java::storage::JavaStorageApplicationList_t::iterator& aIter,
+                              java::storage::JavaStorageEntry& aFindPattern,long long& aOutput);
+    bool getDbValueAsInt(java::storage::JavaStorageApplicationList_t::iterator& aIter,
+                         java::storage::JavaStorageEntry& aFindPattern,int& aOutput);
+    bool getDbValueAsWStr(java::storage::JavaStorageApplicationList_t::iterator& aIter,
+                          java::storage::JavaStorageEntry& aFindPattern,std::wstring& aOutput);
+    void openDbStorage();
+
+    //Not implemented.
+    PushDBHandler(const PushDBHandler&);
+    PushDBHandler& operator= (const PushDBHandler&);
+};
+
+}//end namespace push
+}//end namespace java
+
+#endif // PUSHDBHANDLER_H