javaextensions/midppush/javasrc/com/nokia/mj/impl/push/PushUtil.java
changeset 79 2f468c1958d0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/midppush/javasrc/com/nokia/mj/impl/push/PushUtil.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+package com.nokia.mj.impl.push;
+
+import com.nokia.mj.impl.storage.StorageAttribute;
+import com.nokia.mj.impl.storage.StorageEntry;
+import com.nokia.mj.impl.storage.StorageNames;
+import com.nokia.mj.impl.storage.StorageSession;
+import com.nokia.mj.impl.utils.Uid;
+
+/**
+ * Utility methods for handling push registrations.
+ */
+public final class PushUtil
+{
+    /**
+     * Returns push registrations for specified application or
+     * application suite.
+     *
+     * @param aSession StorageSesion to be used for fetching
+     * the push registrations
+     * @param aUid either application or application suite Uid
+     * @return array of push registrations
+     */
+    public static PushRegInfo[] getPushRegs(StorageSession aSession, Uid aUid)
+    {
+        // Find push registrations using application uid.
+        PushRegInfo[] pushRegs = getPushRegsForAppUid(aSession, aUid);
+        if (pushRegs.length > 0)
+        {
+            return pushRegs;
+        }
+
+        // Push registrations not found, so find application uids using
+        // suite uid and then push registrations using application uids.
+        Uid[] appUids = getAppUids(aSession, aUid);
+        PushRegInfo[][] pushRegArray = new PushRegInfo[appUids.length][];
+        int pushRegCount = 0;
+        for (int i = 0; i < appUids.length; i++)
+        {
+            pushRegArray[i] = getPushRegs(aSession, appUids[i]);
+            pushRegCount += pushRegArray[i].length;
+        }
+        pushRegs = new PushRegInfo[pushRegCount];
+        int pushRegsIndex = 0;
+        for (int i = 0; i < pushRegArray.length; i++)
+        {
+            for (int j = 0; j < pushRegArray[i].length; j++)
+            {
+                pushRegs[pushRegsIndex++] = pushRegArray[i][j];
+            }
+        }
+        return pushRegs;
+    }
+
+    /**
+     * Returns push registrations for specified application.
+     *
+     * @param aSession StorageSesion to be used for fetching
+     * the push registrations
+     * @param aUid application Uid
+     * @return array of push registrations
+     */
+    private static PushRegInfo[] getPushRegsForAppUid(StorageSession aSession, Uid aUid)
+    {
+        PushRegInfo[] pushRegs = new PushRegInfo[0];
+        StorageEntry query = new StorageEntry();
+        query.addAttribute(
+            new StorageAttribute(StorageNames.ID, aUid.getStringValue()));
+        StorageEntry[] entries = aSession.search(
+            StorageNames.PUSH_REGISTRATIONS_TABLE, query);
+        if (entries != null && entries.length > 0)
+        {
+            pushRegs = new PushRegInfo[entries.length];
+            for (int i = 0; i < entries.length; i++)
+            {
+                Uid uid = Uid.createUid(
+                    entries[i].getAttribute(StorageNames.ID).getValue());
+                String name = entries[i].getAttribute(StorageNames.NAME).getValue();
+                String url = entries[i].getAttribute(StorageNames.URL).getValue();
+                String filter = entries[i].getAttribute(StorageNames.FILTER).getValue();
+                int regType = Integer.parseInt(
+                    entries[i].getAttribute(StorageNames.REGISTRATION_TYPE).getValue());
+                pushRegs[i] = new PushRegInfo(uid, name, url, filter, regType);
+            }
+        }
+        return pushRegs;
+    }
+
+    /**
+     * Returns application Uids for specified application suite.
+     *
+     * @param aSession StorageSesion to be used for fetching the Uids
+     * @param aSuiteUid application suite Uid
+     * @return array of application Uids
+     */
+    private static Uid[] getAppUids(StorageSession aSession, Uid aUid)
+    {
+        Uid[] uids = new Uid[0];
+        StorageEntry query = new StorageEntry();
+        query.addAttribute(new StorageAttribute(
+                               StorageNames.PACKAGE_ID, aUid.getStringValue()));
+        query.addAttribute(new StorageAttribute(StorageNames.ID, ""));
+        StorageEntry[] entries =
+            aSession.search(StorageNames.APPLICATION_TABLE, query);
+        if (entries != null && entries.length > 0)
+        {
+            uids = new Uid[entries.length];
+            for (int i = 0; i < entries.length; i++)
+            {
+                uids[i] = Uid.createUid(
+                    entries[i].getAttribute(StorageNames.ID).getValue());
+            }
+        }
+        return uids;
+    }
+
+    /**
+     * PushRegInfo contains information of one push registration.
+     */
+    public static final class PushRegInfo
+    {
+        /** Dynamic push registration. */
+        public static final int DYNAMIC = 0;
+        /** Static push registration. */
+        public static final int STATIC = 1;
+
+        /** Application Uid. */
+        private Uid iUid = null;
+        /** Application name. */
+        private String iName = null;
+        /** Push registration URL */
+        private String iUrl = null;
+        /** Filter for incoming messages/connections. */
+        private String iFilter = null;
+        /** Registration type. Either DYNAMIC or STATIC. */
+        private int iRegType = DYNAMIC;
+
+        PushRegInfo(
+            Uid aUid, String aName, String aUrl, String aFilter, int aRegType)
+        {
+            iUid = aUid;
+            iName =  aName;
+            iUrl = aUrl;
+            iFilter = aFilter;
+            iRegType = aRegType;
+        }
+
+        /** Returns application Uid. */
+        public Uid getUid()
+        {
+            return iUid;
+        }
+
+        /** Returns application name. */
+        public String getName()
+        {
+            return iName;
+        }
+
+        /** Returns push registration URL */
+        public String getUrl()
+        {
+            return iUrl;
+        }
+
+        /** Returns filter for incoming messages/connections. */
+        public String getFilter()
+        {
+            return iFilter;
+        }
+
+        /** Returns registration type. Either DYNAMIC or STATIC. */
+        public int getRegType()
+        {
+            return iRegType;
+        }
+    }
+}