Revision: v2.2.11
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 20:20:40 +0300
changeset 69 773449708c84
parent 61 bf7ee68962da
child 76 4ad59aaee882
Revision: v2.2.11 Kit: 201035
build/loc/resources.jar
build/makefile.javaversion
build/symbian_uids.pri
inc/build_defines.hrh
inc/java.txt
javacommons/comms/ipclib/clientserver/src.s60/creceiver.cpp
javacommons/comms/ipclib/clientserver/src.s60/creceiver.h
javacommons/comms/ipclib/clientserver/src.s60/ipcclient.cpp
javacommons/fileutils/src.s60/filesystemutils.cpp
javacommons/fileutils/src/fileutilities.cpp
javacommons/gcfprotocols/http/build/javahttp.pro
javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp
javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp
javacommons/gcfprotocols/socket/socket/javasrc.s60/com/nokia/mj/impl/gcf/protocol/socket/Protocol.java
javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/PushValidatorImpl.java
javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java
javacommons/javastorage/javasrc/com/nokia/mj/impl/storage/StorageSessionImpl.java
javacommons/javastorage/tsrc/java_api/javasrc/com/nokia/mj/impl/storage/TestStorageAttribute.java
javacommons/security/data/att_untrusted.txt
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModule.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java
javacommons/security/javaunicertstoreplugin/build/bld.inf
javacommons/security/javaunicertstoreplugin/build/javaunicertstoreplugin.mmp
javacommons/security/javaunicertstoreplugin/build/javaunicertstoreplugin.pro
javacommons/security/javaunicertstoreplugin/src.s60/confirmquery.cpp
javacommons/security/javaunicertstoreplugin/src.s60/confirmquery.h
javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp
javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.h
javacommons/security/security.pro
javacommons/security/src/midpauthenticationmoduleimpl.cpp
javacommons/security/src/utils/storagehandler.cpp
javacommons/security/subsystem.mk
javacommons/security/tsrc/data/ext1/ext1.odc
javacommons/security/tsrc/data/ext2/ext2.odc
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/InteractiveAccessControllerTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/TestPermissionMappingTable.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityDescriptorAttributesTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorageTests.java
javacommons/utils/javasrc/com/nokia/mj/impl/rt/SystemPropertyUtils.java
javacommons/utils/src.s60/properties.cpp
javacommons/utils/src/logger.cpp
javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java
javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java
javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/PushValidatorImpl.java
javaextensions/datagram/datagram/src.s60/apnsettings.cpp
javaextensions/datagram/datagram/src/nativedatagramconnection.cpp
javaextensions/iapinfo/build/javaiapinfo.pro
javaextensions/iapinfo/inc.s60/iapinfosession.h
javaextensions/iapinfo/inc.s60/javacommdb.h
javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/CommsTable.java
javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfo.java
javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfoImpl.java
javaextensions/iapinfo/src.s60/iapinfosession.cpp
javaextensions/iapinfo/src.s60/javacommdb.cpp
javaextensions/pim/cntadapter/src.s60/cpimcontactitemadapter.cpp
javaextensions/satsa/build/javasatsa.pro
javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp
javaextensions/satsa/pki/src.s60/cstscredentialmanager.h
javaextensions/sensor/src.s60/cnetworkfieldintensitysensor.cpp
javaextensions/sensor/src.s60/csensorbase.cpp
javamanager/javacaptain/build/javacaptain.pro
javamanager/javacaptain/inc.s60/pmc.h
javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/AddSecurityData.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/AuthenticateJar.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/GrantJarPermissions.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java
javamanager/javainstaller/installer/src.s60/utils/sysutil.cpp
javamanager/javainstaller/installer/tsrc/testdata/installerengine/HelloWorld_3_midlets.jad
javamanager/javaqtrequest/src.s60/requestapp.cpp
javamanager/javasettings_qt/build/javaapplicationsettingsview.pro
javaruntimes/jvmargmodifier/file/build/javajvmargsmodifierfile.pro
javaruntimes/jvmargmodifier/file/src/jvmargsmodifier.cpp
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/utils/CmdLineArgsPermission.java
javatools/javacontrolpanel/controlpanel/javasrc/com/nokia/mj/impl/rt/javacontrolpanel/ApplicationUtilsImpl.java
javatools/tckrunner/runner/javasrc/com/nokia/mj/impl/rt/tckrunner/ApplicationUtilsImpl.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/TextExtension.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java
javauis/lcdui_qt/src/javax/microedition/lcdui/GaugeLayouter.java
javauis/lcdui_qt/src/javax/microedition/lcdui/ItemLayouter.java
Binary file build/loc/resources.jar has changed
--- a/build/makefile.javaversion	Wed Aug 18 09:43:15 2010 +0300
+++ b/build/makefile.javaversion	Thu Sep 02 20:20:40 2010 +0300
@@ -1,2 +1,2 @@
 # Set Java version (must be dot separated, without spaces)
-JAVA_VERSION = 2.2.9
+JAVA_VERSION = 2.2.11
--- a/build/symbian_uids.pri	Wed Aug 18 09:43:15 2010 +0300
+++ b/build/symbian_uids.pri	Thu Sep 02 20:20:40 2010 +0300
@@ -123,6 +123,7 @@
 contains(TARGET, javacaptain_ext_autostarter): TARGET.UID3 = 0x2002EA7E
 contains(TARGET, javacontrolpanel): TARGET.UID3 = 0x2002FF62
 contains(TARGET, eswtqtwebkit): TARGET.UID3 = 0x2002FFA9
+contains(TARGET, javaopengles): TARGET.UID3 = 0x20031DD1
 
 isEmpty(TARGET.UID3): error($${TEMPLATE} $${TARGET} : UID3 not defined. Please allocate UID3 and configure it either on $${TARGET}.pro file or in command symbian_uids.pri)
 
--- a/inc/build_defines.hrh	Wed Aug 18 09:43:15 2010 +0300
+++ b/inc/build_defines.hrh	Thu Sep 02 20:20:40 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-#define RD_JAVA_VERSION 2,2,9 
+#define RD_JAVA_VERSION 2,2,11 
 #define RD_JAVA_SYMBIAN_TARGET 
 #define RD_JAVA_S60_RELEASE_10_1 
 #define RD_JAVA_S60_RELEASE_10_1_ONWARDS 
--- a/inc/java.txt	Wed Aug 18 09:43:15 2010 +0300
+++ b/inc/java.txt	Thu Sep 02 20:20:40 2010 +0300
@@ -1,1 +1,1 @@
-2.2.9
+2.2.11
--- a/javacommons/comms/ipclib/clientserver/src.s60/creceiver.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/comms/ipclib/clientserver/src.s60/creceiver.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -33,8 +33,20 @@
 CReceiver::CReceiver(IpcClient& aParent, IpcListener& aListener, RComms& aSession)
         : CActive(EPriorityStandard), mParent(aParent), mListener(aListener), mSession(aSession)
 {
+}
+
+CReceiver* CReceiver::NewLC(IpcClient& aParent, IpcListener& aListener, RComms& aSession)
+{
+    CReceiver* self = new(ELeave) CReceiver(aParent, aListener, aSession);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+}
+
+void CReceiver::ConstructL()
+{
     CActiveScheduler::Add(this);
-    mBuffer.Create(DEFAULT_BUFFER_SIZE);
+    mBuffer.CreateL(DEFAULT_BUFFER_SIZE);
 }
 
 CReceiver::~CReceiver()
--- a/javacommons/comms/ipclib/clientserver/src.s60/creceiver.h	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/comms/ipclib/clientserver/src.s60/creceiver.h	Thu Sep 02 20:20:40 2010 +0300
@@ -31,12 +31,16 @@
 
 NONSHARABLE_CLASS(CReceiver): public CActive
 {
+    CReceiver(IpcClient& aParent, IpcListener& aListener, RComms& aSession);
 public:
-    CReceiver(IpcClient& aParent, IpcListener& aListener, RComms& aSession);
+    static CReceiver* NewLC(IpcClient& aParent, IpcListener& aListener, RComms& aSession);
+
     ~CReceiver();
     void Receive();
 
 private:
+    void ConstructL();
+
     virtual void RunL();
     virtual void DoCancel();
     virtual TInt RunError(TInt aError);
--- a/javacommons/comms/ipclib/clientserver/src.s60/ipcclient.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/comms/ipclib/clientserver/src.s60/ipcclient.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -176,8 +176,7 @@
     User::LeaveIfError(mComms.Connect(serverName->Des()));
     LOG1(EJavaComms, EInfo, "IpcClient connected to %s", address.str().c_str());
 
-    mReceiver = new(ELeave) CReceiver(*this, *mListener, mComms);
-    CleanupStack::PushL(mReceiver);
+    mReceiver = CReceiver::NewLC(*this, *mListener, mComms);
     mReceiver->Receive();
 
     CActiveScheduler::Add(this);
--- a/javacommons/fileutils/src.s60/filesystemutils.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/fileutils/src.s60/filesystemutils.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -25,6 +25,7 @@
 #include "s60filesystemutilities.h"
 #include "javasymbianoslayer.h"
 
+#define BUF_LEN 255
 using namespace std;
 using namespace java::util;
 using namespace java::fileutils;
@@ -94,8 +95,9 @@
 OS_EXPORT std::wstring FileUtilities::listRoots()
 {
     JELOG2(EJavaFile);
-    TDesC16 aDes(S60FileSystemUtilities::GetSupportedDrives());
-    std::wstring retString((wchar_t*)aDes.Ptr());
+    TBuf<BUF_LEN> buf;
+    buf.Copy(S60FileSystemUtilities::GetSupportedDrives());    
+    std::wstring retString((wchar_t*)buf.Ptr());
     return retString;
 }
 
--- a/javacommons/fileutils/src/fileutilities.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/fileutils/src/fileutilities.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -323,7 +323,8 @@
         char *dirName = JavaCommonUtils::wstringToUtf8(path);
         if (ableToOpen)
         {
-            if (!opendir(dirName))
+            DIR* wDirHandle = opendir(dirName);
+            if (!wDirHandle)
             {
                 ableToOpen = false;
                 if (mkdir(dirName,0666)<0)
@@ -334,6 +335,7 @@
                     return -1;
                 }
             }
+            closedir(wDirHandle); 
         }
         else
         {
--- a/javacommons/gcfprotocols/http/build/javahttp.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/http/build/javahttp.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -18,6 +18,7 @@
 TARGET=javahttp
 TEMPLATE=lib
 CONFIG += omj java stl
+CONFIG -= qt
 
 symbian {
 
--- a/javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -244,35 +244,36 @@
     } // end of else
 
     LOG1(ESOCKET,EInfo,"apnerr = %d",*apnerr);
+    LOG(ESOCKET,EInfo,"now no re prompting");
 
     // This is special case when that IAP/SNAP is not found
     // Override the http stack's feaute of using device default
-    if (*apnerr < 0)
-    {
-        LOG(ESOCKET,EInfo,"ECommDbDialogPrefPrompt set for the http session");
-        int ret = iSocketServ.Connect();
-        ret = iConnection.Open(iSocketServ);
-#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
-        TConnPrefList prefList;
-        TExtendedConnPref prefs;
-        prefs.SetConnSelectionDialog(ETrue);
-        prefList.AppendL(&prefs);
-        ret = iConnection.Start(prefList);
-        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using extended connection prefernce - error case ");
-#else
-        TCommDbConnPref pref;
-        pref.SetDialogPreference(ECommDbDialogPrefPrompt);
-        ret = iConnection.Start(pref);
-        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using commdb con pref - error case ");
-#endif
-
-        RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
-        connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
-                                  HTTP::EHttpSocketServ, RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));
-        TInt connPtr = REINTERPRET_CAST(TInt, &iConnection);
-        connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
-                                  HTTP::EHttpSocketConnection, RHTTPSession::GetTable()), THTTPHdrVal(connPtr));
-    }
+//    if (*apnerr < 0)
+//    {
+//        LOG(ESOCKET,EInfo,"ECommDbDialogPrefPrompt set for the http session");
+//        int ret = iSocketServ.Connect();
+//        ret = iConnection.Open(iSocketServ);
+//#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+//        TConnPrefList prefList;
+//        TExtendedConnPref prefs;
+//        prefs.SetConnSelectionDialog(ETrue);
+//        prefList.AppendL(&prefs);
+//        ret = iConnection.Start(prefList);
+//        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using extended connection prefernce - error case ");
+//#else
+//        TCommDbConnPref pref;
+//        pref.SetDialogPreference(ECommDbDialogPrefPrompt);
+//        ret = iConnection.Start(pref);
+//        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using commdb con pref - error case ");
+//#endif
+//
+//        RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
+//        connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
+//                                  HTTP::EHttpSocketServ, RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));
+//        TInt connPtr = REINTERPRET_CAST(TInt, &iConnection);
+//        connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
+//                                  HTTP::EHttpSocketConnection, RHTTPSession::GetTable()), THTTPHdrVal(connPtr));
+//    }
 
     //Add proxy support
     TRAP_IGNORE(LoadProxyLibraryL(aAPNId));
--- a/javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -20,7 +20,7 @@
 #include <centralrepository.h>
 
 #ifdef RD_JAVA_S60_RELEASE_10_1_ONWARDS
-#include <cuseragent.h>
+#include <CUserAgent.h>
 #else
 #include <cuseragent.h>
 #endif
--- a/javacommons/gcfprotocols/socket/socket/javasrc.s60/com/nokia/mj/impl/gcf/protocol/socket/Protocol.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/javasrc.s60/com/nokia/mj/impl/gcf/protocol/socket/Protocol.java	Thu Sep 02 20:20:40 2010 +0300
@@ -151,7 +151,7 @@
             Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                        "socket - protocol class : server connection");
             ApplicationUtils appUtils = ApplicationUtils.getInstance();
-            SocketPermissionImpl per = new SocketPermissionImpl("socket://");
+            SocketPermissionImpl per = new SocketPermissionImpl(SocketPermissionImpl.SERVER_TARGET);
             appUtils.checkPermission(per);
             /* security related stuff */
             Logger.LOG(Logger.ESOCKET, Logger.EInfo,
@@ -168,7 +168,7 @@
                 throw new IllegalArgumentException("Invalid URL: " + fullurl);
             }
             ApplicationUtils appUtils = ApplicationUtils.getInstance();
-            SocketPermissionImpl per = new SocketPermissionImpl("socket://*");
+            SocketPermissionImpl per = new SocketPermissionImpl(SocketPermissionImpl.CLIENT_TARGET);
             appUtils.checkPermission(per);
             /* security related stuff */
             Logger.LOG(Logger.ESOCKET, Logger.EInfo,
--- a/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/PushValidatorImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/PushValidatorImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -127,7 +127,7 @@
         Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                    "socket - push validator : before security check");
         ApplicationUtils appUtils = ApplicationUtils.getInstance();
-        SocketPermissionImpl per = new SocketPermissionImpl("socket://");
+        SocketPermissionImpl per = new SocketPermissionImpl(SocketPermissionImpl.SERVER_TARGET);
         appUtils.checkPermission(per);
         /* security check */
         Logger.LOG(Logger.ESOCKET, Logger.EInfo,
--- a/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -25,6 +25,13 @@
 
 public class SocketPermissionImpl extends PermissionBase
 {
+    /**
+     * Constants for identifying the target/uri of connection: client or server
+     */
+     static String CLIENT_TARGET = "socket://*";
+     static String SERVER_TARGET = "socket://";
+
+     private String iTarget;
 
     /**
      * Returns the question (as localized text) associated with the security
@@ -36,6 +43,7 @@
     public SocketPermissionImpl(String uri)
     {
         super(uri);
+        iTarget = uri;
     }
 
     public String getSecurityPromptQuestion(int aInteractionMode)
@@ -55,6 +63,10 @@
 
     public String toString()
     {
+        if (SERVER_TARGET.equals(iTarget))
+        {
+            return "javax.microedition.io.Connector.serversocket";
+        }
         return "javax.microedition.io.Connector.socket";
     }
 
@@ -62,7 +74,12 @@
     {
         if (p instanceof SocketPermissionImpl)
         {
-            return true;
+            SocketPermissionImpl o = (SocketPermissionImpl)p;
+            if ((iTarget != null && iTarget.equals(o.getTarget()))
+                || (iTarget == null && o.getTarget() == null))
+            {
+                return true;
+            }
         }
         return false;
     }
@@ -87,4 +104,8 @@
         return null;
     }
 
+    String getTarget()
+    {
+        return iTarget;
+    }
 }
\ No newline at end of file
--- a/javacommons/javastorage/javasrc/com/nokia/mj/impl/storage/StorageSessionImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/javastorage/javasrc/com/nokia/mj/impl/storage/StorageSessionImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -297,7 +297,7 @@
      */
     private void ensureNonEmpty(Uid aUid) throws StorageException
     {
-        if (aUid == null || aUid.equals(""))
+        if (aUid == null || aUid.toString().equals(""))
         {
             Logger.ELOG(Logger.EJavaStorage, "Invalid argument");
             throw new StorageException("Invalid argument");
--- a/javacommons/javastorage/tsrc/java_api/javasrc/com/nokia/mj/impl/storage/TestStorageAttribute.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/javastorage/tsrc/java_api/javasrc/com/nokia/mj/impl/storage/TestStorageAttribute.java	Thu Sep 02 20:20:40 2010 +0300
@@ -136,10 +136,10 @@
      * 2. Test with Name and Value.
      * 3. Test Name null throws StorageException
      * 4. Test Name "" throws StorageException
-     * 5. Test value null. Type is not set SE thrown.
+     * 5. Test value null. It is allowed value.
      * 6. Test value "".
      * 7. Test one len name and value.
-     * 8. Test value null, type STRING throws StorageException.
+     * 8. Test value null, type STRING is allowed.
      */
     public void testNameValueConstructor()
     {
@@ -195,11 +195,10 @@
             String name = "AttrName";
             String value = null;
             sa = new StorageAttribute(name, value);
-            assertTrue("No exp when value Null", false);
         }
         catch (StorageException se)
         {
-            // PASSED
+            assertTrue("SE thrown when null value: " + se.toString(), false);
         }
         catch (Throwable t)
         {
@@ -246,11 +245,10 @@
             String name = "A";
             String value = null;
             sa = new StorageAttribute(name, value);
-            assertTrue("No exp thrown when null value, string type", false);
         }
         catch (StorageException se)
         {
-            // PASSED
+            assertTrue("SE thrown when null value: " + se.toString(), false);
         }
         catch (Throwable t)
         {
--- a/javacommons/security/data/att_untrusted.txt	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/data/att_untrusted.txt	Thu Sep 02 20:20:40 2010 +0300
@@ -2,5 +2,4 @@
 grant user "Net Access" oneshot,no {
     permission javax.microedition.io.HttpProtocolPermission "http://*";
     permission javax.microedition.io.HttpsProtocolPermission "https://*";
-    permission javax.microedition.io.Connector.rtsp "*";
 }
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Thu Sep 02 20:20:40 2010 +0300
@@ -58,6 +58,9 @@
      * different aplications being installed
      */
     private Hashtable iBlanketPermissionsDetails = new Hashtable();
+    
+    private static final int NOT_FOUND = -2;
+    private static final int REMOVED = -1;
 
     /**
      * Creates an instance of the PermissionGranter
@@ -171,23 +174,22 @@
      *                             SecurityAttributes.addManifestAttributes())
      */
     public void grantJarPermissions(
-        StorageSession storageSession,
         Uid msUID,
         Uid oldMSUID,
-        PermissionAttribute[] requestedPermissions)
+        PermissionAttribute[] requestedPermissions,
+        AuthenticationCredentials[] authCredentials)
     {
-        if (storageSession == null
-                || msUID == null)
+        if (msUID == null)
         {
             return;
         }
 
-        // take the domain from storage
-        SecurityStorage storage = new SecurityStorage(storageSession);
-        String protectionDomainName = storage.readProtectionDomain(msUID);
         // filter the already granted permissions
+        String protectionDomainName = authCredentials[0].getProtectionDomainName();
         Object o = iGrantedPermissions.remove(
-                       msUID.getStringValue() + protectionDomainName);
+            msUID.getStringValue()
+            + protectionDomainName);
+
         Vector preGrantedPermissions = null;
         if (o != null)
         {
@@ -215,10 +217,15 @@
                 }
             }
         }
-        storage.writeGrantedPermissions(
-            msUID,
-            oldMSUID,
-            resolvedPermissions);
+        // in case of update preserve the settings of the "old" suite
+        if (oldMSUID != null)
+        {
+            updateGrantedPermissions(
+                msUID,
+                oldMSUID,
+                resolvedPermissions);
+        }
+        
         // update the cache with the full set of permissions
         iGrantedPermissions.put(msUID.getStringValue() + protectionDomainName,
                                 resolvedPermissions);
@@ -240,7 +247,6 @@
      *                             the MIDlet suite.
      */
     public void grantJarPermissions(
-        StorageSession storageSession,
         Uid uid,
         Uid oldUid,
         ProtectionDomain protectionDomain)
@@ -265,15 +271,17 @@
                                          protectionDomain.getName(),
                                          securityAttributes.getPermissionAttributes(),
                                          true /* add the assigned permissions */);
-
-        // store the permissions
-        SecurityStorage storage = new SecurityStorage(storageSession);
-        storage.writeGrantedPermissions(
-            uid,
-            oldUid,
-            resolvedPermissions);
+        // in case of update preserve the settings
+        if (oldUid != null)
+        {
+            updateGrantedPermissions(
+                uid,
+                oldUid,
+                resolvedPermissions);
+        }
+        
         // update the cache with the full set of permissions
-        iGrantedPermissions.put(uid.getStringValue() + protectionDomain,
+        iGrantedPermissions.put(uid.getStringValue() + protectionDomain.getName(),
                                 resolvedPermissions);
         Logger.logGrantedPermissions(resolvedPermissions);
     }
@@ -315,7 +323,7 @@
             String key = (String)e.nextElement();
             if (key.startsWith(msUidKey))
             {
-                grantedPermissions = (Vector)iGrantedPermissions.remove(key);
+                grantedPermissions = (Vector)iGrantedPermissions.get(key);
                 if (key.endsWith("UnidentifiedThirdParty"))
                 {
                     // if the suite is not signed, there is no blanket
@@ -360,7 +368,7 @@
                     ((PolicyBasedPermission)grantedPermissions.elementAt(i));
                 UserSecuritySettings settings =
                     permission.getUserSecuritySettings();
-                if (permission.getType() != PolicyBasedPermission.USER_TYPE 
+                if (permission.getType() != PolicyBasedPermission.USER_TYPE
                     || settings == null)
                 {
                     // not a user permission -> move on to the next permission
@@ -458,24 +466,24 @@
             if (permissions_from_sensitive_combination_list_1
                     && permissions_from_sensitive_combination_list_2)
             {
-                /*String blanketPermissionsDetails = ( 
+                /*String blanketPermissionsDetails = (
                     ((call_control == true && multimedia == true)
-                    || (call_control == true && read_user_data == true) 
+                    || (call_control == true && read_user_data == true)
                     || (net_access == true && multimedia == true)
                     || (net_access == true && read_user_data == true)
                     || (messaging == true && multimedia == true)
-                    || (messaging == true && read_user_data == true)) ? 
-                    "settings_inst_query_perm_net" : 
+                    || (messaging == true && read_user_data == true)) ?
+                    "settings_inst_query_perm_net" :
                     "settings_inst_query_perm_sec");*/
 
-                Id blanketPermissionsDetails = ( 
+                Id blanketPermissionsDetails = (
                     ((call_control == true && multimedia == true)
-                    || (call_control == true && read_user_data == true) 
+                    || (call_control == true && read_user_data == true)
                     || (net_access == true && multimedia == true)
                     || (net_access == true && read_user_data == true)
                     || (messaging == true && multimedia == true)
-                    || (messaging == true && read_user_data == true)) ? 
-                    new Id("settings_inst_query_perm_net", "N/A") : 
+                    || (messaging == true && read_user_data == true)) ?
+                    new Id("settings_inst_query_perm_net", "N/A") :
                     new Id("settings_inst_query_perm_sec", "N/A"));
 
                 iBlanketPermissionsDetails.put(msUidKey,
@@ -532,6 +540,8 @@
         storage.writeUserSecuritySettings(msUID,
                                           UserSecuritySettings.BLANKET_INTERACTION_MODE,
                                           true /* blanket prompt shown */);
+        // cleanup the cache as well
+        cleanup(msUID);
     }
 
     /**
@@ -544,7 +554,7 @@
         iGrantedPermissions.clear();
         iBlanketPermissionsDetails.clear();
     }
-
+    
     /**
      * Removes all the security data related to a certain MIDlet suite
      *
@@ -559,6 +569,25 @@
         SecurityStorage storage = new SecurityStorage(storageSession);
         storage.removeGrantedPermissions(msUID);
         // clear the cache
+        cleanup(msUID);
+    }
+
+    /**
+     * Writes to storage all the security data related to a certain MIDlet suite
+     *
+     * @param sessionID the JavaStorage session to be used when
+     *                  writing the security data into storage
+     * @param msUID     the UID if the MIDlet suite whose security data is
+     *                  being written
+     */
+    public void addSecurityData(StorageSession storageSession, Uid msUID, Uid oldMsUID)
+    {
+        Logger.log("Write granted permissions to storage");
+        if (storageSession == null || msUID == null)
+        {
+            return;
+        }
+        SecurityStorage storage = new SecurityStorage(storageSession);
         String msUidKey = msUID.getStringValue();
         for (Enumeration e = iGrantedPermissions.keys() ;
                 e.hasMoreElements() ;)
@@ -566,11 +595,13 @@
             String key = (String)e.nextElement();
             if (key.startsWith(msUidKey))
             {
-                iGrantedPermissions.remove(key);
-                break;
+                storage.writeGrantedPermissions(
+                    msUID,
+                    oldMsUID,
+                    (Vector)iGrantedPermissions.remove(key));
+                return;
             }
         }
-        iBlanketPermissionsDetails.remove(msUidKey);
     }
 
     private Vector resolvePermissions(Uid msUID,
@@ -599,8 +630,8 @@
                 for (int i=0; i<policyPermissions.length; i++)
                 {
                     if (policyPermissions[i].getType()
-                            == PolicyBasedPermission.ASSIGNED_TYPE 
-                            || policyPermissions[i].getType() 
+                            == PolicyBasedPermission.ASSIGNED_TYPE
+                            || policyPermissions[i].getType()
                             == PolicyBasedPermission.USER_ASSIGNED_TYPE)
                     {
                         PolicyBasedPermissionImpl p1 = new PolicyBasedPermissionImpl(
@@ -641,4 +672,130 @@
         return resolvePermissions(msUID, protectionDomainName,
                                   requestedPermissions, true /* add assigned permissions */);
     }
+    
+    private void cleanup(Uid msUID)
+    {
+        // clear the cache
+        String msUidKey = msUID.getStringValue();
+        for (Enumeration e = iGrantedPermissions.keys() ;
+                e.hasMoreElements() ;)
+        {
+            String key = (String)e.nextElement();
+            if (key.startsWith(msUidKey))
+            {
+                iGrantedPermissions.remove(key);
+                break;
+            }
+        }
+        iBlanketPermissionsDetails.remove(msUidKey);
+    }
+    
+    private void updateGrantedPermissions(Uid newAppUID, Uid oldAppUID, Vector grantedPermissions)
+    {
+        // the vector containing the newGrantedPermissions
+        Vector newGrantedPermissions = new Vector();
+
+        // get the old permissions & settings
+        SecurityStorage storage = new SecurityStorage();
+        Vector oldPermissions = storage.readGrantedPermissions(oldAppUID);
+        storage.close();
+
+        // filter out the the brand new permissions
+        // (permissions which are not found among the old permissions)
+        if (oldPermissions != null)
+        {
+            int index=0;
+            while (index < grantedPermissions.size())
+            {
+                // instead of calling Vector.removeElement(p) we will do the
+                // remove manually, since the search is to be based on
+                // the permission without the settings
+                PolicyBasedPermission p = (PolicyBasedPermission)
+                                          grantedPermissions.elementAt(index);
+                int status = removeElement(oldPermissions, p);
+                switch (status)
+                {
+                case REMOVED:
+                case NOT_FOUND:
+                    index++;
+                    break;
+                default:
+                    // different settings
+                    UserSecuritySettings oldSettings
+                    = ((PolicyBasedPermission)oldPermissions
+                       .elementAt(status)).getUserSecuritySettings();
+                    UserSecuritySettings newSettings
+                    = p.getUserSecuritySettings();
+                    if (oldSettings != null
+                            && newSettings != null)
+                    {
+                        boolean activeSettings = false;
+                        if (oldSettings.isActive() 
+                            || newSettings.isActive())
+                        {
+                            activeSettings = true;
+                        }
+                        newGrantedPermissions.addElement(
+                            new PolicyBasedPermissionImpl(
+                                p.getName(),
+                                p.getTarget(),
+                                p.getActionList(),
+                                p.getType(),
+                                new UserSecuritySettingsImpl(
+                                    newSettings.getName(),
+                                    oldSettings.getCurrentInteractionMode(),
+                                    newSettings.getAllowedInteractionModes(),
+                                    oldSettings.getBlanketPrompt(),
+                                    activeSettings)));
+                    }
+                    else
+                    {
+                        newGrantedPermissions.addElement(p);
+                    }
+                    grantedPermissions.removeElementAt(index);
+                    break;
+                }
+            }
+        }
+        // write what's left from the granted permissions
+        for (int i=0; i<newGrantedPermissions.size(); i++)
+        {
+            grantedPermissions.addElement(newGrantedPermissions.elementAt(i));
+        }
+    }
+    
+    private int removeElement(Vector elements, PolicyBasedPermission element)
+    {
+        PolicyBasedPermissionImpl p1 = new PolicyBasedPermissionImpl(
+            element.getName(),
+            element.getTarget(),
+            element.getActionList(),
+            null);
+        for (int i=0; i<elements.size(); i++)
+        {
+            PolicyBasedPermission tmp = (PolicyBasedPermission)elements
+                                        .elementAt(i);
+            PolicyBasedPermissionImpl p2 = new PolicyBasedPermissionImpl(
+                tmp.getName(),
+                tmp.getTarget(),
+                tmp.getActionList(),
+                null);
+            if (p1.equals(p2))
+            {
+                UserSecuritySettings s1 = element.getUserSecuritySettings();
+                UserSecuritySettings s2 = tmp.getUserSecuritySettings();
+                if ((s1 == null && s2 == null)
+                        || (s1 != null
+                            && s2 != null
+                            && s1.equals(s2)))
+                {
+                    // identical permissions
+                    elements.removeElementAt(i);
+                    return REMOVED;
+                }
+                return i;
+            }
+        }
+        return NOT_FOUND;
+    }
 }
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModule.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModule.java	Thu Sep 02 20:20:40 2010 +0300
@@ -266,14 +266,14 @@
      *                       (if applicable)
      * @param appJARPath     the path to the JAR being authenticated
      */
-    public void authenticateJar(
-        StorageSession storageSession,
+    public AuthenticationCredentials[] authenticateJar(
         Uid msUID,
         Uid oldMSUID,
         String appJARPath,
         boolean drmContent)
     {
         AuthenticationStorageData data = null;
+        Credentials selectedCredentials = null;
         try
         {
             Vector allAuthCredentials = (Vector)iAuthCredentials.get(msUID);
@@ -307,15 +307,15 @@
                     null /*validatedChainIndexes*/,
                     null /* jarPath*/,
                     iSecurityWarningsMode);
+                selectedCredentials = new Credentials(
+                    data.getProtectionDomain(),
+                    data.getProtectionDomainCategory(),
+                    jarHash,
+                    null /* root hash */,
+                    -1 /* validated chain index*/,
+                    null /* signing cert */);
                 verifyUpdate(
-                    new Credentials[] {new Credentials(
-                                           data.getProtectionDomain(),
-                                           data.getProtectionDomainCategory(),
-                                           jarHash,
-                                           null /* root hash */,
-                                           -1 /* validated chain index*/,
-                                           null /* signing cert */)
-                                      },
+                    new Credentials[] {selectedCredentials},
                     oldMSUID);
             }
             else
@@ -328,7 +328,7 @@
                 String jarHashValue = null;
                 String rootHashValue = null;
                 Vector validatedChainIndexes = new Vector();
-                Credentials selectedCredentials = selectCredentials(jarHash, allAuthCredentials, validatedChainIndexes);
+                selectedCredentials = selectCredentials(jarHash, allAuthCredentials, validatedChainIndexes);
                 if (selectedCredentials == null
                         || selectedCredentials.getProtectionDomainName() == null)
                 {
@@ -378,8 +378,6 @@
                     validatedChainIndexes,
                     iSecurityWarningsMode);
             }
-
-            writeAuthenticationStorageData(storageSession, msUID, data, (oldMSUID != null && oldMSUID.equals(msUID)));
         }
         finally
         {
@@ -389,17 +387,18 @@
                 iSelectedAuthCredentials.put(msUID, data);
             }
         }
+        return new AuthenticationCredentials[] {selectedCredentials};
     }
 
     /**
      */
-    public void authenticateJar(
-        StorageSession storageSession,
+    public AuthenticationCredentials[] authenticateJar(
         Uid uid,
         Uid oldUid,
         ProtectionDomain protectionDomain,
         String appJARPath)
     {
+        Credentials selectedCredentials = null;
         if (protectionDomain == null
                 || (!protectionDomain.equals(ProtectionDomain.getManufacturerDomain())
                     && !protectionDomain.equals(ProtectionDomain.getOperatorDomain())
@@ -438,18 +437,20 @@
             null /*validatedChainIndexes*/,
             null /* jarPath*/,
             iSecurityWarningsMode);
+        selectedCredentials = new Credentials(
+            data.getProtectionDomain(),
+            data.getProtectionDomainCategory(),
+            jarHash,
+            null /* root hash */,
+            -1 /* validated chain index*/,
+            null /* signing cert */);
         verifyUpdate(
-            new Credentials[] {new Credentials(
-                                   data.getProtectionDomain(),
-                                   data.getProtectionDomainCategory(),
-                                   jarHash,
-                                   null /* root hash */,
-                                   -1 /* validated chain index*/,
-                                   null /* signing cert */)
-                              },
+            new Credentials[] {selectedCredentials},
             oldUid);
 
-        writeAuthenticationStorageData(storageSession, uid, data, (oldUid != null && oldUid.equals(uid)));
+        iSelectedAuthCredentials.put(uid, data);
+
+        return new AuthenticationCredentials[] {selectedCredentials};
     }
 
     /**
@@ -581,6 +582,24 @@
     }
 
     /**
+     * Writes to storage all the security data related to a certain MIDlet suite
+     *
+     * @param sessionID the JavaStorage session to be used when
+     *                  writing the security data into storage
+     * @param msUID     the UID if the MIDlet suite whose security data is
+     *                  being written
+     */
+    public void addSecurityData(StorageSession storageSession, Uid msUID, Uid oldMsUID)
+    {
+        Logger.log("Write authentication data to storage");
+        AuthenticationStorageData authStorageData =
+            (AuthenticationStorageData)iSelectedAuthCredentials.remove(
+                msUID);
+        writeAuthenticationStorageData(storageSession, msUID, authStorageData,
+            (oldMsUID != null && oldMsUID.equals(msUID)));
+    }
+
+    /**
      * Returns the details of the certificates used for authenticating a
      * MIDlet suite. This method is used at installation time.
      *
@@ -661,31 +680,20 @@
      * @param aMediaId        the identifier of the media where the MIDlet
      *                        suite is installed
      */
-    public void setMediaId(StorageSession aStorageSession, Uid aMsUid, int aMediaId)
+    public void setMediaId(Uid aMsUid, int aMediaId)
     {
         // store the jar hash only if the suite was installed on a non-protected media
         if (isDriveProtected(aMediaId))
         {
-            SecurityStorage storage = new SecurityStorage(aStorageSession);
-            try
+            AuthenticationStorageData authStorageData =
+                (AuthenticationStorageData)iSelectedAuthCredentials.get(
+                    aMsUid);
+            if (authStorageData != null)
             {
-                AuthenticationStorageData authStorageData =
-                    (AuthenticationStorageData)iSelectedAuthCredentials.get(
-                        aMsUid);
-                if (authStorageData != null)
-                {
-                    Logger.log("Suite installed on protected media -> the runtime tamper detection is disabled");
-                    authStorageData.setJarHashValue(null);
-                    storage.writeAuthenticationStorageData(aMsUid,
-                                                           authStorageData,
-                                                           true /* this is an update */);
-                }
+                Logger.log("Suite installed on protected media -> the runtime tamper detection is disabled");
+                authStorageData.setJarHashValue(null);
+                iSelectedAuthCredentials.put(aMsUid, authStorageData);
             }
-            finally
-            {
-                iSelectedAuthCredentials.remove(aMsUid);
-            }
-
         }
     }
 
@@ -833,13 +841,13 @@
                 && authStorageData.getJarHashValue().length() > 0)
         {
             Logger.log("  Doing tamper detection");
-            String computedJarHash = null;            
+            String computedJarHash = null;
             try
             {
                 computedJarHash = _computeHash(authStorageData.getJarPath());
-            }catch(AuthenticationException e) 
+            }catch(AuthenticationException e)
             {
-                if (e.getErrorCode() 
+                if (e.getErrorCode()
                     == AuthenticationException.JAR_NOT_FOUND)
                 {
                     Logger.logWarning("    Jar not found while trying to compute hash");
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java	Thu Sep 02 20:20:40 2010 +0300
@@ -203,7 +203,7 @@
                     // add new settings
                     newPermissionInstancesAndSettings.addElement(
                         new PermisionInstanceAndSettings(
-                            p.getPermissionInstance(), 
+                            p.getPermissionInstance(),
                             p.getType(),
                             newSettings));
                 }
@@ -678,11 +678,15 @@
                     // permission and the policy permission
                     String target = legacyPermission.getTarget();
                     if (target != null
-                            && target.indexOf("*") == -1
-                            && !target.equals(policyPermissions[i].getTarget()))
+                        && !("*".equals(policyPermissions[i].getTarget()))
+                        && !target.equals(policyPermissions[i].getTarget()))
                     {
                         continue;
                     }
+                    if (target == null)
+                    {
+                        target = policyPermissions[i].getTarget();
+                    }
                     // choose the action
                     String actionList = legacyPermission.getActionList();
                     if (actionList == null)
@@ -690,7 +694,7 @@
                         resolvedPermissions.addElement(
                             new PolicyBasedPermissionImpl(
                                 policyPermissions[i].getName(),
-                                policyPermissions[i].getTarget(),
+                                target,
                                 policyPermissions[i].getActionList(),
                                 policyPermissions[i].getUserSecuritySettings()));
                     }
@@ -702,7 +706,7 @@
                             resolvedPermissions.addElement(
                                 new PolicyBasedPermissionImpl(
                                     policyPermissions[i].getName(),
-                                    policyPermissions[i].getTarget(),
+                                    target,
                                     actionList,
                                     policyPermissions[i].getUserSecuritySettings()));
                         }
@@ -735,7 +739,7 @@
         {
             return settings;
         }
-        
+
         public int getType()
         {
             return type;
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java	Thu Sep 02 20:20:40 2010 +0300
@@ -58,7 +58,7 @@
                 "com.nokia.mj.impl.gcf.protocol.datagram.DatagramPermissionImpl", "datagram://"));
         PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.Connector.comm", new MIDPPermission(
-                "com.nokia.mj.impl.gcf.protocol.comm.CommPermissionImpl", "comm://*"));
+                "com.nokia.mj.impl.gcf.protocol.comm.CommPermissionImpl", "comm:*"));
         PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.PushRegistry", new MIDPPermission(
                 "com.nokia.mj.impl.gcf.PushRegistryPermissionImpl", "*"));
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Thu Sep 02 20:20:40 2010 +0300
@@ -102,9 +102,6 @@
     public static final int AUTHENTICATION_JAR_HASH_QUERY = 8;
     public static final int AUTHENTICATION_VALID_CERTS_QUERY = 16;
 
-    private static final int NOT_FOUND = -2;
-    private static final int REMOVED = -1;
-
     /**
      * Constructor
      */
@@ -435,10 +432,11 @@
         {
             if (oldAppUID != null)
             {
-                updateGrantedPermissions(
-                    appUID,
-                    oldAppUID,
-                    grantedPermissions);
+                // remove granted permissions
+                removeGrantedPermissions(appUID);
+                
+                // write granted permissions
+                writeGrantedPermissions(appUID, null, grantedPermissions);
                 return;
             }
             // put all the function group names into a vector and use it
@@ -1246,146 +1244,6 @@
             {/* move on with defaults */}
     }
 
-
-    private void updateGrantedPermissions(Uid newAppUID, Uid oldAppUID, Vector grantedPermissions)
-    {
-        // the vector containing the newGrantedPermissions
-        Vector newGrantedPermissions = new Vector();
-
-        // get the old permissions & settings
-        Vector oldPermissions = readGrantedPermissions(oldAppUID);
-
-        // filter out the the brand new permissions
-        // (permissions which are not found among the old permissions)
-        if (oldPermissions != null)
-        {
-            int index=0;
-            while (index < grantedPermissions.size())
-            {
-                // instead of calling Vector.removeElement(p) we will do the
-                // remove manually, since the search is to be based on
-                // the permission without the settings
-                PolicyBasedPermission p = (PolicyBasedPermission)
-                                          grantedPermissions.elementAt(index);
-                int status = removeElement(oldPermissions, p);
-                switch (status)
-                {
-                case NOT_FOUND:
-                    index++;
-                    break;
-                case REMOVED:
-                    grantedPermissions.removeElementAt(index);
-                    break;
-                default:
-                    // different settings
-                    UserSecuritySettings oldSettings
-                    = ((PolicyBasedPermission)oldPermissions
-                       .elementAt(status)).getUserSecuritySettings();
-                    UserSecuritySettings newSettings
-                    = p.getUserSecuritySettings();
-                    if (oldSettings != null
-                            && newSettings != null)
-                    {
-                        boolean activeSettings = false;
-                        if (oldSettings.isActive() 
-                            || newSettings.isActive())
-                        {
-                            activeSettings = true;
-                        }
-                        newGrantedPermissions.addElement(
-                            new PolicyBasedPermissionImpl(
-                                p.getName(),
-                                p.getTarget(),
-                                p.getActionList(),
-                                p.getType(),
-                                new UserSecuritySettingsImpl(
-                                    newSettings.getName(),
-                                    oldSettings.getCurrentInteractionMode(),
-                                    newSettings.getAllowedInteractionModes(),
-                                    oldSettings.getBlanketPrompt(),
-                                    activeSettings)));
-                    }
-                    else
-                    {
-                        newGrantedPermissions.addElement(p);
-                    }
-                    grantedPermissions.removeElementAt(index);
-                    break;
-                }
-            }
-        }
-        // write what's left from the granted permissions
-        writeGrantedPermissions(newAppUID, null, grantedPermissions, true /* preserveSettings */);
-        for (int i=0; i<newGrantedPermissions.size(); i++)
-        {
-            grantedPermissions.addElement(newGrantedPermissions.elementAt(i));
-        }
-
-        // remove what's left from the old permissions
-        if (oldPermissions != null)
-        {
-            for (int i=0; i<oldPermissions.size(); i++)
-            {
-                PolicyBasedPermission p = (PolicyBasedPermission)
-                                          oldPermissions.elementAt(i);
-                StorageEntry removePermissionQuery = new StorageEntry();
-                removePermissionQuery.addAttribute(new StorageAttribute(
-                                                       StorageAttribute.ID,
-                                                       oldAppUID.getStringValue()));
-                removePermissionQuery.addAttribute(new StorageAttribute(
-                                                       StorageNames.CLASS,
-                                                       p.getName()));
-                if (p.getTarget() != null
-                        && p.getTarget().length() > 0)
-                {
-                    removePermissionQuery.addAttribute(new StorageAttribute(
-                                                           StorageNames.NAME,
-                                                           p.getTarget()));
-                }
-                if (p.getActionList() != null
-                        && p.getActionList().length() > 0)
-                {
-                    removePermissionQuery.addAttribute(new StorageAttribute(
-                                                           StorageNames.ACTION,
-                                                           p.getActionList()));
-                }
-                doStorageRemove(StorageNames.MIDP_PERMISSIONS_TABLE,
-                                removePermissionQuery);
-                // remove the setting also if not used by some other permission
-                UserSecuritySettings settings =
-                    p.getUserSecuritySettings();
-                if (settings != null)
-                {
-                    StorageEntry permissionsQuery = new StorageEntry();
-                    permissionsQuery.addAttribute(new StorageAttribute(
-                                                      StorageAttribute.ID,
-                                                      newAppUID.getStringValue()));
-                    permissionsQuery.addAttribute(new StorageAttribute(
-                                                      StorageNames.FUNCTION_GROUP,
-                                                      settings.getName()));
-                    StorageEntry[] permissions = doStorageSearch(
-                                                     StorageNames.MIDP_PERMISSIONS_TABLE, permissionsQuery);
-                    if (permissions == null || (permissions != null
-                                                && permissions.length == 0))
-                    {
-                        // remove the orphaned settings from settings table
-                        StorageEntry removeSettingsQuery = new StorageEntry();
-                        removeSettingsQuery.addAttribute(new StorageAttribute(
-                                                             StorageAttribute.ID,
-                                                             newAppUID.getStringValue()));
-                        removeSettingsQuery.addAttribute(new StorageAttribute(
-                                                             StorageNames.FUNCTION_GROUP,
-                                                             settings.getName()));
-                        doStorageRemove(StorageNames.MIDP_FUNC_GRP_SETTINGS_TABLE,
-                                        removeSettingsQuery);
-                    }
-                }
-            }
-        }
-        // write the new permissions
-        writeGrantedPermissions(newAppUID, null, newGrantedPermissions, true /* preserveSettings */);
-    }
-
     private AuthenticationStorageData readAuthenticationStorageData(
         Uid appUID, String aAppName, String aAppVersion,
         String aAppVendor, int readFilter)
@@ -1838,41 +1696,6 @@
         }
         return attrValue;
     }
-
-    private int removeElement(Vector elements, PolicyBasedPermission element)
-    {
-        PolicyBasedPermissionImpl p1 = new PolicyBasedPermissionImpl(
-            element.getName(),
-            element.getTarget(),
-            element.getActionList(),
-            null);
-        for (int i=0; i<elements.size(); i++)
-        {
-            PolicyBasedPermission tmp = (PolicyBasedPermission)elements
-                                        .elementAt(i);
-            PolicyBasedPermissionImpl p2 = new PolicyBasedPermissionImpl(
-                tmp.getName(),
-                tmp.getTarget(),
-                tmp.getActionList(),
-                null);
-            if (p1.equals(p2))
-            {
-                UserSecuritySettings s1 = element.getUserSecuritySettings();
-                UserSecuritySettings s2 = tmp.getUserSecuritySettings();
-                if ((s1 == null && s2 == null)
-                        || (s1 != null
-                            && s2 != null
-                            && s1.equals(s2)))
-                {
-                    // identical permissions
-                    elements.removeElementAt(i);
-                    return REMOVED;
-                }
-                return i;
-            }
-        }
-        return NOT_FOUND;
-    }
     
     private String encodeFunctionGroup(int type, String name)
     {
--- a/javacommons/security/javaunicertstoreplugin/build/bld.inf	Wed Aug 18 09:43:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
-* 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: 
-*
-*/
-
-PRJ_PLATFORMS
-default
-
-PRJ_MMPFILES
-javaunicertstoreplugin.mmp
-
-#ifdef RD_JAVA_UI_QT
-#include "exports.inf" 
-#endif
--- a/javacommons/security/javaunicertstoreplugin/build/javaunicertstoreplugin.mmp	Wed Aug 18 09:43:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
-* 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: 
-*
-*/
-
-#include <bldvariant.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <../../../../inc/project_defines.hrh>
-#include <../../../../inc/java_stdcpp_support_for_dll.hrh>
-
-target          javaunicertstoreplugin.dll
-
-targettype      PLUGIN 
-
-uid             0x10009D8D 0x200213A3
-
-CAPABILITY      CAP_ECOM_PLUGIN
-VENDORID        VID_DEFAULT
-
-// Use bytepair compression to enable code paging
-PAGED
-
-userinclude   ../../../../inc
-
-sourcepath      ../src.s60
-
-source          javacertstoreimpl.cpp
-source          javacertstoretoken.cpp
-source          javacertstoretokentype.cpp
-source          main.cpp
-
-start resource  200213A3.rss
-target javaunicertstoreplugin.rsc
-end
-
-START RESOURCE          ../data/javausermessages.rss
-HEADER
-TARGETPATH              /resource/java
-LANGUAGE_IDS
-END
-
-library         ctframework.lib
-library         efsrv.lib
-library         estor.lib
-library         x509.lib
-library         javacomms.lib
-LIBRARY         CommonEngine.lib
-LIBRARY         aknnotify.lib
-
-#if defined(WINSCW)
-deffile ./bwins/javaunicertstoreplugin.def
-#else
-deffile ./eabi/javaunicertstoreplugin.def
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/javaunicertstoreplugin/build/javaunicertstoreplugin.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,60 @@
+#
+# 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: 
+#
+
+include(../../../../inc/build_defines.pri)
+
+TEMPLATE=lib
+TARGET=javaunicertstoreplugin
+CONFIG += omj stl
+CONFIG -= qt
+
+contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
+    CONFIG += qt hb
+    SOURCES += ../src.s60/confirmquery.cpp
+    HEADERS += ../src.s60/confirmquery.h
+}
+symbian {
+    TARGET.UID2 = 0x10009D8D
+    TARGET.UID3 = 0x200213A3
+    TARGET.TARGETTYPE=PLUGIN
+    TARGET.CAPABILITY = CAP_ECOM_PLUGIN
+    MMP_RULES += "START RESOURCE 200213A3.rss"
+    MMP_RULES += "TARGETPATH /resource/plugins"   
+    MMP_RULES += "TARGET javaunicertstoreplugin.rsc"
+    MMP_RULES += "END"
+    MMP_RULES += "START RESOURCE ../data/javausermessages.rss"
+    MMP_RULES += "HEADER"
+    MMP_RULES += "TARGETPATH /resource/java"
+    MMP_RULES += "LANGUAGE_IDS"
+    MMP_RULES += "END"
+    DEPENDPATH += ../src.s60
+    INCLUDEPATH += ../src.s60 ../../../../inc
+    SOURCES += ../src.s60/javacertstoreimpl.cpp \
+               ../src.s60/javacertstoretoken.cpp \
+               ../src.s60/javacertstoretokentype.cpp \
+               ../src.s60/main.cpp
+    LIBS += -lctframework \
+            -lefsrv \
+            -lestor \
+            -lx509 \
+            -ljavacomms \
+            -lCommonEngine
+    !contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
+        LIBS += -laknnotify
+    }
+}
+
+include(../../../../build/omj.pri)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/confirmquery.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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:
+*
+*/
+#include "confirmquery.h"
+#include <hbmessagebox.h>
+#include <hblabel.h>
+
+using namespace java::security;
+
+ConfirmQuery::ConfirmQuery()
+    : mAsyncToSyncCallEventLoop(0), mQueryAccepted(false)
+{
+    mAsyncToSyncCallEventLoop = new QEventLoop();
+}
+    
+bool ConfirmQuery::accept(const QString& aQuery)
+{
+    HbMessageBox confirmQuery(HbMessageBox::MessageTypeQuestion);
+    confirmQuery.setDismissPolicy(HbDialog::NoDismiss);
+    confirmQuery.setTimeout(HbDialog::NoTimeout);
+    confirmQuery.setIconVisible(false);
+    confirmQuery.setText(aQuery);
+    confirmQuery.setAttribute(Qt::WA_DeleteOnClose);
+    confirmQuery.setStandardButtons(HbMessageBox::Yes | HbMessageBox::No);
+    confirmQuery.open(this,SLOT(queryDismissed(int)));
+    mAsyncToSyncCallEventLoop->exec();
+    return mQueryAccepted;
+}
+
+void ConfirmQuery::queryDismissed(int dismissAction)
+{
+    if (dismissAction == HbMessageBox::Yes) {
+        mQueryAccepted = true;
+    }
+    mAsyncToSyncCallEventLoop->exit();
+}
+
+ConfirmQuery::~ConfirmQuery()
+{
+    delete mAsyncToSyncCallEventLoop;
+}
+
+#include "moc_confirmquery.cpp"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/confirmquery.h	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* 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:
+*
+*/
+#ifndef CONFIRMQUERY_H
+#define CONFIRMQUERY_H
+
+#include <QEventLoop>
+
+namespace java
+{
+namespace security
+{
+
+class ConfirmQuery: public QObject
+{
+    Q_OBJECT
+
+public:
+    ConfirmQuery();
+    bool accept(const QString& aQuery);
+    virtual ~ConfirmQuery();
+
+private slots:
+    void queryDismissed(int dismissAction);
+
+private:
+    // own event loop used for "translating" asynchronous calls into
+    // synchronous calls
+    QEventLoop* mAsyncToSyncCallEventLoop;
+    // boolean for carying the user's input in between two async calls
+    bool mQueryAccepted;
+};
+
+} // end namespace security
+} // end namespace java
+
+#endif //CONFIRMQUERY_H 
--- a/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -20,8 +20,6 @@
 
 #include <javausermessages.rsg>
 
-#include <avkon.rsg>
-#include <AknGlobalConfirmationQuery.h>
 #include <stringresourcereader.h>
 #include <StringLoader.h>
 #include <data_caging_path_literals.hrh>
@@ -43,6 +41,12 @@
 #include "s60commonutils.h"
 #include "securitycommsmessagedefs.h"
 
+#ifdef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+#include "confirmquery.h"
+#else
+#include <avkon.rsg>
+#include <AknGlobalConfirmationQuery.h>
+#endif
 
 
 //_LIT(KMIDP2TrustRoot, "J2ME MIDP2 Trust Root");
@@ -60,8 +64,11 @@
  *
  */
 CJavaCertStoreImpl::CJavaCertStoreImpl(CJavaCertStoreToken& aToken)
-        : CActive(EPriorityNormal),mToken(aToken),mClientStatus(NULL),mState(EInitial),mQuery(0),mTempCertData(0)
+        : CActive(EPriorityNormal),mToken(aToken),mClientStatus(NULL),mState(EInitial),mTempCertData(0)
 {
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+    mQuery.reset(0);
+#endif        
 }
 
 /**
@@ -877,7 +884,9 @@
         SetActive();
         return;
     }
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     delete mQuery.release();
+#endif        
     mState = EInitial;
     TRequestStatus* pRequestStatus = &aRequestStatus;
     User::RequestComplete(pRequestStatus,KErrCancel);
@@ -894,8 +903,24 @@
     std::auto_ptr<CStringResourceReader> reader(CStringResourceReader::NewL(resourceFileName));
     std::auto_ptr<HBufC> queryPrompt(reader->ReadResourceString(resourceId).AllocL());
 
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     mQuery.reset(CAknGlobalConfirmationQuery::NewL());
     mQuery->ShowConfirmationQueryL(iStatus,queryPrompt->Des(),R_AVKON_SOFTKEYS_OK_CANCEL);
+#else
+    int completeStatus = KErrCancel;
+    ConfirmQuery* query = new ConfirmQuery();
+    QString queryText = QString::fromStdWString(
+            std::wstring((wchar_t*) queryPrompt->Ptr(), 
+                    queryPrompt->Length())); 
+    if (query->accept(queryText))
+    {
+        completeStatus = KErrNone;
+    }
+    delete query; query = NULL;
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, completeStatus);
+#endif
+    
 }
 
 /**
@@ -905,9 +930,15 @@
 {
 
     mState = EInitial;
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     delete mQuery.release();
+#endif        
     mState = EInitial;
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     if (EAknSoftkeyOk != aStatus)
+#else
+    if (KErrNone != aStatus)
+#endif        
     {
         User::RequestComplete(mClientStatus,KErrCancel);
         return;
@@ -922,9 +953,15 @@
 {
 
     mState = EInitial;
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     delete mQuery.release();
+#endif        
     mState = EInitial;
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     if (EAknSoftkeyOk != aStatus)
+#else
+    if (KErrNone != aStatus)
+#endif        
     {
         User::RequestComplete(mClientStatus,KErrCancel);
         return;
--- a/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.h	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.h	Thu Sep 02 20:20:40 2010 +0300
@@ -24,7 +24,9 @@
 #include "commsclientendpoint.h"
 #include "commsmessage.h"
 
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
 class CAknGlobalConfirmationQuery;
+#endif
 
 namespace java
 {
@@ -142,7 +144,9 @@
     RPointerArray<CJavaCertData> mCertsData;
     TState mState;
     RThread mUiThread;
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
     std::auto_ptr<CAknGlobalConfirmationQuery> mQuery;
+#endif        
     //This class does not have ownership into this object.
     CJavaCertData* mTempCertData;
 
--- a/javacommons/security/security.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/security.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -15,5 +15,5 @@
 #
 TEMPLATE = subdirs
 SUBDIRS += build/javasecurity.pro 
-BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"javaunicertstoreplugin/build/bld.inf\""  
+SUBDIRS += javaunicertstoreplugin/build/javaunicertstoreplugin.pro 
 BLD_INF_RULES.prj_extensions += "prj_extensions" 
--- a/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -480,7 +480,23 @@
             {
                 if (JavaCommonUtils::isFirstBoot())
                 {
-                    ret_code = KCertAndSignatureOk;
+                    // from the underlaying/openssl services point of view this
+                    // is a failure. In order to behave like everything is ok,
+                    // compute the root hash now so there is no need later to 
+                    // contact the underlaying/openssl services 
+                    // -> treat the last certificate from the chain as the user 
+                    // certificate
+                    X509 *user_cert = NULL;
+                    if (no_certs > 0)
+                    {
+                        user_cert = SecurityUtils::readCert(cert_chain[no_certs-1], strlen(cert_chain[no_certs-1]), PEM);
+                    }
+                    if (user_cert != NULL)
+                    {
+                        sprintf(root_hash,"%08lX",X509_issuer_name_hash(user_cert));
+                        X509_free(user_cert);
+                        ret_code = KCertAndSignatureOk;
+                    }
                 }
             }
 
@@ -519,7 +535,10 @@
         }
 
         // compute the root hash value if requested
-        sprintf(root_hash,"%08lX",X509_issuer_name_hash(x509_ctx->current_issuer));
+        if (x509_ctx->current_issuer != NULL)
+        {
+            sprintf(root_hash,"%08lX",X509_issuer_name_hash(x509_ctx->current_issuer));
+        }
         // add the '\0'
         root_hash[MD5_DIGEST_LEN] = '\0';
 
--- a/javacommons/security/src/utils/storagehandler.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/src/utils/storagehandler.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -163,7 +163,7 @@
     {
         aCerts.push_back(JavaCommonUtils::wstringToInt(aValue));
     }
-    catch (ExceptionBase eb)
+    catch (ExceptionBase& eb)
     {
         WLOG1WSTR(EJavaStorage,
                   "Invalid cert index skipped: %s", aValue);
--- a/javacommons/security/subsystem.mk	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/subsystem.mk	Thu Sep 02 20:20:40 2010 +0300
@@ -17,16 +17,14 @@
 include $(JAVA_SRC_ROOT)/build/Makefile.defs
 
 COMPONENTS = \
-	build
+	build \
+	javaunicertstoreplugin/build
 
 ifdef RD_JAVA_S60_RELEASE_5_0_IAD
 SUBSYSTEMS = \
 	legacysupport
 endif
 
-NONQTSUBSYSTEMS = \
-	javaunicertstoreplugin/build
-
 SYMBIAN_ONLY = \
     javaunicertstoreplugin/build
 ifdef RD_JAVA_S60_RELEASE_5_0_IAD
--- a/javacommons/security/tsrc/data/ext1/ext1.odc	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/data/ext1/ext1.odc	Thu Sep 02 20:20:40 2010 +0300
@@ -1,5 +1,5 @@
 [properties]
 -Dcom.nokia.mj.addon.protected.ext1=com.nokia.mj.impl.,com.nokia.ext1.internal.,java.security.
 -Dcom.nokia.mj.addon.restricted.ext1=com.nokia.ext1.public.,com.nokia.mj.impl.
--Dcom.nokia.mj.addon.permissions.ext1=com.nokia.ext1.public.Ext1Perm,com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl;javax.microedition.io.Connector.socket,com.nokia.ext1.internal.Ext1Perm;com.nokia.ext1.public.Ext1Perm,com.nokia.ext1.internal.Ext1Perm,*;
+-Dcom.nokia.mj.addon.permissions.ext1=com.nokia.ext1.public.Ext1Perm,com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl;javax.microedition.io.Connector.socket,com.nokia.ext1.internal.Ext1Perm;com.nokia.ext1.public.Ext1Perm,com.nokia.ext1.internal.Ext1Perm;
 -Dcom.nokia.mj.addon.policies.ext1=c:\resource\java\security\extensions\ext1\policies\untrusted.ser;c:\resource\java\security\extensions\ext1\policies\trustedthirdparty.ser;
\ No newline at end of file
--- a/javacommons/security/tsrc/data/ext2/ext2.odc	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/data/ext2/ext2.odc	Thu Sep 02 20:20:40 2010 +0300
@@ -1,5 +1,5 @@
 [properties]
 -Dcom.nokia.mj.addon.protected.ext2=com.nokia.ext2.internal.,com.nokia.ext1.public
 -Dcom.nokia.mj.addon.restricted.ext2=com.nokia.ext2.public.,com.nokia.ext1.internal
--Dcom.nokia.mj.addon.permissions.ext2=com.nokia.ext2.public.Ext2Perm,com.nokia.ext1.internal.Ext1Perm;com.nokia.ext1.public.Ext1Perm,com.nokia.ext2.internal.Ext2Perm;com.nokia.ext2.public.Ext2Perm,com.nokia.ext2.internal.Ext2Perm,*
+-Dcom.nokia.mj.addon.permissions.ext2=com.nokia.ext2.public.Ext2Perm,com.nokia.ext1.internal.Ext1Perm;com.nokia.ext1.public.Ext1Perm,com.nokia.ext2.internal.Ext2Perm;com.nokia.ext2.public.Ext2Perm,com.nokia.ext2.internal.Ext2Perm
 -Dcom.nokia.mj.addon.policies.ext2=c:\resource\java\security\extensions\ext2\policies\trustedthirdparty.ser
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -196,9 +196,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertWithTrace(signingCerts != null
                         && signingCerts.length == 1
@@ -241,9 +243,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertWithTrace(signingCerts != null
                         && signingCerts.length == 1
@@ -285,9 +289,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("",        "MIICWDCCAcECBEhQwA0wDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCZmkxEjAQBgNVBAgTCVBpcmthbm1hYTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9raWExDTALBgNVBAsTBEphdmExHzAdBgNVBAMMFkpQX0RldmljZV9NYW51ZmFjdHVyZXIwHhcNMDgwNjEyMDYxOTU3WhcNMTgwNjEwMDYxOTU3WjBzMQswCQYDVQQGEwJmaTESMBAGA1UECBMJUGlya2FubWFhMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVOb2tpYTENMAsGA1UECxMESmF2YTEfMB0GA1UEAwwWSlBfRGV2aWNlX01hbnVmYWN0dXJlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApi3ipIPj8O33/rZre1euh7Itd9d6ZVf2mvQ/tLpHEsFJe5XLOsVViMvFskhhKUzmDsRbP4J03L6827/vEDIi/1i8kJGLaoFqJYaLGFWI2Zmxlj6aJV8cfZyOjmQPWJn1IDEe1ZAWbvMSp8xibWRsCLNEGKIkxQvAr/QDK/6iS+kCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCDXt6klAs6yKvdTab3D2wkdoi3Lu4YFsMgLexJOu5HhAUJ/9VYO+Q2+mjd95MRsTa5rWQ2Jjvhn57Z3z/KBOwfHbymmNtMk6Gl14H0vQRoHa31jh3mTuAy5KotDVthaDp30aOizk473NU68wY1WdP4gFk5ZhrpNea9q3st13BxIQ=="));
@@ -301,9 +307,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID2,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID2, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID2,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID2, null);
+        permissionGranter.grantJarPermissions( appUID2, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID2, null);
         // 2 legacy unsigned MIDlets, install from JAD -> checkPermission succeeds
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session,appUID);
@@ -317,9 +325,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertWithTrace(signingCerts == null);
         ac.checkPermission(new java.util.PropertyPermission("microedition.version", "read"));
@@ -331,9 +341,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes = new SecurityAttributes();
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertWithTrace(signingCerts == null);
         ac.checkPermission(new java.util.PropertyPermission("microedition.version", "read"));
@@ -356,7 +368,8 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         storage.removeAuthenticationStorageData(appUID2);
         permissionGranter.removeSecurityData(session,appUID2);
         PermissionResolver.testClearCache();
@@ -388,9 +401,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         storage.removeAuthenticationStorageData(appUID2);
         permissionGranter.removeSecurityData(session,appUID2);
         PermissionResolver.testClearCache();
@@ -426,9 +441,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         storage.removeAuthenticationStorageData(appUID2);
         permissionGranter.removeSecurityData(session,appUID2);
         PermissionResolver.testClearCache();
@@ -454,9 +471,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         storage.removeAuthenticationStorageData(appUID2);
         permissionGranter.removeSecurityData(session,appUID2);
         PermissionResolver.testClearCache();
@@ -475,9 +494,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID2, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID2, appUID);
+        permissionGranter.grantJarPermissions( appUID2, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID2, null);
         // update from manufacturer to operator succeeds for legacy suites
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session,appUID);
@@ -495,7 +516,8 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         storage.removeAuthenticationStorageData(appUID2);
         permissionGranter.removeSecurityData(session,appUID2);
         PermissionResolver.testClearCache();
@@ -525,9 +547,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         appPackageEntry = new StorageEntry();
         appPackageEntry.addAttribute(new StorageAttribute(
                                          StorageAttribute.ID,
@@ -556,9 +580,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID2, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID2, appUID);
+        permissionGranter.grantJarPermissions( appUID2, appUID, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID2, appUID);
         // update from identified third party to identified third party but with different organization for signing certificate fails for MIDP3 MIDlets
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session,appUID);
@@ -573,7 +599,8 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         appPackageEntry = new StorageEntry();
         appPackageEntry.addAttribute(new StorageAttribute(
                                          StorageAttribute.ID,
@@ -623,9 +650,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         appPackageEntry = new StorageEntry();
         appPackageEntry.addAttribute(new StorageAttribute(
                                          StorageAttribute.ID,
@@ -654,9 +683,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID2, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID2,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID2, appUID);
+         permissionGranter.grantJarPermissions( appUID2, appUID, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID2, appUID);
         // update from identified third party to identified third party succeeds (V1 requests P1 (Net), P2 (Messaging), P3 (Messaging), V2 requests P2 (Messaging), P4 (UserData), P5 (Net)) -> check that P1 is removed, P2 is retained (with old settings), P3 is removed, P4 and P5 are added with brand new settings
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session,appUID);
@@ -674,10 +705,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.wireless.messaging.sms.send,javax.wireless.messaging.mms.send"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
-        permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         appPackageEntry = new StorageEntry();
         appPackageEntry.addAttribute(new StorageAttribute(
                                          StorageAttribute.ID,
@@ -706,9 +738,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.wireless.messaging.sms.send,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         grantedPermissions = storage.readGrantedPermissions(appUID);
         MIDPPermission p1 = PermissionMappingTable.get("javax.wireless.messaging.sms.send");
         MIDPPermission p2 = PermissionMappingTable.get("javax.microedition.io.Connector.file.read");
@@ -724,7 +758,7 @@
                                                                                                                          UserSecuritySettings.NO_INTERACTION_MODE,
                                                                                                                          UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                                                                          UserSecuritySettings.SESSION_INTERACTION_MODE})),
-                                                    new PolicyBasedPermissionImpl(p2.getName(), "*", p2.getActionList(),
+                                                    new PolicyBasedPermissionImpl(p2.getName(), p2.getTarget(), p2.getActionList(),
                                                                                   new UserSecuritySettingsImpl("Read User Data Access",
                                                                                                                UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                                                                new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
@@ -780,9 +814,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.wireless.messaging.sms.send,javax.wireless.messaging.mms.send"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         assertWithTrace(checkStringArrays(blanketPermissions,
                                           new String[] {UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.NET_ACCESS_SETTINGS),
                                                         UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.MESSAGING_SETTINGS)
@@ -814,9 +850,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.wireless.messaging.sms.send,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         assertWithTrace(checkStringArrays(blanketPermissions,
                                           new String[] {UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.NET_ACCESS_SETTINGS),
                                                         UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.MESSAGING_SETTINGS),
@@ -839,9 +877,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.wireless.messaging.sms.send,javax.wireless.messaging.mms.send"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         assertWithTrace(checkStringArrays(blanketPermissions,
                                           new String[] {UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.NET_ACCESS_SETTINGS),
                                                         UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.MESSAGING_SETTINGS)
@@ -872,9 +912,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.wireless.messaging.sms.send,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         assertWithTrace(checkStringArrays(blanketPermissions,
                                           new String[] {UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.NET_ACCESS_SETTINGS),
                                                         UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.READ_USER_DATA_ACCESS_SETTINGS)
@@ -894,9 +936,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.wireless.messaging.sms.send,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         assertWithTrace(blanketPermissions == null);
         // change some settings to e.g. Session and reinstall the same suite with same permissions -> check that only the settings which are not Blanket (due to being changed) are returned
         storage.writeUserSecuritySettings(appUID, "Messaging", UserSecuritySettings.SESSION_INTERACTION_MODE);
@@ -913,9 +957,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.wireless.messaging.sms.send,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         assertWithTrace(checkStringArrays(blanketPermissions,
                                           new String[] {UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.MESSAGING_SETTINGS)}));
         // upgrade tests for legacy suites
@@ -948,9 +994,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.http,javax.wireless.messaging.sms.send"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         permissionGranter.getBlanketPermissions(appUID);
         assertTrue(permissionGranter.getBlanketPermissionsDetails(appUID) == null);
+        permissionGranter.addSecurityData(session, appUID, null);
         // getBlanketPermissionsDetails for Multimedia Read User Data -> no details
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -971,8 +1018,9 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.media.control.RecordControl,javax.microedition.io.Connector.file.read"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         assertTrue(permissionGranter.getBlanketPermissionsDetails(appUID) == null);
         // getBlanketPermissionsDetails for Multimedia, Local Connectivity -> privacy details
         permissionGranter.removeSecurityData(session, appUID);
@@ -994,10 +1042,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.media.control.RecordControl,javax.microedition.io.Connector.bluetooth.client"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         String blanketDetails = permissionGranter.getBlanketPermissionsDetails(appUID);
-        assertTrue("qtn_java_settings_inst_query_perm_sec".equals(blanketDetails) 
+        assertTrue("qtn_java_settings_inst_query_perm_sec".equals(blanketDetails)
             || "Allowing these permissions may result in compromised privacy".equals(
             blanketDetails));
         // getBlanketPermissionsDetails for Messaging, Multimedia -> net details
@@ -1020,10 +1069,11 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.media.control.RecordControl,javax.wireless.messaging.sms.send"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         blanketDetails = permissionGranter.getBlanketPermissionsDetails(appUID);
-        assertTrue("qtn_java_settings_inst_query_perm_net".equals(blanketDetails) 
+        assertTrue("qtn_java_settings_inst_query_perm_net".equals(blanketDetails)
             || "Allowing these permissions may result in compromised privacy or increased network usage costs".equals(
             blanketDetails));
     }
@@ -1058,6 +1108,7 @@
 
     private void upgradeDomain(ProtectionDomain domain1, ProtectionDomain domain2, boolean expectToFail, boolean legacySuite)
     {
+        AuthenticationCredentials[] credentials;
         boolean success1 = false;
         boolean success2 = false;
         storage.removeAuthenticationStorageData(appUID);
@@ -1081,9 +1132,11 @@
                                          StorageNames.VALUE,
                                          (legacySuite ? "MIDP-2.0" : "MIDP-3.0")));
         session.write(StorageNames.APPLICATION_PACKAGE_ATTRIBUTES_TABLE, appPackageEntry);
-        authenticationModule.authenticateJar(session, appUID, null, domain1, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar");
-        permissionGranter.grantJarPermissions(session, appUID, null, domain1);
+        credentials = authenticationModule.authenticateJar(appUID, null, domain1, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar");
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions(appUID, null, domain1);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         success1 = (blanketPermissions == null && signingCerts == null);
         ac.checkPermission(new java.util.PropertyPermission("microedition.version", "read"));
@@ -1093,7 +1146,8 @@
         assertWithTrace(domainCategory.equals(domain1.getCategory()));
         try
         {
-            authenticationModule.authenticateJar(session, appUID, appUID, domain2, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar");
+            credentials = authenticationModule.authenticateJar(appUID, appUID, domain2, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar");
+            authenticationModule.addSecurityData(session, appUID, appUID);
             assertWithTrace(!expectToFail);
         }
         catch (InstallerSecurityException e)
@@ -1104,8 +1158,9 @@
                             && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.DIFFERENT_SIGNERS, null)));
             return;
         }
-        permissionGranter.grantJarPermissions(session, appUID,appUID, domain2);
+        permissionGranter.grantJarPermissions(appUID,appUID, domain2);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         success2 = (blanketPermissions == null && signingCerts == null);
         assertWithTrace(success1 == true && success2 == true);
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -179,7 +179,8 @@
         authenticationModule.removeSecurityData(session, appUID);
         try
         {
-            authenticationModule.authenticateJar(session, appUID,null,"somethingWhichDoesNotExist", false);
+            authenticationModule.authenticateJar(appUID,null,"somethingWhichDoesNotExist", false);
+            authenticationModule.addSecurityData(session, appUID, null);
             assertTrue(false);
         }
         catch (InstallerSecurityException e)
@@ -193,13 +194,15 @@
         authenticationModule.removeSecurityData(session, appUID);
         // 3. unsigned, install from JAR
         authenticationModule.removeSecurityData(session, appUID);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp"  + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp"  + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         assertTrue(authenticationModule.getProtectionDomainCategory(session, appUID).equals(ApplicationInfo.UNIDENTIFIED_THIRD_PARTY_DOMAIN)
                    && authenticationModule.getCertificatesDetails(session, appUID) == null);
         authenticationModule.removeSecurityData(session, appUID);
-        // 3.1. unsigned, install from JAR, no session provided to authenticateJar -> no authentication data stored to storage
+        // 3.1. unsigned, install from JAR, no session provided to addSecurityData -> no authentication data stored to storage
         authenticationModule.removeSecurityData(session, appUID);
-        authenticationModule.authenticateJar(null, appUID,null,TEST_DATA_DIR + "security_tmp"  + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp"  + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(null, appUID, null);
         StorageEntry query = new StorageEntry();
         query.addAttribute(new StorageAttribute(
                                StorageAttribute.ID,
@@ -231,13 +234,15 @@
         credentials = authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
         assertTrue(credentials != null && credentials.length == 1 && credentials[0].getProtectionDomainName().equals("UnidentifiedThirdParty")
                    && authenticationModule.getCertificatesDetails(session, appUID) == null);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp"  +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp"  +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         assertTrue(authenticationModule.getProtectionDomainCategory(session, appUID).equals(ApplicationInfo.UNIDENTIFIED_THIRD_PARTY_DOMAIN));
         authenticationModule.removeSecurityData(session, appUID);
         // 5. upgrade of authentication storage data
         authenticationModule.removeSecurityData(session, appUID);
         storage.writeAuthenticationStorageData(appUID, new AuthenticationStorageData("UnidentifiedThirdParty", ApplicationInfo.UNIDENTIFIED_THIRD_PARTY_DOMAIN, "jarHash", "rootHash", new Vector()));
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
         assertTrue(authenticationModule.getProtectionDomainCategory(session, appUID).equals(ApplicationInfo.UNIDENTIFIED_THIRD_PARTY_DOMAIN)
                    && authenticationModule.getCertificatesDetails(session, appUID) == null);
         authenticationModule.removeSecurityData(session, appUID);
@@ -272,7 +277,8 @@
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
         details = (SigningCertificate[])authenticationModule.getCertificatesDetails(session, appUID);
-        authenticationModule.authenticateJar(session, appUID, null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID, null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         // this empties the cache as well
         authenticationModule.removeSecurityData(session, appUID);
@@ -359,7 +365,8 @@
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
         try
         {
-            authenticationModule.authenticateJar(session, appUID, null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "modified_app.jar", false);
+            authenticationModule.authenticateJar(appUID, null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "modified_app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
             assertTrue(INVALID_CERTIFICATE_SIGNATURE_MSG, false);
         }
         catch (InstallerSecurityException e)
@@ -552,7 +559,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.IDENTIFIED_THIRD_PARTY_DOMAIN));
         // 17. Developer Certificates/Manufacturer - sign to operator party domain
@@ -566,7 +574,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.OPERATOR_DOMAIN));
         // 18. Developer Certificates/Manufacturer - sign to manufacturer domain
@@ -580,7 +589,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.MANUFACTURER_DOMAIN));
         // 19. Developer Certificates/Operator - sign to trusted third party domain
@@ -594,7 +604,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.IDENTIFIED_THIRD_PARTY_DOMAIN));
         // 20. Developer Certificates/Operator - sign to operator party domain
@@ -608,7 +619,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.OPERATOR_DOMAIN));
         // 21. Developer Certificates/Operator - sign to manufacturer domain -> still the operator domain is used
@@ -622,7 +634,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.OPERATOR_DOMAIN));
         // 22. Developer Certificates/TrustedThirdParty - sign to manufacturer domain -> still the trusted third party domain is used
@@ -636,7 +649,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.IDENTIFIED_THIRD_PARTY_DOMAIN));
         // 23. Developer Certificates/TrustedThirdParty - sign to operator domain -> still the trusted third party domain is used
@@ -650,7 +664,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.IDENTIFIED_THIRD_PARTY_DOMAIN));
         // 24. Developer Certificates - no domain info -> fail
@@ -687,7 +702,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         domainCategory = authenticationModule.getProtectionDomainCategory(session, appUID);
         assertTrue(domainCategory.equals(ApplicationInfo.IDENTIFIED_THIRD_PARTY_DOMAIN));
         // 26. Developer Certificates - empty IMEI list -> failure
@@ -807,7 +823,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID, null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID, null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         SigningInfo info = authenticationModule.getSigningInfo("appName","appVersion","appVendor");
         // app is unknown
         assertTrue(info == null);
@@ -851,7 +868,8 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
-        authenticationModule.authenticateJar(session, appUID, null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.authenticateJar(appUID, null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         info = authenticationModule.getSigningInfo("appName","appVersion","appVendor");
         assertTrue(info.getProtectionDomain() != null
                    && info.getProtectionDomain().getName() != null
@@ -958,7 +976,8 @@
         authenticationModule.removeSecurityData(session, appUID);
         try
         {
-            authenticationModule.authenticateJar(session, appUID, null, domain, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar");
+            authenticationModule.authenticateJar(appUID, null, domain, TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "app.jar");
+        authenticationModule.addSecurityData(session, appUID, null);
             assertTrue(!expectToFail);
         }
         catch (InstallerSecurityException e)
@@ -1200,7 +1219,8 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         assertTrue(true);
         // PreInstallation: ocsp disabled, warning undefined, silent mode
         ocspSettings = new OcspSettings(OcspSettings.OCSP_MODE_DISABLED, OcspSettings.OCSP_WARNING_UNDEFINED, true, "0", "0");
@@ -1218,7 +1238,8 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         assertTrue(true);
         // PreInstallation: ocsp enabled, warning ignore, silent mode, ocsp url not set
         ocspSettings = new OcspSettings(OcspSettings.OCSP_MODE_ENABLED, OcspSettings.OCSP_WARNING_IGNORE, true, "0", "0");
@@ -1236,7 +1257,8 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
         assertTrue(true);
     }
 
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -47,6 +47,7 @@
 public class AccessControllerTests extends TestCase implements InstallerMain
 {
 
+    int assertTrace = 0;
     // Begin j2meunit test framework setup
     public void installerMain(String[] args)
     {
@@ -91,6 +92,12 @@
     {
     }
 
+    private void assertWithTrace(boolean aCondition)
+    {
+        assertTrue("" + assertTrace, aCondition);
+        assertTrace++;
+    }
+
     protected void testAccessControllerFactory()
     {
         Uid appUID1 = Uid.createUid("appUID1");
@@ -100,17 +107,17 @@
         String appName = "AccessControllerTests";
         // check null values
         ac1 = AccessControllerFactoryImpl.getAccessController(null, null);
-        assertTrue(ac1 == null);
+        assertWithTrace(ac1 == null);
         AccessControllerFactoryImpl.destroyAccessController(null);
         ac1 = AccessControllerFactoryImpl.getAccessController(null, "appName");
-        assertTrue(ac1 == null);
+        assertWithTrace(ac1 == null);
         AccessControllerFactoryImpl.destroyAccessController(null);
         // check duplicates
         AccessControllerFactoryImpl.destroyAccessController(appUID1);
         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
         ac2 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
         AccessControllerFactoryImpl.destroyAccessController(appUID1);
-        assertTrue(ac1 == ac2);
+        assertWithTrace(ac1 == ac2);
         // check destroy
         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
         AccessControllerFactoryImpl.destroyAccessController(appUID1);
@@ -118,7 +125,7 @@
         // call destroy two times (or calling it on a UID which does not have an instance)
         AccessControllerFactoryImpl.destroyAccessController(appUID1);
         AccessControllerFactoryImpl.destroyAccessController(appUID1);
-        assertTrue(ac1 != ac2);
+        assertWithTrace(ac1 != ac2);
     }
 
     protected void testAccessController()
@@ -135,32 +142,32 @@
         try
         {
             ac.checkPermission((Permission)null);
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
-        assertTrue(ac.checkPermission((String)null) == 0);
+        assertWithTrace(ac.checkPermission((String)null) == 0);
         // check permission which is not granted
         PermissionResolver.testClearCache();
         try
         {
             ac.checkPermission(new CommProtocolPermission("comm://"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         try
         {
             ac.checkPermission(new CommProtocolPermission("comm://"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         // check allowed permission which is granted
         PermissionResolver.testClearCache();
@@ -176,11 +183,11 @@
         try
         {
             ac.checkPermission(new FileProtocolPermission("file://myFile.txt", "read"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         storage.removeGrantedPermissions(appUID);
         // check permission not allowed
@@ -202,11 +209,11 @@
         try
         {
             ac.checkPermission(new SocketProtocolPermission("socket://:100"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         storage.removeGrantedPermissions(appUID);
         // check user permission with NO as interaction mode -> security exception thrown
@@ -228,35 +235,35 @@
         try
         {
             ac.checkPermission(new HttpProtocolPermissionImpl("http://"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         try
         {
             ac.checkPermission(new HttpProtocolPermission("http://"));
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (AccessControlException e)
         {
-            assertTrue(true);
+            assertWithTrace(true);
         }
         storage.removeGrantedPermissions(appUID);
         // check the named permissions: unknown permission
-        assertTrue(ac.checkPermission("unknownPermission") == 0);
+        assertWithTrace(ac.checkPermission("unknownPermission") == 0);
         // check the named permissions: allowed permission
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
                                           "com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl",
-                                          "socket://",
+                                          "socket://*",
                                           null,
                                           null));
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.socket") == 1);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.socket") == 1);
         // check the named permissions: user permission with NO interaction mode
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -273,7 +280,7 @@
                                                                                  })));
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == 0);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == 0);
         // check the named permissions: user permission with ONESHOT interaction mode
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -290,7 +297,7 @@
                                                                                  })));
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt not shown yet)
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -307,7 +314,7 @@
                                                                                  })));
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt shown already)
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -325,7 +332,7 @@
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == 1);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == 1);
         // check the named permissions: user permission with SESSION interaction mode (session prompt not shown already)
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -343,7 +350,7 @@
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
-        assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
+        assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
         // check the named permissions: denied permission
         PermissionResolver.testClearCache();
         grantedPermissions = new Vector();
@@ -354,7 +361,7 @@
                                           null));
         storage.removeGrantedPermissions(appUID);
         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        assertTrue(ac.checkPermission("javax.wireless.messaging.mms.send") == 0);
+        assertWithTrace(ac.checkPermission("javax.wireless.messaging.mms.send") == 0);
         // cleanup
         storage.removeGrantedPermissions(appUID);
         AccessControllerFactoryImpl.destroyAccessController(appUID);
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/InteractiveAccessControllerTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/InteractiveAccessControllerTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -626,8 +626,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         permissionGranter.getBlanketPermissions(appUID);
         ac.checkPermission(new HttpProtocolPermissionImpl("http://", "\n(choose ALLOW)"));
         ac.checkPermission(new HttpProtocolPermissionImpl("http://", "\n(IF YOU SEE THIS PROMPT THE TEST FAILED)"));
@@ -659,8 +661,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, appUID, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,appUID,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, appUID);
+        permissionGranter.grantJarPermissions( appUID, appUID, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, appUID);
         blanketPromptShown = storage.readUserSecuritySettingsPromptFlag(appUID, "Net Access");
         ac.checkPermission(new HttpProtocolPermissionImpl("http://", "\n(IF YOU SEE THIS PROMPT THE TEST FAILED)"));
         storage.removeAuthenticationStorageData(appUID);
@@ -687,8 +691,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(com.nokia.mj.impl.security.midp.common.PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","javax.microedition.io.Connector.socket,javax.microedition.io.Connector.http"));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertTrue(signingCerts != null
                    && signingCerts.length == 1
@@ -725,8 +731,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" + System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         signingCerts = authenticationModule.getCertificatesDetails(session, appUID);
         assertTrue(signingCerts == null);
         ac.checkPermission(new HttpProtocolPermissionImpl("http://url", "\n(choose ALLOW)"));
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -57,6 +57,7 @@
 {
 
     private static String TEST_DATA_DIR;
+    int assertTrace = 0;
 
     static
     {
@@ -78,6 +79,12 @@
         }
     }
 
+    private void assertWithTrace(boolean aCondition)
+    {
+        assertTrue("" + assertTrace, aCondition);
+        assertTrace++;
+    }
+
     // general-purpose constants
     private static final String MIDP_PROFILE_ATTRIBUTE_NAME = "MicroEdition-Profile";
     private static final String MIDP3 = "MIDP-3.0";
@@ -226,12 +233,12 @@
         MIDPPermission[] jadPermissions;
         MIDPPermission[] jarPermissions;
         MIDPPermission[] allPermissions;
-        assertTrue(permissionGranter != null);
+        assertWithTrace(permissionGranter != null);
         // test the null values
         permissionGranter.removeSecurityData(session, appUID);
-        permissionGranter.grantJarPermissions(null, null, null, (PermissionAttribute[])null);
+        permissionGranter.grantJarPermissions(null, null, (PermissionAttribute[])null, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions == null);
+        assertWithTrace(grantedPermissions == null);
         // populate the storage
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
@@ -259,9 +266,10 @@
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_DATAGRAM_PERMISSION + COMMA + "                  " + MIDP2_COMM_PERMISSION));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_SOCKET_PERMISSION + COMMA + MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Manufacturer", new String[]
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Manufacturer", new String[]
                                            {
                                                INTERNAL_DATAGRAM_PERMISSION, INTERNAL_COMM_PERMISSION, INTERNAL_SOCKET_PERMISSION,INTERNAL_HTTP_PERMISSION,"javax.microedition.PropertyPermission","javax.microedition.midlet.AutoStartPermission"
                                            }),
@@ -287,9 +295,10 @@
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_DATAGRAM_PERMISSION + COMMA + "                  " + MIDP2_COMM_PERMISSION));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_SOCKET_PERMISSION + COMMA + MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("IdentifiedThirdParty",
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("IdentifiedThirdParty",
                                            new String[] {INTERNAL_DATAGRAM_PERMISSION, INTERNAL_COMM_PERMISSION, INTERNAL_SOCKET_PERMISSION,INTERNAL_HTTP_PERMISSION}),
                                            getAssignedPermissions("IdentifiedThirdParty")));
         // 1.2 One of the requested mandatory permission is not available in the domain -> fail
@@ -314,12 +323,13 @@
             allAttributes.put(PermissionAttribute.OPTIONAL_ATTRIBUTE_PREFIX + "1", new Attribute("",MIDP3_DATAGRAM_PERMISSION));
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1", new Attribute("",MIDP3_RUNTIME_PERMISSION + " name"));
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(INVALID_PERMISSION_VALUE_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+            permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_PERMISSION_VALUE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -343,9 +353,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         allAttributes.put(PermissionAttribute.OPTIONAL_ATTRIBUTE_PREFIX + "1", new Attribute("",MIDP3_RUNTIME_PERMISSION + " name"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getAssignedPermissions("IdentifiedThirdParty"), true));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getAssignedPermissions("IdentifiedThirdParty"), true));
         // 2. Legacy, signed : permissions NOT requested in JAD & permissions requested in JAR -> grant the requested permissions filled in with right
         // targets/actions from the policy plus the assigned ones
         storage.removeAuthenticationStorageData(appUID);
@@ -365,9 +376,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_SOCKET_PERMISSION + COMMA + MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Operator", new String[]
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Operator", new String[]
                                            {
                                                INTERNAL_SOCKET_PERMISSION, INTERNAL_HTTP_PERMISSION,"javax.microedition.PropertyPermission","javax.microedition.midlet.AutoStartPermission"
                                            }),
@@ -389,9 +401,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions, getAssignedPermissions("IdentifiedThirdParty"), true));
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions, getAssignedPermissions("IdentifiedThirdParty"), true));
         // same for a domain which has one assigned permissions -> only the assigned + default permissions are granted
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
@@ -409,9 +422,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Operator", new String[] {"javax.microedition.PropertyPermission","javax.microedition.midlet.AutoStartPermission"}),
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("Operator", new String[] {"javax.microedition.PropertyPermission","javax.microedition.midlet.AutoStartPermission"}),
                                            getDefaultPermissions()));
         // 4. Legacy, unsigned : permissions requested in JAD & permissions requested in JAR -> ignore requested permissions and
         //    grant all the permissions available in the policy for untrusted MIDlets
@@ -434,9 +448,10 @@
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("","MyOwnOptionalPermission"));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","MyOwnMandatoryPermission"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
         // 5. Legacy, unsigned : permissions requested in JAD & permissions NOT requested in JAR -> ignore requested permissions and,
         //    grant all the permissions available in the policy for untrusted MIDlets
         storage.removeAuthenticationStorageData(appUID);
@@ -455,9 +470,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
         // 6. Legacy, unsigned : permissions NOT requested in JAD & permissions requested in JAR -> ignore requested permissions and
         //    grant all the permissions available in the policy for untrusted MIDlets
         storage.removeAuthenticationStorageData(appUID);
@@ -476,9 +492,10 @@
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("","MyOwnOptionalPermission"));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","MyOwnMandatoryPermission"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
         // 7. Legacy, unsigned : permissions NOT requested in JAD & permissions NOT requested in JAR -> grant all the permissions available in the policy for untrusted MIDlets
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
@@ -494,9 +511,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions("UnidentifiedThirdParty")));
         // 8. MIDP3 unsigned, unknown mandatory permission in JAD file -> failure
         permissionGranter.removeSecurityData(session, appUID);
         try
@@ -509,11 +527,11 @@
             authCredentials = new AuthenticationCredentials[1];
             authCredentials[0] = new AuthenticationCredentials("UnidentifiedThirdParty", "UIDP");
             permissionGranter.grantJadPermissions(appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -528,12 +546,13 @@
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass MyMandatoryTarget MyMandatoryAction1,MyMandatoryAction2,MyMandatoryAction3"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -555,9 +574,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions, getAssignedPermissions("UnidentifiedThirdParty"), true));
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions, getAssignedPermissions("UnidentifiedThirdParty"), true));
         // 9.1. MIDP3 unsigned, P1, unknown optional P2 requested in JAD -> unknown permission is ignored, grant only P1 plus the assigned permissions
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
@@ -575,9 +595,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
                    new MIDPPermission[] {new MIDPPermission(INTERNAL_SOCKET_PERMISSION,"socket://")},getAssignedPermissions("UnidentifiedThirdParty")));
         // 10. MIDP3 unsigned MIDlet, unknown mandatory permission in JAR file -> failure
         permissionGranter.removeSecurityData(session, appUID);
@@ -588,12 +609,13 @@
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass MyMandatoryTarget MyMandatoryAction1,MyMandatoryAction2,MyMandatoryAction3"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -611,12 +633,13 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "1", new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -635,12 +658,13 @@
             securityAttributes.addDescriptorAttributes(allAttributes);
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass MyMandatoryTarget MyMandatoryAction1,MyMandatoryAction2,MyMandatoryAction3"));
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -659,12 +683,13 @@
             securityAttributes.addDescriptorAttributes(allAttributes);
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass MyMandatoryTarget MyMandatoryAction1,MyMandatoryAction2,MyMandatoryAction3"));
             securityAttributes.addManifestAttributes(allAttributes);
-            permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -691,9 +716,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP3));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
                    new MIDPPermission[]
                    {
                        new MIDPPermission(INTERNAL_SOCKET_PERMISSION,"socket://50"),
@@ -725,11 +751,11 @@
             authCredentials = new AuthenticationCredentials[1];
             authCredentials[0] = new AuthenticationCredentials("UnidentifiedThirdParty", "UIDP");
             permissionGranter.grantJadPermissions(appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
-            assertTrue(INVALID_PERMISSION_VALUE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_PERMISSION_VALUE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -765,9 +791,10 @@
         allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "5",new Attribute("",MIDP3_DATAGRAM_PERMISSION + " datagram://12345"));
         allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "6",new Attribute("",MIDP3_COMM_PERMISSION + " comm:123"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
                    new MIDPPermission[]
                    {
                        new MIDPPermission(INTERNAL_SOCKET_PERMISSION,"socket://50"),
@@ -810,9 +837,10 @@
         allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "5",new Attribute("",MIDP3_DATAGRAM_PERMISSION + " datagram://12345"));
         allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "6",new Attribute("",MIDP3_COMM_PERMISSION + " comm:123"));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
+        assertWithTrace(grantedPermissions != null && checkGrantedPermissions(grantedPermissions,
                    new MIDPPermission[]
                    {
                        new MIDPPermission(INTERNAL_SOCKET_PERMISSION,"socket://50"),
@@ -827,12 +855,12 @@
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
         blanketPermissions = permissionGranter.getBlanketPermissions(null);
-        assertTrue(blanketPermissions == null);
+        assertWithTrace(blanketPermissions == null);
         // 20. getBlanketPermissions - unknown appUID
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        assertWithTrace(blanketPermissions == null);
         // 21. getBlanketPermissions - unsigned suite
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
@@ -848,9 +876,10 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions == null);
         // 22. getBlanketPermissions - one of the requested permissions does not allow Blanket
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -872,9 +901,10 @@
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_DATAGRAM_PERMISSION + COMMA + "                  " + MIDP2_SMS_SEND_PERMISSION));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_SOCKET_PERMISSION + COMMA + MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions == null);
         // 23. getBlanketPermissions - request one permissions which is already in Blanket
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -895,9 +925,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions == null);
         // 24. getBlanketPermissions - request Auto Invocation and Net Access -> mutually exclusive permissions
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -918,9 +949,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_PUSH_REGISTRY_PERMISSION + COMMA + MIDP2_HTTP_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions == null);
         // 25. getBlanketPermissions - manufacturer signed MIDlet
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -941,9 +973,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_HTTP_PERMISSION + COMMA + MIDP2_SMS_SEND_PERMISSION + COMMA + MIDP2_MMS_OPEN_PERMISSION + COMMA + MIDP2_COMM_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions == null);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions == null);
         // 26. getBlanketPermissions - request Messaging, Net Access and Local connectivity. Since Messaging and Net Access have the current interaction mode set to Blanket, only Local connectivity is returned
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
@@ -964,9 +997,10 @@
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("",MIDP2_HTTP_PERMISSION + COMMA + MIDP2_SMS_SEND_PERMISSION + COMMA + MIDP2_MMS_OPEN_PERMISSION + COMMA + MIDP2_COMM_PERMISSION));
         securityAttributes.addManifestAttributes(allAttributes);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
+        permissionGranter.grantJarPermissions( appUID, null, securityAttributes.getPermissionAttributes(), authCredentials);
         blanketPermissions = permissionGranter.getBlanketPermissions(appUID);
-        assertTrue(blanketPermissions != null && blanketPermissions.length == 1 && blanketPermissions[0].equals(UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.LOCAL_CONNECTIVITY_SETTINGS)));
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(blanketPermissions != null && blanketPermissions.length == 1 && blanketPermissions[0].equals(UserSecuritySettingsImpl.getLocalizedName(UserSecuritySettings.LOCAL_CONNECTIVITY_SETTINGS)));
         permissionGranter.setPermissionsToBlanket(session, appUID);
         grantedPermissions = storage.readGrantedPermissions(appUID);
         for (int i=0; i<grantedPermissions.size(); i++)
@@ -977,20 +1011,22 @@
                 permission.getUserSecuritySettings();
             if (settings != null && settings.getName() == UserSecuritySettings.LOCAL_CONNECTIVITY_SETTINGS)
             {
-                assertTrue(settings.getCurrentInteractionMode() == UserSecuritySettings.BLANKET_INTERACTION_MODE);
+                assertWithTrace(settings.getCurrentInteractionMode() == UserSecuritySettings.BLANKET_INTERACTION_MODE);
             }
         }
         // grantAllPermissions - null values
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
-        permissionGranter.grantJarPermissions(session, null, null, (ProtectionDomain)null);
+        permissionGranter.grantJarPermissions(null, null, (ProtectionDomain)null);
+        permissionGranter.addSecurityData(session, null, null);
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
-        permissionGranter.grantJarPermissions(session, appUID, null, (ProtectionDomain)null);
+        permissionGranter.grantJarPermissions(appUID, null, (ProtectionDomain)null);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
-        assertTrue(grantedPermissions == null);
+        assertWithTrace(grantedPermissions == null);
         // grantAllPermissions - operator domain
         grantAllPermissions(ProtectionDomain.getOperatorDomain());
         // grantAllPermissions - manufacturer domain
@@ -1008,11 +1044,12 @@
     {
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
-        permissionGranter.grantJarPermissions(session, appUID, null, domain);
+        permissionGranter.grantJarPermissions(appUID, null, domain);
+        permissionGranter.addSecurityData(session, appUID, null);
         grantedPermissions = storage.readGrantedPermissions(appUID);
         permissionGranter.removeSecurityData(session, appUID);
         storage.removeAuthenticationStorageData(appUID);
-        assertTrue(checkGrantedPermissions(grantedPermissions, getPolicyPermissions(domain.getName())));
+        assertWithTrace(checkGrantedPermissions(grantedPermissions, getPolicyPermissions(domain.getName())));
     }
 
     private static MIDPPermission[] getPolicyPermissions(String policyName, String[] permissionNameFilter, String permissionTypeFilter)
@@ -1041,7 +1078,7 @@
                     && findString(policyPerms[i].getName(), permissionNameFilter) != -1)
                     || permissionNameFilter == null) && (permissionTypeFilter == null
                                                          || (permissionTypeFilter.equals("assigned")
-                                                             && (policyPerms[i].getType() == PolicyBasedPermission.ASSIGNED_TYPE 
+                                                             && (policyPerms[i].getType() == PolicyBasedPermission.ASSIGNED_TYPE
                                                              || policyPerms[i].getType() == PolicyBasedPermission.USER_ASSIGNED_TYPE))))
             {
                 vPermissions.addElement(new MIDPPermission(policyPerms[i].getName(), policyPerms[i].getTarget(), policyPerms[i].getActionList()));
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/TestPermissionMappingTable.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/TestPermissionMappingTable.java	Thu Sep 02 20:20:40 2010 +0300
@@ -62,7 +62,7 @@
                 "com.nokia.mj.impl.security.midp.authorization.DatagramProtocolPermissionImpl", "datagram://"));
         TEST_PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.Connector.comm", new MIDPPermission(
-                "com.nokia.mj.impl.security.midp.authorization.CommProtocolPermissionImpl", "comm://*"));
+                "com.nokia.mj.impl.security.midp.authorization.CommProtocolPermissionImpl", "comm:*"));
         TEST_PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.PushRegistry", new MIDPPermission(
                 "javax.microedition.io.PushRegistryPermission", "*"));
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityDescriptorAttributesTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityDescriptorAttributesTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -39,6 +39,7 @@
  */
 public class SecurityDescriptorAttributesTests extends TestCase implements InstallerMain
 {
+    int assertTrace = 0;
 
     /**
      * Hashtable holding all the attributes. Tests populate this hashtable
@@ -78,7 +79,7 @@
         midp2PermissionTargets.put(INTERNAL_HTTPS_PERMISSION, "https://*");
         midp2PermissionTargets.put(INTERNAL_SSL_PERMISSION, "ssl://*");
         midp2PermissionTargets.put(INTERNAL_DATAGRAM_PERMISSION,"datagram://*");
-        midp2PermissionTargets.put(INTERNAL_COMM_PERMISSION, "comm://*");
+        midp2PermissionTargets.put(INTERNAL_COMM_PERMISSION, "comm:*");
         midp2PermissionTargets.put(INTERNAL_PUSH_REGISTRY_PERMISSION, "*");
     }
 
@@ -164,7 +165,7 @@
         // no attributes
         allAttributes.clear();
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue((authAttributes == null) || (authAttributes.length == 0));
+        assertWithTrace((authAttributes == null) || (authAttributes.length == 0));
         // empty certificate attribute
         try
         {
@@ -172,11 +173,11 @@
             allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("", ""));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(EMPTY_CERTIFICATE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(EMPTY_CERTIFICATE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -189,11 +190,11 @@
             allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("","?%cert"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_CERTIFICATE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_CERTIFICATE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -204,7 +205,7 @@
         allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("","cert"));
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
-        assertTrue(securityAttributes.getAuthenticationAttributes() == null);
+        assertWithTrace(securityAttributes.getAuthenticationAttributes() == null);
         // missing certificate attribute
         try
         {
@@ -212,11 +213,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MISSING_CERTIFICATE_ATTRIBUTE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MISSING_CERTIFICATE_ATTRIBUTE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_MISSING,
@@ -230,11 +231,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","?signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_CERTIFICATE_SIGNATURE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_CERTIFICATE_SIGNATURE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -249,11 +250,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "1", new Attribute("","?signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_CERTIFICATE_SIGNATURE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_CERTIFICATE_SIGNATURE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -268,11 +269,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "2", new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MISSING_CERTIFICATE_ATTRIBUTE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MISSING_CERTIFICATE_ATTRIBUTE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_MISSING,
@@ -286,11 +287,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "1", new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -305,11 +306,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MIDP2_SIGNATURE_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MIDP2_SIGNATURE_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -326,11 +327,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MIDP2_SIGNATURE_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MIDP2_SIGNATURE_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -344,7 +345,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 1
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert1", "cert2"},
@@ -360,7 +361,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 1
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert1", "cert2"},
@@ -377,7 +378,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 1
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert1", "cert2"},
@@ -391,7 +392,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 1
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert1", "cert2"},
@@ -410,7 +411,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 1
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert11", "cert12"},
@@ -430,11 +431,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "2" , new Attribute("","signature2"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(CERTIFICATE_WITHOUT_SIGNATURE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_CERTIFICATE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -452,11 +453,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_ATTRIBUTE_PREFIX + "1" , new Attribute("","signature1"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_CERTIFICATE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_CERTIFICATE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -479,7 +480,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null
+        assertWithTrace(authAttributes != null
                    && authAttributes.length == 2
                    && checkChainsAndSignatures(authAttributes,
                                                new String[] {"cert11", "cert12", "cert21", "cert22", "cert23"},
@@ -498,18 +499,18 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         authAttributes = securityAttributes.getAuthenticationAttributes();
-        assertTrue(authAttributes != null && authAttributes.length == 100);
+        assertWithTrace(authAttributes != null && authAttributes.length == 100);
         for (int i=0; i<100; i++)
         {
             // make sure we have 10 certs in each chain and a corresponding signature
-            assertTrue(authAttributes[i].getCertChain() != null
+            assertWithTrace(authAttributes[i].getCertChain() != null
                        && authAttributes[i].getSignature() != null
                        && authAttributes[i].getCertChain().length == 10
                        && authAttributes[i].getSignature().equals("signature" + (i+1)));
             // check each chain
             for (int j=0; j<10; j++)
             {
-                assertTrue((authAttributes[i].getCertChain())[j]
+                assertWithTrace((authAttributes[i].getCertChain())[j]
                            .equals("cert" + (i+1) + "" + (j+1)));
             }
         }
@@ -526,11 +527,11 @@
             allAttributes.put(PermissionAttribute.MANDATORY_LEGACY_ATTRIBUTE_NAME, new Attribute("","Perm1, Perm2"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(LEGACY_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(LEGACY_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -544,11 +545,11 @@
             allAttributes.put(PermissionAttribute.OPTIONAL_LEGACY_ATTRIBUTE_NAME, new Attribute("","Perm1, Perm2"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(LEGACY_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(LEGACY_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -563,11 +564,11 @@
                               new Attribute("","PermissionClassName TargetName ActionList"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -582,11 +583,11 @@
                               new Attribute("","PermissionClassName TargetName ActionList"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(MIDP3_ATTRIBUTE_NOT_ALLOWED_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.INVALID_DESCRIPTOR
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -601,7 +602,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 1
                    && permissionAttributes[0].isLegacyAttribute());
         // MIDP2 mandatory permissions handling - invalid permission value
@@ -616,11 +617,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -640,11 +641,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -663,7 +664,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 0, 2)
                    && checkNamesAndTargets(permissionAttributes,
@@ -681,7 +682,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 1
                    && checkImportance(permissionAttributes, 0, 1)
                    && checkNamesAndTargets(permissionAttributes,
@@ -698,11 +699,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(UNKNOWN_PERMISSION_MSG, true);
+            assertWithTrace(true);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            assertWithTrace(false);
         }
         // MIDP2 optional permissions handling - unknown permission value
         try
@@ -716,11 +717,11 @@
             allAttributes.put(AuthenticationAttribute.SECOND_LEGACY_ATTRIBUTE_NAME, new Attribute("","signature"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(UNKNOWN_PERMISSION_MSG, true);
+            assertWithTrace(true);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(UNKNOWN_PERMISSION_MSG, false);
+            assertWithTrace(false);
         }
         // MIDP2 optional permissions handling - known permission value
         allAttributes.clear();
@@ -734,7 +735,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 2, 0)
                    && checkNamesAndTargets(permissionAttributes,
@@ -756,7 +757,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 1
                    && checkImportance(permissionAttributes, 1, 0)
                    && checkNamesAndTargets(permissionAttributes,
@@ -777,7 +778,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 4
                    && checkImportance(permissionAttributes, 2, 2)
                    && checkNamesAndTargets(permissionAttributes,
@@ -797,7 +798,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 1, 1)
                    && checkNamesAndTargets(permissionAttributes,
@@ -811,7 +812,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 1, 1)
                    && checkNamesAndTargets(permissionAttributes,
@@ -825,7 +826,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 1, 1)
                    && checkNamesAndTargets(permissionAttributes,
@@ -841,7 +842,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 2
                    && checkImportance(permissionAttributes, 1, 1)
                    && checkNamesAndTargets(permissionAttributes,
@@ -855,11 +856,11 @@
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass MyMandatoryTarget MyMandatoryAction1 MyMandatoryAction2"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_PERMISSION_VALUE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_PERMISSION_VALUE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -873,11 +874,11 @@
             allAttributes.put(PermissionAttribute.MANDATORY_ATTRIBUTE_PREFIX + "1",new Attribute("","MyMandatoryClass   MyMandatoryTarget   MyMandatoryAction1 MyMandatoryAction2"));
             securityAttributes = new SecurityAttributes();
             securityAttributes.addDescriptorAttributes(allAttributes);
-            assertTrue(INVALID_PERMISSION_VALUE_MSG, false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(INVALID_PERMISSION_VALUE_MSG + e.getOtaStatusCode() + " " + e.getShortMessage() + "," + e.getDetailedMessage(),
+            assertWithTrace(
                        e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHENTICATION_FAILURE
                        && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                        && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED,
@@ -890,7 +891,7 @@
         securityAttributes = new SecurityAttributes();
         securityAttributes.addDescriptorAttributes(allAttributes);
         permissionAttributes = securityAttributes.getPermissionAttributes();
-        assertTrue(permissionAttributes != null
+        assertWithTrace(permissionAttributes != null
                    && permissionAttributes.length == 1
                    && checkImportance(permissionAttributes, 1, 0)
                    && checkNamesAndTargets(permissionAttributes,
@@ -932,7 +933,7 @@
                 allAttributes.put(PermissionAttribute.OPTIONAL_ATTRIBUTE_PREFIX + "1",new Attribute("",className + "            MyMandatoryTarget  MyMandatoryAction      "));
                 securityAttributes = new SecurityAttributes();
                 securityAttributes.addDescriptorAttributes(allAttributes);
-                assertTrue(INVALID_PERMISSION_VALUE_MSG, false);
+                assertWithTrace(false);
             }
             catch (InvalidAttributeException e)
             {
@@ -1110,6 +1111,13 @@
         return (checkBoolArray(certsChecked) && checkBoolArray(signaturesChecked));
     }
 
+    private void assertWithTrace(boolean aCondition)
+    {
+        assertTrue("" + assertTrace, aCondition);
+        assertTrace++;
+    }
+
+
     private int findString(String str, String[] strings)
     {
         for (int i=0; i<strings.length; i++)
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -48,6 +48,7 @@
 public class SecurityExtensionsTests extends TestCase implements InstallerMain
 {
     private static String TEST_DATA_DIR;
+    int assertTrace = 0;
 
     static
     {
@@ -128,7 +129,7 @@
         SecurityAttributes securityAttributes;
         AuthenticationCredentials[] credentials;
         // package names
-        assertTrue(find(SecurityExtensionsReader.getExtProtectedPackages(), new String[] {"com.nokia.ext1.internal.", "com.nokia.ext2.internal."})
+        assertWithTrace(find(SecurityExtensionsReader.getExtProtectedPackages(), new String[] {"com.nokia.ext1.internal.", "com.nokia.ext2.internal."})
                    && !find(SecurityExtensionsReader.getExtProtectedPackages(), new String[] {"com.nokia.ext1.public."})
                    && !find(SecurityExtensionsReader.getExtProtectedPackages(), new String[] {"com.nokia.ext2.public."})
                    && find(SecurityExtensionsReader.getExtRestrictedPackages(), new String[] {"com.nokia.ext1.public.", "com.nokia.ext2.public."})
@@ -136,10 +137,10 @@
                    && !find(SecurityExtensionsReader.getExtRestrictedPackages(), new String[] {"com.nokia.ext2.internal."}));
         // mappings
         MIDPPermission perm = SecurityExtensionsReader.getExtPermission("com.nokia.ext1.public.Ext1Perm");
-        assertTrue(perm != null && perm.getName() != null && perm.getName().equals("com.nokia.ext1.internal.Ext1Perm") && perm.getTarget() != null && perm.getTarget().equals("*")&& perm.getActionList() == null);
-        assertTrue(SecurityExtensionsReader.getExtPermission("com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl") == null);
+        assertWithTrace(perm != null && perm.getName() != null && perm.getName().equals("com.nokia.ext1.internal.Ext1Perm") && perm.getTarget() == null && perm.getActionList() == null);
+        assertWithTrace(SecurityExtensionsReader.getExtPermission("com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl") == null);
         perm = SecurityExtensionsReader.getExtPermission("com.nokia.ext2.public.Ext2Perm");
-        assertTrue(perm != null && perm.getName() != null && perm.getName().equals("com.nokia.ext2.internal.Ext2Perm") && perm.getTarget() != null && perm.getTarget().equals("*")&& perm.getActionList() == null);
+        assertWithTrace(perm != null && perm.getName() != null && perm.getName().equals("com.nokia.ext2.internal.Ext2Perm") && perm.getTarget() == null && perm.getActionList() == null);
         // policies (unsigned suite, check that ext1 perms are granted and the base permissions were not altered)
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session,appUID);
@@ -153,9 +154,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-        assertTrue(checkGrantedPermissions(storage.readGrantedPermissions(appUID),
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions(appUID, null, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(checkGrantedPermissions(storage.readGrantedPermissions(appUID),
                                            new PolicyBasedPermissionImpl[]
                                            {
                                                new PolicyBasedPermissionImpl("com.nokia.ext1.internal.Ext1Perm", "ext1.target1", "ext1.action1", new UserSecuritySettingsImpl("Ext1", UserSecuritySettings.ONESHOT_INTERACTION_MODE, new int[] {UserSecuritySettings.ONESHOT_INTERACTION_MODE, UserSecuritySettings.SESSION_INTERACTION_MODE, UserSecuritySettings.BLANKET_INTERACTION_MODE, UserSecuritySettings.NO_INTERACTION_MODE})),
@@ -180,11 +183,11 @@
             securityAttributes.addDescriptorAttributes(allAttributes);
             credentials = authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
             permissionGranter.grantJadPermissions(appUID, null, securityAttributes.getPermissionAttributes(), credentials);
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(
+            assertWithTrace(
                 e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                 && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                 && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -205,11 +208,11 @@
             securityAttributes.addDescriptorAttributes(allAttributes);
             credentials = authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
             permissionGranter.grantJadPermissions(appUID, null, securityAttributes.getPermissionAttributes(), credentials);
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(
+            assertWithTrace(
                 e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                 && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                 && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -230,11 +233,11 @@
             securityAttributes.addDescriptorAttributes(allAttributes);
             credentials = authenticationModule.authenticateJad(appUID,null,securityAttributes.getAuthenticationAttributes());
             permissionGranter.grantJadPermissions(appUID, null, securityAttributes.getPermissionAttributes(), credentials);
-            assertTrue(false);
+            assertWithTrace(false);
         }
         catch (InvalidAttributeException e)
         {
-            assertTrue(
+            assertWithTrace(
                 e.getOtaStatusCode() == OtaStatusCode.APPLICATION_AUTHORIZATION_FAILURE
                 && e.getShortMessage().equals(errorMessage.get(InstallerErrorMessage.INST_CORRUPT_PKG, null))
                 && e.getDetailedMessage().equals(detailedErrorMessage.get(InstallerDetailedErrorMessage.ATTR_UNSUPPORTED,
@@ -256,9 +259,11 @@
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         securityAttributes.addManifestAttributes(allAttributes);
-        authenticationModule.authenticateJar(session, appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
-        permissionGranter.grantJarPermissions(session, appUID, null, securityAttributes.getPermissionAttributes());
-        assertTrue(checkGrantedPermissions(storage.readGrantedPermissions(appUID),
+        credentials = authenticationModule.authenticateJar(appUID,null,TEST_DATA_DIR + "security_tmp" +  System.getProperty("file.separator") + "HelloWorld.jar", false);
+        authenticationModule.addSecurityData(session, appUID, null);
+        permissionGranter.grantJarPermissions(appUID, null, securityAttributes.getPermissionAttributes(), credentials);
+        permissionGranter.addSecurityData(session, appUID, null);
+        assertWithTrace(checkGrantedPermissions(storage.readGrantedPermissions(appUID),
                                            new PolicyBasedPermissionImpl[]
                                            {
                                                new PolicyBasedPermissionImpl("com.nokia.ext2.internal.Ext2Perm", "ext2.target1", "ext2.action1", new UserSecuritySettingsImpl("Ext1", UserSecuritySettings.BLANKET_INTERACTION_MODE, new int[] {UserSecuritySettings.BLANKET_INTERACTION_MODE, UserSecuritySettings.NO_INTERACTION_MODE})),
@@ -269,6 +274,12 @@
                                            }));
     }
 
+    private void assertWithTrace(boolean aCondition)
+    {
+        assertTrue("" + assertTrace, aCondition);
+        assertTrace++;
+    }
+
     private static boolean checkGrantedPermissions(Vector grantedPermissions, PolicyBasedPermissionImpl[] expectedPerms)
     {
         if (grantedPermissions == null)
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorageTests.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorageTests.java	Thu Sep 02 20:20:40 2010 +0300
@@ -188,70 +188,6 @@
         storage.removeGrantedPermissions(appUID);
         readPermissions = storage.readGrantedPermissions(appUID);
         assertTrue(readPermissions == null);
-        // full read/write/remove cycle for update -> the old settings are retained
-        storage.removeGrantedPermissions(appUID);
-        grantedPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(grantedPermissions == null);
-        grantedPermissions = new Vector();
-        storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        storage.removeGrantedPermissions(appUID);
-        assertTrue(true);
-        grantedPermissions.addElement(new PolicyBasedPermissionImpl(
-                                          "permission1",
-                                          "target1",
-                                          "action1",
-                                          PolicyBasedPermission.ALLOWED_TYPE));
-        grantedPermissions.addElement(new PolicyBasedPermissionImpl(
-                                          "permission2",
-                                          "target2",
-                                          "action2",
-                                          PolicyBasedPermission.ASSIGNED_TYPE));
-        grantedPermissions.addElement(new PolicyBasedPermissionImpl(
-                                          "permission3",
-                                          "target3",
-                                          "action3",
-                                          new UserSecuritySettingsImpl("settingsname",
-                                                                       UserSecuritySettings.ONESHOT_INTERACTION_MODE,
-                                                                       new int[] { UserSecuritySettings.ONESHOT_INTERACTION_MODE,
-                                                                                   UserSecuritySettings.SESSION_INTERACTION_MODE,
-                                                                                   UserSecuritySettings.BLANKET_INTERACTION_MODE,
-                                                                                   UserSecuritySettings.NO_INTERACTION_MODE
-                                                                                 })));
-        storage.writeGrantedPermissions(appUID, null, grantedPermissions);
-        readPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(readPermissions != null
-                   && readPermissions.size() == grantedPermissions.size()
-                   && checkGrantedPermissions(readPermissions, grantedPermissions));
-        grantedPermissions2 = new Vector();
-        grantedPermissions2.addElement(new PolicyBasedPermissionImpl(
-                                           "permission1",
-                                           "target1",
-                                           "action1",
-                                           PolicyBasedPermission.ALLOWED_TYPE));
-        grantedPermissions2.addElement(new PolicyBasedPermissionImpl(
-                                           "permission2",
-                                           "target2",
-                                           "action2",
-                                           PolicyBasedPermission.ASSIGNED_TYPE));
-        grantedPermissions2.addElement(new PolicyBasedPermissionImpl(
-                                           "permission3",
-                                           "target3",
-                                           "action3",
-                                           new UserSecuritySettingsImpl("settingsname",
-                                                                        UserSecuritySettings.SESSION_INTERACTION_MODE,
-                                                                        new int[] { UserSecuritySettings.ONESHOT_INTERACTION_MODE,
-                                                                                    UserSecuritySettings.SESSION_INTERACTION_MODE,
-                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
-                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
-                                                                                  })));
-        storage.writeGrantedPermissions(appUID, appUID, grantedPermissions2);
-        readPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(readPermissions != null
-                   && readPermissions.size() == grantedPermissions.size()
-                   && checkGrantedPermissions(readPermissions, grantedPermissions));
-        storage.removeGrantedPermissions(appUID);
-        readPermissions = storage.readGrantedPermissions(appUID);
-        assertTrue(readPermissions == null);
         // full read/write/remove cycle with different valid values for permissions and user settings
         storage.removeGrantedPermissions(appUID);
         grantedPermissions = storage.readGrantedPermissions(appUID);
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/rt/SystemPropertyUtils.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/rt/SystemPropertyUtils.java	Thu Sep 02 20:20:40 2010 +0300
@@ -98,7 +98,7 @@
 
                 try
                 {
-                    Class clazz = clazz = Class.forName(className);
+                    Class clazz = Class.forName(className);
                     Object providerImpl = clazz.newInstance();
 
                     boolean isFrozen = false;
--- a/javacommons/utils/src.s60/properties.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/utils/src.s60/properties.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -103,7 +103,9 @@
     JELOG2(EUtils);
 
     // microedition.locale
-    switch (User::Language()) {
+    ILOG1(EUtils, "User::Language: %d", User::Language()); 
+    // KDialectMask enables support for operator specific language variants
+    switch (User::Language() & KDialectMask) {
         case ELangAfrikaans:
             return S60CommonUtils::NativeToJavaString(*env, KMicroeditionLocaleAfrikaans);
         case ELangAlbanian:
--- a/javacommons/utils/src/logger.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javacommons/utils/src/logger.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -340,14 +340,16 @@
     int logFileNameLen = strlen(fileName);
     TPtr8 fileNamePtr((unsigned char*)fileName, logFileNameLen, logFileNameLen);
     RBuf nameBuf;
-    nameBuf.Create(fileNamePtr.MaxLength());
-    nameBuf.Copy(fileNamePtr);
+    int rc = nameBuf.Create(fileNamePtr.MaxLength());
+    if (rc == KErrNone)
+    {
+        nameBuf.Copy(fileNamePtr);
 
-    TInt len = strlen(txt);
-    TPtr8 ptr((unsigned char*)txt, len, len);
-    RFileLogger::Write(KJavaLogDir, nameBuf, EFileLoggingModeAppendRaw, ptr);
-
-    nameBuf.Close();
+        TInt len = strlen(txt);
+        TPtr8 ptr((unsigned char*)txt, len, len);
+        RFileLogger::Write(KJavaLogDir, nameBuf, EFileLoggingModeAppendRaw, ptr);
+        nameBuf.Close();
+    }
 
 #else //J_LOG_USE_RLOGGER_ENABLED
 
--- a/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -134,7 +134,7 @@
 
             /* security related stuff */
             ApplicationUtils appUtils = ApplicationUtils.getInstance();
-            DatagramPermissionImpl per = new DatagramPermissionImpl("datagram://");
+            DatagramPermissionImpl per = new DatagramPermissionImpl(DatagramPermissionImpl.SERVER_TARGET);
             Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                        "calling check permissions from UDPDatagramConnectionImpl");
             appUtils.checkPermission(per);
@@ -171,7 +171,7 @@
             {
                 /* security related stuff, server mode datagram connection */
                 ApplicationUtils appUtils = ApplicationUtils.getInstance();
-                DatagramPermissionImpl per = new DatagramPermissionImpl("datagram://");
+                DatagramPermissionImpl per = new DatagramPermissionImpl(DatagramPermissionImpl.SERVER_TARGET);
                 Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                            "calling check permissions from UDPDatagramConnectionImpl");
                 appUtils.checkPermission(per);
@@ -183,7 +183,7 @@
             {
                 /* security related stuff, client mode datagram connection */
                 ApplicationUtils appUtils = ApplicationUtils.getInstance();
-                DatagramPermissionImpl per = new DatagramPermissionImpl("datagram://*");
+                DatagramPermissionImpl per = new DatagramPermissionImpl(DatagramPermissionImpl.CLIENT_TARGET);
                 Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                            "calling check permissions from UDPDatagramConnectionImpl");
                 appUtils.checkPermission(per);
--- a/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -25,6 +25,13 @@
 
 public class DatagramPermissionImpl extends PermissionBase
 {
+    /**
+     * Constants for identifying the target/uri of connection: client or server
+     */
+     public static String CLIENT_TARGET = "datagram://*";
+     public static String SERVER_TARGET = "datagram://";
+
+     private String iTarget;
 
     /**
      * Returns the question (as localized text) associated with the security
@@ -37,6 +44,7 @@
     public DatagramPermissionImpl(String uri)
     {
         super(uri);
+        iTarget = uri;
     }
 
     public String getSecurityPromptQuestion(int aInteractionMode)
@@ -56,6 +64,10 @@
 
     public String toString()
     {
+        if (SERVER_TARGET.equals(iTarget))
+        {
+            return "javax.microedition.io.Connector.datagramreceiver";
+        }
         return "javax.microedition.io.Connector.datagram";
     }
 
@@ -63,7 +75,12 @@
     {
         if (p instanceof DatagramPermissionImpl)
         {
-            return true;
+            DatagramPermissionImpl o = (DatagramPermissionImpl)p;
+            if ((iTarget != null && iTarget.equals(o.getTarget()))
+                || (iTarget == null && o.getTarget() == null))
+            {
+                return true;
+            }
         }
         return false;
     }
@@ -88,4 +105,8 @@
         return null;
     }
 
+    String getTarget()
+    {
+        return iTarget;
+    }
 }
\ No newline at end of file
--- a/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/PushValidatorImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/PushValidatorImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -125,7 +125,7 @@
         /* security check */
         Logger.LOG(Logger.ESOCKET, Logger.EInfo,"datagram - push validator : before security check");
         ApplicationUtils appUtils = ApplicationUtils.getInstance();
-        DatagramPermissionImpl per = new DatagramPermissionImpl("datagram://");
+        DatagramPermissionImpl per = new DatagramPermissionImpl(DatagramPermissionImpl.SERVER_TARGET);
         appUtils.checkPermission(per);
         /* security check */
         Logger.LOG(Logger.ESOCKET, Logger.EInfo,"datagram - push validator : after security check");
--- a/javaextensions/datagram/datagram/src.s60/apnsettings.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/datagram/datagram/src.s60/apnsettings.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -42,6 +42,7 @@
             char * fret = if_indextoname(aApn,interfacename);
             strcpy(ifr.ifr_name, interfacename);
             ILOG1(ESOCKET, "interface name is %s",interfacename);
+            delete interfacename;
         }
         else
         {
--- a/javaextensions/datagram/datagram/src/nativedatagramconnection.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/datagram/datagram/src/nativedatagramconnection.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -133,6 +133,7 @@
         writeBuffer = new char[requiredNativeBufferLength + 1];
     }
     /* Copy the data to be written from java buffer to the native buffer.  */
+    if (writeBuffer != NULL)
     JNIArrayUtils::CopyToNative(aJni, aJavaBuffer, aOffset,
                                 requiredNativeBufferLength, writeBuffer);
 
--- a/javaextensions/iapinfo/build/javaiapinfo.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/build/javaiapinfo.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -24,7 +24,8 @@
     SOURCES += ../src.s60/javacommdb.cpp \
         ../src.s60/iapinfoimpl.cpp \
         ../src.s60/javaapncontrol.cpp \
-        ../src.s60/stringbuffer.cpp 
+        ../src.s60/stringbuffer.cpp \
+        ../src.s60/iapinfosession.cpp
     LIBS +=   -leuser -lcommsdat  -lcommdb -lagentdialog -lcmmanager
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/iapinfo/inc.s60/iapinfosession.h	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* 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:  JavaCommDB class implementation
+ *
+*/
+
+#ifndef IAINFOSESSION_H
+#define IAINFOSESSION_H
+
+
+#include <commsdattypesv1_1.h>
+#include <commsdat.h>
+#include <metadatabase.h>  
+#include "functionserver.h"
+#include <e32base.h>
+
+using namespace java::util;
+
+class IapInfoSession  : public FunctionServer 
+{
+  public:  static IapInfoSession* NewL();
+    
+  private:
+            IapInfoSession();
+            void ConstructL();
+
+    /**
+     * Pointer to the actual DB Session object.
+     * Initialized in the Open() function.
+     */
+  public:
+        CommsDat::CMDBSession* iDb;            
+          
+
+
+
+};
+
+#endif // IAINFOSESSION_H
\ No newline at end of file
--- a/javaextensions/iapinfo/inc.s60/javacommdb.h	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/inc.s60/javacommdb.h	Thu Sep 02 20:20:40 2010 +0300
@@ -23,6 +23,7 @@
 #include <commsdat.h>
 #include <metadatabase.h>
 #include "com_nokia_mid_iapinfo_CommsTable.h"
+#include "iapinfosession.h"
 
 using namespace CommsDat;
 
@@ -41,6 +42,8 @@
 public:
 
     ~ JavaCommDB();
+    
+    JavaCommDB(IapInfoSession *aSess);
 
     /**
      * Opens the given table.
@@ -50,12 +53,12 @@
      */
     void OpenL(const TDesC&);
 
+    static void Destroy(JavaCommDB* aObj);
     /**
      * Close the table and delete allocated member objects.
-     * @since S60 v3.0
-     * @return error code
+     * @since S60 v3.0     
      */
-    TInt Close();
+    void Close();
 
     /**
      * Get number of records in the current table.
@@ -133,6 +136,9 @@
      * Initialized in the Open() function.
      */
     CMDBRecordSet<CCDRecordBase>* iTable;
+
+public:    
+    IapInfoSession* iSession; 
 };
 
 #endif // JAVACOMMDB_H
--- a/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/CommsTable.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/CommsTable.java	Thu Sep 02 20:20:40 2010 +0300
@@ -19,6 +19,7 @@
 
 import com.nokia.mj.impl.rt.support.Finalizer;
 import com.nokia.mj.impl.gcf.utils.NativeError;
+import com.nokia.mj.impl.utils.Logger;
 
 //import com.nokia.mj.impl.vmport.VmPort;
 
@@ -131,13 +132,6 @@
 
         iTableName = tableName;
 
-        // create native peer
-        iHandle = _construct();
-        if (iHandle < NativeError.KErrNone)
-        {
-            throw new CommDBException("Native constructor failed!", ERROR_NONE,
-                                      iHandle);
-        }
         // we need this so we can do some cleanup when we are garbage collected
         iFinalizer = createFinalizer();
         state = CREATED;
@@ -146,18 +140,20 @@
     /**
      * Opens the corresponding CommDB table.
      */
-    public void open() throws CommDBException
+    public void open(int aNativeSessionHandle) throws CommDBException
     {
 
-        int err = _open(iHandle, iTableName);
-        if (NativeError.KErrNone == err)
+        iHandle = _open(aNativeSessionHandle, iTableName);
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "iHandle ="+iHandle);
+
+        if (iHandle > 0)
         {
             state = OPENED;
             readFieldValues();
         }
         else
         {
-            throw new CommDBException("Open failed!", ERROR_OPEN_FAILED, err);
+            throw new CommDBException("Open failed!", ERROR_OPEN_FAILED, iHandle);
         }
 
     }
@@ -185,6 +181,7 @@
     {
 
         int rec = 0;
+
         rec = _findByName(iHandle, recordName);
         if (rec >= 0)
         {
@@ -230,6 +227,7 @@
      */
     public int getRecordCount() throws CommDBException
     {
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo,"+getRecordCount()");
         return _getRecordCount(iHandle);
     }
 
@@ -326,13 +324,6 @@
     /* Native funcions */
     /*----------------------------------------------------------------*/
     /*
-     * Creates native peer.
-     *
-     * @return handle for native peer
-     */
-    private static native int _construct();
-
-    /*
      * Destructs native peer.
      *
      * @param aHandle - handle for native peer
@@ -346,7 +337,7 @@
      *
      * @return - error code
      */
-    private static native int _open(int aHandle, String tableName);
+    private static native int _open(int aSessionHandle, String tableName);
 
     /*
      * Close the actual CommDB table.
--- a/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfo.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfo.java	Thu Sep 02 20:20:40 2010 +0300
@@ -34,7 +34,7 @@
      * Please refer IapInfo Spec.
      */
 
-    public static IAPInfo getIAPInfo() throws IAPInfoException
+    public synchronized static IAPInfo getIAPInfo() throws IAPInfoException
     {
         if (instance == null)
             instance = new IAPInfoImpl();
--- a/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfoImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/javasrc.s60/com/nokia/mid/iapinfo/IAPInfoImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -35,16 +35,14 @@
 class IAPInfoImpl extends IAPInfo
 {
 
-    // variable to store the network preferences
-    private IAPTable iIAPTable = null;
-
+    private int iSessionHandle;
     static
     {
         try
         {
-            Logger.ILOG(Logger.ESOCKET, "loading javaiapinfo");
+            Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "loading javaiapinfo");
             Jvm.loadSystemLibrary("javaiapinfo");
-            Logger.ILOG(Logger.ESOCKET, "javaiapinfo loaded");
+            Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "javaiapinfo loaded");
         }
         catch (Exception e)
         {
@@ -57,42 +55,48 @@
      */
     public IAPInfoImpl() throws IAPInfoException
     {
+        iSessionHandle = _createSession();
+        if (iSessionHandle <0)
+            throw new IAPInfoException("Error: symbian os error: "+iSessionHandle);
+
+    }
+
+    /**
+     * Please refer IapInfo Spec.
+     */
+    public synchronized AccessPoint[] getAccessPoints() throws IAPInfoException
+    {
+        IAPTable iIAPTable = null;
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getAccessPoints()  - this = "+Thread.currentThread().toString() +"hascode= " +Thread.currentThread().hashCode());
         try
         {
-            this.iIAPTable = new IAPTable();
+            iIAPTable = new IAPTable();
         }
         catch (CommDBException e)
         {
             e.printStackTrace();
             throw new IAPInfoException(e.getMessage());
         }
-    }
-
-    /**
-     * Please refer IapInfo Spec.
-     */
-    public AccessPoint[] getAccessPoints() throws IAPInfoException
-    {
         AccessPoint[] _ac = null;
         try
         {
-            this.iIAPTable.open();
-            int _nr_of_access_points = this.iIAPTable.getRecordCount();
+            iIAPTable.open(iSessionHandle);
+            int _nr_of_access_points = iIAPTable.getRecordCount();
             _ac = new AccessPoint[_nr_of_access_points];
             for (int i = 0; i < _nr_of_access_points; i++)
             {
-                AccessPoint _c = new AccessPoint(this.iIAPTable.iRecordId,
-                                                 this.iIAPTable.iRecordName, this.iIAPTable.iBearerType,
-                                                 this.iIAPTable.iServiceType);
+                AccessPoint _c = new AccessPoint(iIAPTable.iRecordId,
+                                                 iIAPTable.iRecordName, iIAPTable.iBearerType,
+                                                 iIAPTable.iServiceType);
                 _ac[i] = _c;
                 if (i != _nr_of_access_points - 1)
-                    this.iIAPTable.nextRecord();
+                    iIAPTable.nextRecord();
             }
-            this.iIAPTable.close();
+            iIAPTable.close();
         }
         catch (CommDBException _exception)
         {
-            this.iIAPTable.close();
+            iIAPTable.close();
             throw new IAPInfoException(_exception.getMessage());
         }// end of catch
         return _ac;
@@ -101,24 +105,35 @@
     /**
      * Please refer IapInfo Spec.
      */
-    public AccessPoint getAccessPoint(int aID) throws IAPInfoException
+    public synchronized AccessPoint getAccessPoint(int aID) throws IAPInfoException
     {
         AccessPoint _ac = null;
+        IAPTable iIAPTable = null;
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getAccessPoint() - aID = "+aID +" this = "+Thread.currentThread().toString() +"hascode= " +Thread.currentThread().hashCode());
         try
         {
-            this.iIAPTable.open();
-            int _ret = this.iIAPTable.findById(aID);
+            iIAPTable = new IAPTable();
+        }
+        catch (CommDBException e)
+        {
+            e.printStackTrace();
+            throw new IAPInfoException(e.getMessage());
+        }
+        try
+        {
+            iIAPTable.open(iSessionHandle);
+            int _ret = iIAPTable.findById(aID);
             if (_ret != IAPTable.RECORD_NOT_FOUND)
             {
-                _ac = new AccessPoint(this.iIAPTable.iRecordId,
-                                      this.iIAPTable.iRecordName, this.iIAPTable.iBearerType,
-                                      this.iIAPTable.iServiceType);
+                _ac = new AccessPoint(iIAPTable.iRecordId,
+                                      iIAPTable.iRecordName, iIAPTable.iBearerType,
+                                      iIAPTable.iServiceType);
             }
-            this.iIAPTable.close();
+            iIAPTable.close();
         }
         catch (CommDBException _exception)
         {
-            this.iIAPTable.close();
+            iIAPTable.close();
             throw new IAPInfoException(_exception.getMessage());
         }// end catch
         return _ac;
@@ -127,8 +142,19 @@
     /**
      * Please refer IapInfo Spec.
      */
-    public AccessPoint getAccessPoint(String aName) throws IAPInfoException
+    public synchronized AccessPoint getAccessPoint(String aName) throws IAPInfoException
     {
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getAccessPoint() - aName = "+aName +" this = "+Thread.currentThread().toString() +"hascode= " +Thread.currentThread().hashCode());
+        IAPTable iIAPTable = null;
+        try
+        {
+            iIAPTable = new IAPTable();
+        }
+        catch (CommDBException e)
+        {
+            e.printStackTrace();
+            throw new IAPInfoException(e.getMessage());
+        }
         if (aName == null)
         {
             throw new IAPInfoException("Parameter is NULL");
@@ -136,57 +162,71 @@
         AccessPoint _ac = null;
         try
         {
-            this.iIAPTable.open();
-            int _ret = this.iIAPTable.findByName(aName);
+            iIAPTable.open(iSessionHandle);
+            Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getAccessPoint() - aName = after iaptable.open()");
+            int _ret = iIAPTable.findByName(aName);
             if (_ret != IAPTable.RECORD_NOT_FOUND)
             {
-                _ac = new AccessPoint(this.iIAPTable.iRecordId,
-                                      this.iIAPTable.iRecordName, this.iIAPTable.iBearerType,
-                                      this.iIAPTable.iServiceType);
+                _ac = new AccessPoint(iIAPTable.iRecordId,
+                                      iIAPTable.iRecordName, iIAPTable.iBearerType,
+                                      iIAPTable.iServiceType);
             }
-            this.iIAPTable.close();
+            iIAPTable.close();
         }
         catch (CommDBException _exception)
         {
-            this.iIAPTable.close();
+            iIAPTable.close();
             throw new IAPInfoException(_exception.getMessage());
         }// end catch
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "-getAccessPoint() - aName = "+aName);
         return _ac;
+//return null;
     }
 
     /**
      * Please refer IapInfo Spec.
      */
-    public AccessPoint getLastUsedAccessPoint() throws IAPInfoException
+    public synchronized AccessPoint getLastUsedAccessPoint() throws IAPInfoException
     {
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getLastUsedAccessPoint() " +" this = "+Thread.currentThread().toString() +"hascode= " +Thread.currentThread().hashCode());
+        IAPTable iIAPTable = null;
+        try
+        {
+            iIAPTable = new IAPTable();
+        }
+        catch (CommDBException e)
+        {
+            e.printStackTrace();
+            throw new IAPInfoException(e.getMessage());
+        }
         APNControl _control = new APNControl();
         int _lastIAP = _control.getLastIAP();
         AccessPoint _ac = null;
         int _nr_of_access_points = 0;
         try
         {
-            this.iIAPTable.open();
-            _nr_of_access_points = this.iIAPTable.getRecordCount();
+            iIAPTable.open(iSessionHandle);
+            _nr_of_access_points = iIAPTable.getRecordCount();
             for (int i = 0; i < _nr_of_access_points; i++)
             {
-                if (this.iIAPTable.iRecordId == _lastIAP)
+                if (iIAPTable.iRecordId == _lastIAP)
                 {
-                    _ac = new AccessPoint(this.iIAPTable.iRecordId,
-                                          this.iIAPTable.iRecordName,
-                                          this.iIAPTable.iBearerType,
-                                          this.iIAPTable.iServiceType);
+                    _ac = new AccessPoint(iIAPTable.iRecordId,
+                                          iIAPTable.iRecordName,
+                                          iIAPTable.iBearerType,
+                                          iIAPTable.iServiceType);
                     break;
                 }// end if
                 if (i != _nr_of_access_points - 1)
                 {
-                    this.iIAPTable.nextRecord();
+                    iIAPTable.nextRecord();
                 }
             }// end for
-            this.iIAPTable.close();
+            iIAPTable.close();
         }
         catch (CommDBException _exception)
         {
-            this.iIAPTable.close();
+            iIAPTable.close();
             throw new IAPInfoException(_exception.getMessage());
         }
         return _ac;
@@ -294,16 +334,27 @@
     /**
      * Please refer IapInfo Spec.
      */
-    public AccessPoint[] getConnectionPreferences() throws IAPInfoException
+    public synchronized AccessPoint[] getConnectionPreferences() throws IAPInfoException
     {
 
         ConnectionPreferencesTable _prefTable = null;
         AccessPoint[] _ac = null;
+        IAPTable iIAPTable = null;
+        Logger.LOG(Logger.EJavaIapInfo,Logger.EInfo, "+getConnectionPreferences() " +" this = "+Thread.currentThread().toString() +"hascode= " +Thread.currentThread().hashCode());
+        try
+        {
+            iIAPTable = new IAPTable();
+        }
+        catch (CommDBException e)
+        {
+            e.printStackTrace();
+            throw new IAPInfoException(e.getMessage());
+        }
 
         try
         {
             _prefTable = new ConnectionPreferencesTable();
-            _prefTable.open();
+            _prefTable.open(iSessionHandle);
             int recNr = _prefTable.getRecordCount();
 
             HelperObject[] hp = new HelperObject[recNr];
@@ -336,20 +387,20 @@
             }// end while
 
             // get the AccesssPoints from IAPTable
-            this.iIAPTable.open();
+            iIAPTable.open(iSessionHandle);
 
             Vector apv = new Vector();
             for (int i = 0; i < recNr; i++)
             {
-                // int _ret = this.iIAPTable.findById( ids[ i ] );
-                int _ret = this.iIAPTable.findById(hp[i].Id);
+                // int _ret = iIAPTable.findById( ids[ i ] );
+                int _ret = iIAPTable.findById(hp[i].Id);
                 if (_ret != IAPTable.RECORD_NOT_FOUND)
                 {
 
-                    apv.addElement(new AccessPoint(this.iIAPTable.iRecordId,
-                                                   this.iIAPTable.iRecordName,
-                                                   this.iIAPTable.iBearerType,
-                                                   this.iIAPTable.iServiceType));
+                    apv.addElement(new AccessPoint(iIAPTable.iRecordId,
+                                                   iIAPTable.iRecordName,
+                                                   iIAPTable.iBearerType,
+                                                   iIAPTable.iServiceType));
                 }// end if
             }// end for
 
@@ -359,14 +410,14 @@
                 _ac[i] = (AccessPoint) apv.elementAt(i);
             }
 
-            this.iIAPTable.close();
+            iIAPTable.close();
             _prefTable.close();
 
         }
         catch (CommDBException e)
         {
             _prefTable.close();
-            this.iIAPTable.close();
+            iIAPTable.close();
             throw new IAPInfoException(e.getMessage());
         }
         return _ac;
@@ -427,4 +478,6 @@
     static native String _getDestinationNetworkByName(String aName)
     throws IAPInfoException;
 
+    private native int _createSession();
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/iapinfo/src.s60/iapinfosession.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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:  JavaCommDB class implementation
+ *
+*/
+#include "iapinfosession.h"
+#include "fs_methodcall.h"
+
+#include "logger.h"
+
+using namespace CommsDat;
+
+IapInfoSession::IapInfoSession(): java::util::FunctionServer("MyIapServer")
+{
+    createServerToNewThread();
+
+}
+
+IapInfoSession* IapInfoSession::NewL()
+{
+    LOG(EJavaIapInfo, EInfo, "IapInfoSession + NewL()");
+    IapInfoSession* self =   new(ELeave) IapInfoSession();
+    CallMethodL(self, &IapInfoSession::ConstructL,self);
+    return self;
+
+}
+
+void IapInfoSession::ConstructL()
+{
+    iDb = CMDBSession::NewL(KCDVersion1_1);
+
+}
+
--- a/javaextensions/iapinfo/src.s60/javacommdb.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/iapinfo/src.s60/javacommdb.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -24,6 +24,9 @@
 #include "logger.h"
 #include "javajniutils.h"
 
+#include "fs_methodcall.h"
+#include "com_nokia_mid_iapinfo_IAPInfoImpl.h"
+
 using namespace CommsDat;
 using namespace java::util;
 
@@ -35,49 +38,65 @@
 _LIT(KFieldNameRecordId, "RecordId");
 _LIT(KFieldNameName, "Name");
 
+JNIEXPORT jint JNICALL Java_com_nokia_mid_iapinfo_IAPInfoImpl__1createSession
+(JNIEnv *, jobject)
+{
+    IapInfoSession *sess = NULL;
+    TRAPD(err,sess =  IapInfoSession::NewL(););
+    if (err!=KErrNone)
+    {
+        return err;
+    }
+    return reinterpret_cast<int>(sess);
+
+}
+
+
 JNIEXPORT void JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1destroy(JNIEnv* ,
         jclass,
-        jint aHandle)
+        jint /*aHandle*/)
 {
-    LOG1(ESOCKET, EInfo, "CJAVACOMMDB + destroy() handle: %D", aHandle);
-    JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    delete commdb;
+    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + destroy()");
+    // JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
+    //  delete commdb;
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - destroy()");
 }
 
-JNIEXPORT jint JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1construct(JNIEnv* ,
-        jclass)
+
+JNIEXPORT jint JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1open(JNIEnv* aJni,
+        jclass, jint aSessionHandle,
+        jstring aTableName)
 {
-    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + construct()");
-    JavaCommDB *cdb = new JavaCommDB();
+    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + open()gggggggggg");
+    IapInfoSession* session = reinterpret_cast<IapInfoSession *>(aSessionHandle);
+    JavaCommDB *cdb = new JavaCommDB(session);
+    JStringUtils table(*aJni, aTableName);
+    int err = -1;
+    TRAP(err,CallMethodL(cdb, &JavaCommDB::OpenL,table,cdb->iSession););
     TInt handle = reinterpret_cast<jint>(cdb);
-    LOG1(EJavaIapInfo, EInfo, "CJAVACOMMDB - construct() handle: %D", handle);
+    if (err < 0)
+        handle = err;
+    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - open()hhhhhh");
     return handle;
 }
 
-JNIEXPORT jint JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1open(JNIEnv* aJni,
-        jclass, jint aHandle,
-        jstring aTableName)
-{
-    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + open()");
-    JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    JStringUtils table(*aJni, aTableName);
-
-    //LOG1(EJavaIapInfo,  EInfo,  "CJAVACOMMDB opening table: %S", table );
-    TRAPD(error, commdb->OpenL(table));
-    LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - open()");
-    return error;
-}
 
 JNIEXPORT void JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1close(JNIEnv* ,
         jclass, jint aHandle)
 {
     LOG1(EJavaIapInfo, EInfo, "CJAVACOMMDB + close() handle: %D", aHandle);
     JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    TRAP_IGNORE(commdb->Close());
+    CallMethod(commdb, &JavaCommDB::Close,commdb->iSession);
+    //TRAP_IGNORE(commdb->Close());
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - close()");
 }
 
+void JavaCommDB::Destroy(JavaCommDB* aObj)
+{
+    delete aObj;
+
+}
+
 JNIEXPORT jint JNICALL Java_com_nokia_mid_iapinfo_CommsTable__1getRecordCount(JNIEnv* ,
         jclass,
         jint aHandle)
@@ -85,7 +104,8 @@
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + getRecordCount()");
     JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
     TInt count = 0;
-    count = commdb->GetRecordCount();
+    CallMethod(count, commdb, &JavaCommDB::GetRecordCount,commdb->iSession);
+    //count = commdb->GetRecordCount();
     LOG1(EJavaIapInfo, EInfo, "CJAVACOMMDB returning value: %D", count);
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - getRecordCount()");
     return count;
@@ -104,7 +124,9 @@
     JStringUtils field(*aJni, aFieldName);
 
     //LOG1(EJavaIapInfo,  EInfo,  "CJAVACOMMDB  reading field value: %S", field );
-    TRAPD(err, value = commdb->GetIntFieldValueL(field));
+
+    TRAPD(err,CallMethodL(value, commdb, &JavaCommDB::GetIntFieldValueL,field,commdb->iSession););
+    //TRAPD(err, value = commdb->GetIntFieldValueL(field));
 
     // Put the native error code into the Java error array
     jint javaError[1] =
@@ -131,7 +153,8 @@
     JStringUtils field(*aJni, aFieldName);
 
     //LOG1(EJavaIapInfo,  EInfo,  "CJAVACOMMDB  reading field value: %S", field );
-    TRAPD(err, value = commdb->GetStringFieldValueL(field));
+    TRAPD(err,CallMethodL(value, commdb, &JavaCommDB::GetStringFieldValueL,field,commdb->iSession););
+    // TRAPD(err, value = commdb->GetStringFieldValueL(field));
     if (NULL != value && KErrNone == err)
     {
         str = S60CommonUtils::NativeToJavaString(*aJni, value->Des());
@@ -153,7 +176,9 @@
 {
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + next()");
     JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    TInt rec = commdb->Next();
+    TInt rec;
+    CallMethod(rec, commdb, &JavaCommDB::Next,commdb->iSession);
+    //TInt rec = commdb->Next();
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - next()");
     return rec;
 }
@@ -174,7 +199,8 @@
     TInt recId = 0;
 
     JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    recId = commdb->FindById(aId);
+    CallMethod(recId, commdb, &JavaCommDB::FindById,aId,commdb->iSession);
+    //recId = commdb->FindById(aId);
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - findById()");
     return recId;
 }
@@ -189,7 +215,10 @@
     JStringUtils name(*aJni, aName);
 
     JavaCommDB* commdb = reinterpret_cast<JavaCommDB *>(aHandle);
-    TRAP(recId, recId = commdb->FindByNameL(name));
+    TRAPD(err,CallMethodL(recId, commdb, &JavaCommDB::FindByNameL,name,commdb->iSession););
+    if (err < KErrNone)
+        recId = err;
+    //TRAP(recId, recId = commdb->FindByNameL(name));
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - findByName()");
     return recId;
 }
@@ -199,6 +228,13 @@
  * ---------------------------------------------------------------------------
  */
 
+JavaCommDB::JavaCommDB(IapInfoSession *aSession)
+{
+    iSession = aSession;
+
+
+}
+
 // ---------------------------------------------------------------------------
 //    Delete allocated member objects.
 // -----------------------------------------------------------------------------
@@ -211,19 +247,18 @@
 
 // ---------------------------------------------------------------------------
 //    Delete allocated member objects.
-//    @return error code
 // -----------------------------------------------------------------------------
-TInt JavaCommDB::Close()
+void JavaCommDB::Close()
 {
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB + Close()");
     iCurrentRecord = 0;
-    delete iTable;
+    if (iTable)
+        delete iTable;
+
     iTable = NULL;
-    delete iDb;
-    iDb = NULL;
 
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - Close()");
-    return KErrNone;
+
 }
 
 // ---------------------------------------------------------------------------
@@ -234,7 +269,7 @@
 void JavaCommDB::OpenL(const TDesC& aTableName)
 {
     //LOG1(EJavaIapInfo, EInfo, "CJAVACOMMDB + OpenL(): open table: %S",   aTableName);
-    iDb = CMDBSession::NewL(KCDVersion1_1);
+    //iDb = CMDBSession::NewL(KCDVersion1_1);
     iCurrentRecord = 0;
 
     if (0 == aTableName.Compare(KIAPTable))
@@ -259,7 +294,8 @@
             "CJAVACOMMDB  OpenL(): ConnectionPreferences table opened.");
     }
     // Load the table
-    iTable->LoadL(*iDb);
+
+    iTable->LoadL(*(iSession->iDb));
     LOG(EJavaIapInfo, EInfo, "CJAVACOMMDB - OpenL()");
 }
 
--- a/javaextensions/pim/cntadapter/src.s60/cpimcontactitemadapter.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/pim/cntadapter/src.s60/cpimcontactitemadapter.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -193,12 +193,12 @@
     JELOG2(EPim);
     const CDesCArray& pimCategories = aItem.ItemData().Categories();
     const TInt pimCategoryCount = pimCategories.Count();
-    TBool* newCategoryTable = new(ELeave) TBool[pimCategoryCount];
-    CleanupArrayDeletePushL(newCategoryTable);
+    CArrayFix<TInt>* newCategoryTable = new(ELeave) CArrayFixFlat<TInt> (pimCategoryCount);
+    CleanupStack::PushL(newCategoryTable);    
     TInt i = 0;
     for (i = 0; i < pimCategoryCount; i++)
     {
-        newCategoryTable[i] = ETrue;
+        newCategoryTable->InsertL(TRUE,i);
     }
 
     CContactIdArray* cardCategories = aCard.GroupsJoinedLC();
@@ -220,14 +220,14 @@
         }
         else
         {
-            // old group
-            newCategoryTable[pos] = EFalse;
+			// old group
+            newCategoryTable->InsertL(FALSE,pos);
         }
     }
     // then add new categories
     for (i = 0; i < pimCategoryCount; i++)
     {
-        if (newCategoryTable[i])
+        if (newCategoryTable->At(i))
         {
             TPtrC category = pimCategories[i];
             iCategoryManager.AddToGroupL(id, category);
--- a/javaextensions/satsa/build/javasatsa.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/satsa/build/javasatsa.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -62,10 +62,8 @@
 								 -lcertstore \
 								 -lcharconv \
 								 -lcms \
-								 -laknnotify \
 								 -leiksrv \
 								 -lctframework \
-								 -lctsecdlgs \
 								 -lcustomapi \
 								 -lefsrv \
 								 -letel \
@@ -78,6 +76,15 @@
 								 -lcryptography \
 
 
+contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_5_0) {
+        LIBS +=    -laknnotify \
+        					 -lctsecdlgs \
+    }
+contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_9_2) {
+        LIBS +=    -laknnotify \
+        					 -lctsecdlgs \
+    }
+		
  }
 
 include(../../../build/omj.pri)
--- a/javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -32,10 +32,15 @@
 #include <charconv.h>
 #include <pkcs10.h>
 #include <secdlg.h>
+
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
 #include <PKIDlg.h>
+#endif
+
 #include <securityerr.h>
 
 
+
 // CONSTANTS
 _LIT(KSTSSymbianKeyStoreLabel, "Software key store");
 _LIT(KSTSSymbianCertificateStoreLabel, "Software certificate store");
@@ -66,7 +71,12 @@
 {
     delete iEncodedCert;
     delete iIssuerAndSerialNumber;
-    
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS	
+    if (iPKIDialog)
+    {
+        iPKIDialog->Release();
+    }
+#endif
     delete iDistinguishedName;
     delete iDisplayName;
     delete iRequestEncoded;
@@ -529,7 +539,9 @@
 //
 void CSTSCredentialManager::ConstructL()
 {
-    
+	#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+    iPKIDialog = PKIDialogFactory::CreateNoteL();
+ #endif
     User::LeaveIfError(iFileServer.Connect());
     iWait = new(ELeave) CActiveSchedulerWait;
     iStore = CUnifiedCertStore::NewL(iFileServer, ETrue);
@@ -614,7 +626,10 @@
     {
         // not found, ok to add
         iState = EAddDialog;
-                        
+        #ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+        iPKIDialog->SaveCertificate(EX509Certificate, EUserCertificate,
+                                    iSubject, iStatus);
+        #endif
         SetActive();
         return;
     }
@@ -714,8 +729,9 @@
     CCTCertInfo* certInfo = (*iCertInfoArray)[ 0 ];
     iState = ERemoveDialog;
     iHandle = certInfo->Handle();
-    
-    
+    #ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+    iPKIDialog->DeleteCertificate(iHandle, iStatus);
+    #endif
     SetActive();
 }
 
@@ -777,8 +793,9 @@
     }
     iState = ECSRDialog;
     iHandle = iKeyInfo->Handle();
-
-   
+		#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+    iPKIDialog->CreateCSR(*iDisplayName, iHandle, iStatus);
+    #endif
     SetActive();
 
 }
@@ -1022,5 +1039,3 @@
     FunctionServer::doServerSideInit();
 
 }
-
-
--- a/javaextensions/satsa/pki/src.s60/cstscredentialmanager.h	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstscredentialmanager.h	Thu Sep 02 20:20:40 2010 +0300
@@ -31,7 +31,9 @@
 
 // FORWARD DECLARATIONS
 class CCTKeyInfo;
-
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS 
+class MPKIDialog;
+#endif
 class CUnifiedCertStore;
 class CUnifiedKeyStore;
 class CX500DistinguishedName;
@@ -348,7 +350,11 @@
 
     // internal error variable
     TInt iError;
-
+    
+#ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS
+    // PKI Dialog, owned
+    MPKIDialog* iPKIDialog;
+#endif
 
     // The actual store, owned
     CUnifiedCertStore* iStore;
--- a/javaextensions/sensor/src.s60/cnetworkfieldintensitysensor.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/sensor/src.s60/cnetworkfieldintensitysensor.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -146,15 +146,16 @@
     SensorData* data = iData[ KNISensorChannel ];
 
     TTime currentTime;
-    if (data->iTimeStamps || (iBufferingPeriod > 0))
-    {
-        currentTime.UniversalTime();
-        if (iStartTime == KErrNotFound)
+   
+        if ((data->iTimeStampsIncluded) || (iBufferingPeriod > 0))
         {
-            iStartTime = currentTime;
+            currentTime.UniversalTime();
+            if (iStartTime == KErrNotFound)
+            {
+                iStartTime = currentTime;
+            }
         }
-    }
-
+    
     // P&S sensors are assumed to have one channel only
     TInt interpretedValue = InterpretValue(aLevel);
 
--- a/javaextensions/sensor/src.s60/csensorbase.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaextensions/sensor/src.s60/csensorbase.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -249,14 +249,13 @@
             matched = ETrue;
             CSensorConditionBase *condition = iConditions[i];
             iConditions.Remove(i);
-            if (iSensorListener)
-            {
-                iSensorListener->ConditionMet(
-                    condition,
-                    condition->GetChannelId(),
-                    currentValue,
-                    javaTime);
-            }
+
+            iSensorListener->ConditionMet(
+                condition,
+                condition->GetChannelId(),
+                currentValue,
+                javaTime);
+          
             delete condition;
         }
     }
@@ -264,6 +263,7 @@
     // Also send all values separately if we have java side custom conditions
     if (iJavaConditionEval)
     {
+        if (iSensorListener != NULL)
         iSensorListener->ConditionMet(0, aChannelId, currentValue, javaTime);
     }
     return matched;
--- a/javamanager/javacaptain/build/javacaptain.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javacaptain/build/javacaptain.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -35,7 +35,7 @@
 LIBS +=  -ljavacomms -ljavaipc -ljavafileutils -ljavastorage
 
 symbian {
-    LIBS += -lefsrv -lAknNotify
+    LIBS += -lefsrv
     TARGET.EPOCHEAPSIZE  = 0x2800 0x100000
     TARGET.EPOCSTACKSIZE = 0x2000
     TARGET.UID2          = 0x200211DC
--- a/javamanager/javacaptain/inc.s60/pmc.h	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javacaptain/inc.s60/pmc.h	Thu Sep 02 20:20:40 2010 +0300
@@ -23,9 +23,6 @@
 
 #include <map>
 
-#include <AknGlobalNote.h>
-
-
 #include "javaoslayer.h"
 #include "logger.h"
 #include "scopedlocks.h"
@@ -143,13 +140,6 @@
         void showErrorNote()
         {
             LOG(EJavaCaptain, EInfo, "Process failed to exit gracefully");
-#ifdef RD_JAVA_EXIT_ERROR_DIALOG
-            //Print the dialog showing that force process kill was done.
-            CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
-            globalNote->ShowNoteL(EAknGlobalErrorNote,
-                                  _L("Midp process failed to exit gracefully."));
-            delete globalNote;
-#endif
         }
 
     private:
--- a/javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -26,7 +26,7 @@
 
 #include <CUIUtils.h>
 #include <eikenv.h>
-#include <SisxUIData.rsg>
+#include <sisxuidata.rsg>
 
 #include <javadomainpskeys.h>
 
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java	Thu Sep 02 20:20:40 2010 +0300
@@ -493,7 +493,7 @@
                 {
                     // Authenticate jar.
                     AuthenticationModule.getInstance().authenticateJar(
-                        null, suiteUid, null, iJarFilename,
+                        suiteUid, null, iJarFilename,
                         FileUtils.isDrmProtected(iJarFilename));
                 }
             }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java	Thu Sep 02 20:20:40 2010 +0300
@@ -596,6 +596,8 @@
                   StopApplication());
         // Update new application info in the following steps.
         table.add(new com.nokia.mj.impl.installer.midp2.install.steps.
+                  AddSecurityData());
+        table.add(new com.nokia.mj.impl.installer.midp2.install.steps.
                   AddToStorage());
         table.add(new com.nokia.mj.impl.installer.midp2.install.steps.
                   RegisterPush());
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/AddSecurityData.java	Thu Sep 02 20:20:40 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* 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:
+*
+*/
+
+
+package com.nokia.mj.impl.installer.midp2.install.steps;
+
+import com.nokia.mj.impl.installer.exetable.ExeBall;
+import com.nokia.mj.impl.installer.exetable.ExeStep;
+import com.nokia.mj.impl.installer.utils.Log;
+import com.nokia.mj.impl.security.midp.authentication.AuthenticationModule;
+import com.nokia.mj.impl.security.midp.authorization.PermissionGranter;
+
+/**
+ * Writes application's security data into storage.
+ */
+public class AddSecurityData extends ExeStep
+{
+    public void execute(ExeBall aBall)
+    {
+        InstallBall ball = (InstallBall)aBall;
+        ball.log("Writing security data...");
+        AuthenticationModule.getInstance().addSecurityData
+        (ball.iStorageHandler.getSession(), ball.iSuite.getUid(),
+        (ball.iOldSuite != null? ball.iOldSuite.getUid(): null));
+        PermissionGranter.getInstance().addSecurityData
+        (ball.iStorageHandler.getSession(), ball.iSuite.getUid(),
+        (ball.iOldSuite != null? ball.iOldSuite.getUid(): null));
+    }
+
+    public void cancel(ExeBall aBall)
+    {
+        // nop
+    }
+}
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/AuthenticateJar.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/AuthenticateJar.java	Thu Sep 02 20:20:40 2010 +0300
@@ -35,12 +35,12 @@
         }
 
         ball.log("Authenticating Jar...");
-        AuthenticationModule.getInstance().authenticateJar
-        (ball.iStorageHandler.getSession(),
-         ball.iSuite.getUid(),
-         (ball.iOldSuite != null? ball.iOldSuite.getUid(): null),
-         ball.iJarFilename,
-         (ball.iSuite.getContentInfo() == SuiteInfo.CONTENT_INFO_DRM? true: false));
+        ball.iAuthenticationCredentials =
+            AuthenticationModule.getInstance().authenticateJar
+            (ball.iSuite.getUid(),
+             (ball.iOldSuite != null? ball.iOldSuite.getUid(): null),
+             ball.iJarFilename,
+             (ball.iSuite.getContentInfo() == SuiteInfo.CONTENT_INFO_DRM? true: false));
         ball.iJarAuthenticated = true;
         // Unregister OCSP listener after Jar authentication.
         AuthenticationModule.getInstance().unregisterOcspEventListener(
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java	Thu Sep 02 20:20:40 2010 +0300
@@ -38,7 +38,6 @@
         // the installation drive. This is needed to determine
         // if tamper detection is needed.
         AuthenticationModule.getInstance().setMediaId(
-            ball.iStorageHandler.getSession(),
             ball.iSuite.getUid(), ball.iSuite.getMediaId());
 
         // Application package scanning must be skipped if instructed so
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/GrantJarPermissions.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/GrantJarPermissions.java	Thu Sep 02 20:20:40 2010 +0300
@@ -45,9 +45,10 @@
         }
         ball.iSecurityAttributes.addManifestAttributes(ball.iJarAttributes);
         PermissionGranter.getInstance().grantJarPermissions
-        (ball.iStorageHandler.getSession(), ball.iSuite.getUid(),
+        (ball.iSuite.getUid(),
          (ball.iOldSuite != null? ball.iOldSuite.getUid(): null),
-         ball.iSecurityAttributes.getPermissionAttributes());
+         ball.iSecurityAttributes.getPermissionAttributes(),
+         ball.iAuthenticationCredentials);
         ball.iJarPermissionsGranted = true;
     }
 
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java	Thu Sep 02 20:20:40 2010 +0300
@@ -102,6 +102,11 @@
         }
         for (int i = 1; true; i++)
         {
+            if (apps.size() < i)
+            {
+                break;
+            }
+
             String attrName = "Nokia-MIDlet-Auto-Start-" + i;
             String attrValue = aBall.getAttributeValue(attrName);
 
@@ -122,9 +127,12 @@
 
             if (attrValue != null)
             {
-                if (apps.size() < i)
+                if (!aBall.attributeExistsInJar(attrName))
                 {
-                    break;
+                    // The attribute is only in .jad, ignore it.
+                    Log.logWarning("Attribute " + attrName +
+                        " ignored because it is not in Manifest");
+                    continue;
                 }
 
                 // Check if MIDlet has permission for Auto-start
@@ -171,10 +179,6 @@
                       OtaStatusCode.INVALID_JAR));
                 }
             }
-            else
-            {
-                break;
-            }
         }
     }
 }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java	Thu Sep 02 20:20:40 2010 +0300
@@ -75,6 +75,10 @@
      */
     public boolean equals(Object obj)
     {
+        if (!(obj instanceof AutoStartPermission))
+        {
+            return false;
+        }
         return (obj.hashCode() == hashCode());
     }
 
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -173,7 +173,9 @@
             {
                 if (iSilent)
                 {
-                    // Do not prompt the user in case of silent installation.
+                    // Do not prompt the user in case of silent installation 
+                    // -> don't enforce security, just query the permission 
+                    // to see if it is not allowed
                     int permissionResult =
                         iAccessController.checkPermission(aPermission.toString());
                     Log.log("ApplicationUtilsImpl.checkPermission: appUid: " +
@@ -188,7 +190,8 @@
                 }
                 else
                 {
-                    // Not a silent installation, display user prompt.
+                    // Not a silent installation -> enforce security (an user
+                    // prompt might be displayed)
                     iAccessController.checkPermission(aPermission);
                     Log.log("ApplicationUtilsImpl.checkPermission: appUid: " +
                             aAppUid + ", " + aPermission.toString() + " ok");
@@ -196,15 +199,17 @@
             }
             else
             {
-                // No user prompt allowed for this permission.
+                // No user prompt allowed for this permission -> don't enforce
+                // security, just query the permission to see if it is not 
+                // allowed
                 int permissionResult =
                     iAccessController.checkPermission(aPermission.toString());
                 Log.log("ApplicationUtilsImpl.checkPermission: appUid: " +
                         aAppUid + ", " + aPermission.toString() +
                         " result " + permissionResult);
-                if (permissionResult <= 0)
+                if (permissionResult == 0)
                 {
-                    // Permission is either denied or requires user prompt.
+                    // Permission is denied
                     throw new AccessControlException(
                         "Permission " + aPermission.toString() + " not allowed");
                 }
--- a/javamanager/javainstaller/installer/src.s60/utils/sysutil.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/utils/sysutil.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -93,8 +93,8 @@
     TUid repositoryUid = { aRepository };
     CRepository* repository = CRepository::NewLC(repositoryUid);
     RBuf buf;
-    buf.Create(NCentralRepositoryConstants::KMaxUnicodeStringLength);
     CleanupClosePushL(buf);
+    buf.CreateL(NCentralRepositoryConstants::KMaxUnicodeStringLength);
     TInt err = repository->Get(aKey, buf) ;
     if (KErrNone == err)
     {
--- a/javamanager/javainstaller/installer/tsrc/testdata/installerengine/HelloWorld_3_midlets.jad	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/testdata/installerengine/HelloWorld_3_midlets.jad	Thu Sep 02 20:20:40 2010 +0300
@@ -9,8 +9,8 @@
 Nokia-MIDlet-UID-1: 0xefef0001
 Nokia-MIDlet-UID-3: 0xefef0003
 Nokia-MIDlet-On-Screen-Keypad: no
-Nokia-MIDlet-Auto-Start-1: true
-Nokia-MIDlet-Auto-Start-2: false
+Nokia-MIDlet-auto-start: true
+Nokia-MIDlet-auto-start-2: false
 Nokia-MIDlet-Auto-Start-3: once
 MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=CE00C90A2EF00F07C210A061BD15A4EC&tID=900_success
 MIDlet-Delete-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=CE00C90A2EF00F07C210A061BD15A4EC&tID=912_deletion_notification
--- a/javamanager/javaqtrequest/src.s60/requestapp.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javaqtrequest/src.s60/requestapp.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -39,7 +39,8 @@
 
     QUrl uri(uriString);
     XQApplicationManager appMgr;
-    XQAiwRequest *request = appMgr.create(uri);
+    // Make the request in non-embedded mode
+    XQAiwRequest *request = appMgr.create(uri, false); 
     if (!request)
     {
         // No handlers for the URI
--- a/javamanager/javasettings_qt/build/javaapplicationsettingsview.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javamanager/javasettings_qt/build/javaapplicationsettingsview.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -21,8 +21,8 @@
 TRANSLATIONS = javaruntimeapplicationsettings.ts
 
 INCLUDEPATH += ../../../inc
-SOURCES += ..\src\javaapplicationsettingsview.cpp ..\src\javaapplicationsettingsview_p.cpp ..\src\javaapplicationsettings.cpp
-HEADERS += ..\src\javaapplicationsettingsview.h ..\src\javaapplicationsettingsview_p.h ..\src\javaapplicationsettings.h
+SOURCES += ../src/javaapplicationsettingsview.cpp ../src/javaapplicationsettingsview_p.cpp ../src/javaapplicationsettings.cpp
+HEADERS += ../src/javaapplicationsettingsview.h ../src/javaapplicationsettingsview_p.h ../src/javaapplicationsettings.h
 
 symbian : plugin {
     TARGET.EPOCALLOWDLLDATA = 1
--- a/javaruntimes/jvmargmodifier/file/build/javajvmargsmodifierfile.pro	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaruntimes/jvmargmodifier/file/build/javajvmargsmodifierfile.pro	Thu Sep 02 20:20:40 2010 +0300
@@ -21,8 +21,4 @@
 
 LIBS += -ljavafileutils
 
-symbian {
-LIBS += -laknnotify
-}
-
 include(../../../../build/omj.pri)
--- a/javaruntimes/jvmargmodifier/file/src/jvmargsmodifier.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaruntimes/jvmargmodifier/file/src/jvmargsmodifier.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  A default empty implementation for JvmArgs modifier.
+* Description:  A file argument reader implementation for JvmArgs modifier.
 *
 */
 
@@ -23,33 +23,17 @@
 #include "jvmargsfilereader.h"
 #include "argsmodifier.h"
 
-#ifdef __SYMBIAN32__
-#include <AknGlobalNote.h>
-_LIT(KArgsTxt, "Note! Modified VM arguments used!");
-#endif
-
 void logArguments(std::wstring aArg)
 {
     WLOG1(EJavaRuntime, " '%S'", aArg.c_str());
 }
 
-#ifdef __SYMBIAN32__
-void showWarningDialogL()
-{
-    ::CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
-    CleanupStack::PushL(globalNote);
-    globalNote->ShowNoteL(EAknGlobalInformationNote, KArgsTxt);
-    CleanupStack::PopAndDestroy(globalNote);
-}
-#endif
-
-
 OS_EXPORT
 void java::runtime::modifyJvmArguments(const std::wstring& aIdentifier,
                                        std::list<std::wstring>& aJvmArgs,
                                        std::list<std::wstring>& aApplicationAndArgs)
 {
-    JELOG2(EJavaRuntime);
+    PLOG(EJavaRuntime, "JVM File Argument modifier in use");
 
 #ifdef __SYMBIAN32__
     // Open the extension directory of the J9 VM.
@@ -70,9 +54,6 @@
         std::for_each(aJvmArgs.begin(), aJvmArgs.end(), logArguments);
         WLOG(EJavaRuntime, "new App arguments");
         std::for_each(aApplicationAndArgs.begin(), aApplicationAndArgs.end(), logArguments);
-#ifdef __SYMBIAN32__
-        TRAP_IGNORE(showWarningDialogL());
-#endif
     }
 }
 
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/utils/CmdLineArgsPermission.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/utils/CmdLineArgsPermission.java	Thu Sep 02 20:20:40 2010 +0300
@@ -77,6 +77,10 @@
      */
     public boolean equals(Object obj)
     {
+        if (!(obj instanceof CmdLineArgsPermission))
+        {
+            return false;
+        }
         return (obj.hashCode() == hashCode());
     }
 
--- a/javatools/javacontrolpanel/controlpanel/javasrc/com/nokia/mj/impl/rt/javacontrolpanel/ApplicationUtilsImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javatools/javacontrolpanel/controlpanel/javasrc/com/nokia/mj/impl/rt/javacontrolpanel/ApplicationUtilsImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -20,6 +20,7 @@
 import com.nokia.mj.impl.rt.support.ApplicationInfo;
 import com.nokia.mj.impl.rt.support.ApplicationUtils;
 import com.nokia.mj.impl.utils.Uid;
+import com.nokia.mj.impl.utils.Logger;
 
 import java.security.Permission;
 import java.security.AccessControlException;
@@ -39,6 +40,8 @@
 
     public void notifyExitCmd()
     {
+        Logger.ILOG(Logger.EUtils, "notifyExitCmd() - exiting");
+        System.exit(0);
     }
 
     public void checkPermission(Permission aPermission)
--- a/javatools/tckrunner/runner/javasrc/com/nokia/mj/impl/rt/tckrunner/ApplicationUtilsImpl.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javatools/tckrunner/runner/javasrc/com/nokia/mj/impl/rt/tckrunner/ApplicationUtilsImpl.java	Thu Sep 02 20:20:40 2010 +0300
@@ -20,6 +20,7 @@
 import com.nokia.mj.impl.rt.support.ApplicationInfo;
 import com.nokia.mj.impl.rt.support.ApplicationUtils;
 import com.nokia.mj.impl.utils.Uid;
+import com.nokia.mj.impl.utils.Logger;
 
 import java.security.Permission;
 import java.security.AccessControlException;
@@ -39,6 +40,8 @@
 
     public void notifyExitCmd()
     {
+        Logger.ILOG(Logger.ETckRunner, "notifyExitCmd() - exiting");
+        System.exit(0);
     }
 
     public void checkPermission(Permission aPermission)
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/TextExtension.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/TextExtension.java	Thu Sep 02 20:20:40 2010 +0300
@@ -342,8 +342,8 @@
 String fetchEmail() {
 
     int serviceRequest = OS.XQServiceRequest_new(
-            "com.nokia.services.phonebookservices.Fetch",
-            "fetch(QString,QString,QString)", false);
+            "phonebookservices.com.nokia.symbian.IContactsFetch",
+            "singleFetch(QString,QString)", false);
     if (serviceRequest <= 0) {
         return null;
     }
@@ -370,8 +370,8 @@
             QObjectDeleteWrapper.deleteSafely(handler);
             QObjectDeleteWrapper.deleteSafely(serviceRequest);
             return email;
-        }
-    }
+        } 
+    } 
     QObjectDeleteWrapper.deleteSafely(handler);
     QObjectDeleteWrapper.deleteSafely(serviceRequest);
     return null;
@@ -380,8 +380,8 @@
 String getPhoneNumber() {
 
     int serviceRequest = OS.XQServiceRequest_new(
-            "com.nokia.services.phonebookservices.Fetch",
-            "fetch(QString,QString,QString)", false);
+            "phonebookservices.com.nokia.symbian.IContactsFetch",
+            "singleFetch(QString,QString)", false);
     if (serviceRequest <= 0) {
         return null;
     }
@@ -658,6 +658,7 @@
 
 void qt_signal_requestCompleted( int value ) {
     
+    System.out.println("qt_signal_requestCompleted "+value);
     if (value < 1) {
         serviceDone = true;
         return;
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp	Thu Sep 02 20:20:40 2010 +0300
@@ -11465,7 +11465,7 @@
 
 JNIEXPORT void JNICALL OS_NATIVE( XQServiceRequest_1swt_1setArgumentsForFetchEmail )
 #ifdef __SYMBIAN32__
-(JNIEnv* aJniEnv, jclass, jint aHandle, jstring aTitle, jstring aAction, jstring aFilter)
+(JNIEnv* aJniEnv, jclass, jint aHandle, jstring aTitle, jstring aAction, jstring)
 #else
 (JNIEnv* aJniEnv, jclass, jint, jstring, jstring, jstring)
 #endif
@@ -11478,7 +11478,6 @@
         XQServiceRequest* request = reinterpret_cast<XQServiceRequest*>(aHandle);
         *request << swtApp->jniUtils().JavaStringToQString(aJniEnv, aTitle);
         *request << swtApp->jniUtils().JavaStringToQString(aJniEnv, aAction);
-        *request << swtApp->jniUtils().JavaStringToQString(aJniEnv, aFilter);
         }
     SWT_CATCH
 #endif    
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Thu Sep 02 20:20:40 2010 +0300
@@ -1,4 +1,654 @@
-/******************************************************************************* * Copyright (c) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     Nokia Corporation - initial implementation *******************************************************************************/
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
 package org.eclipse.swt.internal.qt.graphics;
-import java.util.Vector;import java.util.Enumeration;
-/** * This class implements a command buffer that can be bound by GraphicsContext * to collect the drawing operations. Contents of the command buffer can be replayed to * GraphicsContext target with GraphicsContext.render() method. * * When JavaCommandBuffer is set as the target of GraphicsContext some of the methods * provided by GraphicsContext are not supported, e.g. getters, since the JavaCommandBuffer * does not have a real rendering target from which to query related data. To find out what is * supported see the methods of this class. In principal GraphicsContext supports all draw and set operations, * when JavaCommandBuffer is set as rendering target. */public final class JavaCommandBuffer {    // All collected drawing operations and their parameters    private int[] intParams;    private int intCount;    private StringBuffer strParams;    // Container for images    private Vector images;    // Container for rgbData    private Vector rgbData;    // This flag is indicates if this buffer is bound by some GraphicsContext    private boolean bound;    // This flag indicates if this buffer is empty or not    private boolean containsData;    // This flag indicates if this buffer has any draw commands in it    private boolean containsPrimitiveData;    // Memory management configuration constants    private static final int INT_BUF_GRANULARITY         = 2560; // 10kB    private static final int INT_BUF_INITIAL_SIZE        = 256; // 1kB    private static final int IMAGE_BUF_INITIAL_SIZE      = 256; // 1kB    private static final int IMAGE_BUF_GRANULARITY       = 256; // 1kB    private static final int STRING_BUFFER_INITIAL_SIZE  = 256; // 1kB    // Prefixes for different categories of op codes, stored in MSB    final static int DRAW_PREFIX = 0;    final static int FILL_PREFIX = 1;    final static int SET_PREFIX = 2;    final static int MISC_PREFIX = 3;    // Unique operation codes for all the gc operations that can be buffered.    static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);    static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);    static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);    static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);    static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);    static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);    static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);    static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);    static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);    static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);    static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);    static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);    static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);    static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);    static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);    static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);    static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);    static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);    static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);    static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);    static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);    static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);    static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);    static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);    static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);    static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);    static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);    static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);    static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);    static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);    static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);    static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);    static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);    static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);    static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);    static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);    /**     * Constructs empty command buffer with defined buffer sizes.     */    public JavaCommandBuffer() {        intParams = new int[INT_BUF_INITIAL_SIZE];        strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);        images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);        rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);    }    /**     * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing     * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.     * CommandBuffer can be reseted only if it is not bound by any GraphicsContext     * @throws IllegalStateException if this CommandBuffer is bound while calling reset     */    public void reset() {        if(bound) {            throw new IllegalStateException("CommandBuffer is still bound by gc");        }        intCount = 0;        strParams.setLength(0);        Enumeration allImages = images.elements();        while(allImages.hasMoreElements()) {            Image image = (Image)allImages.nextElement();            if(image != null) {                image.freeCommandBufferCopy();            }        }        images.removeAllElements();        rgbData.removeAllElements();        containsData = false;        containsPrimitiveData = false;    }    /**     * Checks that does this buffer contain any commands     * @return true if any command has been written to buffer otherwise false     */    public boolean containsData() {        return containsData;    }    /**     * Checks that does this buffer contain any draw commands, i.e. any setters etc.     * that does to cause any pixels to be rendered are ignored     * @return true if any draw command has been written to buffer otherwise false     */    public boolean containsDrawnPrimitives() {        return containsPrimitiveData;    }    /**     * Binds this buffer     */    void bind() {        bound = true;    }    /**     * Provides the binding status of this buffer     * @return true if this buffer has been already bound otherwise false     */    boolean isBound() {        return bound;    }    /**     * Releases this buffer, i.e. it can be bound by some other GraphicsContext     */    void release() {        bound = false;    }    private void ensureIntArraySpace(final int items) {        if( intParams.length < intCount + items) {            int[] dst = new int[intParams.length + Math.max(INT_BUF_GRANULARITY, items)];            System.arraycopy(intParams, 0, dst, 0, intParams.length);            intParams = dst;        }        containsData = true;    }    private void reportNotSupported() {        throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");    }//    private void printBufferInfo() {//        System.out.println("CommandBuffer Info: " +this);//        System.out.println("intParamCount: " + intCount);//        System.out.println("intBuffer Size: " + intParams.length);//        System.out.println("StringBuffer Size: " + strParams.length());//    }    private void raisePrimitiveFlag() {        containsPrimitiveData = true;    }    int[] intParams() {        return intParams;    }    int intParamCount() {        return intCount;    }    Vector rgbParams() {        return rgbData;    }    Vector images() {        return images;    }    String strParams() {        return strParams.toString();    }    void drawArc (final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) {        ensureIntArraySpace(7);        intParams[intCount++] = OP_DRAWARC;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = startAngle;        intParams[intCount++] = arcAngle;        raisePrimitiveFlag();    }    void drawFocus (final int x, final int y, final int width, final int height) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_DRAWFOCUS;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        raisePrimitiveFlag();    }    // Must be called from UI thread as images cannot be creates outside that    void drawImage(final Image image, final int x, final int y) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_DRAWIMAGE1;        intParams[intCount++] = x;        intParams[intCount++] = y;        // creating copy of image here uses implicit data sharing,        // thus only a shallow copy is made        images.addElement(image.getCommandBufferCopy());        raisePrimitiveFlag();    }    // must be called from UI thread as images cannot be creates outside that    void drawImage(final Image image, final int tx, final int ty, final int tw, final int th, final int sx, final int sy, final int sw, final int sh, final int manipulation) {        ensureIntArraySpace(10);        intParams[intCount++] = OP_DRAWIMAGE2;        intParams[intCount++] = tx;        intParams[intCount++] = ty;        intParams[intCount++] = tw;        intParams[intCount++] = th;        intParams[intCount++] = sx;        intParams[intCount++] = sy;        intParams[intCount++] = sw;        intParams[intCount++] = sh;        intParams[intCount++] = manipulation;        // creating copy of image here uses implicit data sharing,        // thus only a shallow copy is made        images.addElement(image.getCommandBufferCopy());        raisePrimitiveFlag();    }    void drawLine (final int x1, final int y1, final int x2, final int y2) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_DRAWLINE;        intParams[intCount++] = x1;        intParams[intCount++] = y1;        intParams[intCount++] = x2;        intParams[intCount++] = y2;        raisePrimitiveFlag();    }    void drawEllipse (final int x, final int y, final int width, final int height) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_DRAWELLIPSE;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        raisePrimitiveFlag();    }    void drawPoint (final int x, final int y) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_DRAWPOINT;        intParams[intCount++] = x;        intParams[intCount++] = y;        raisePrimitiveFlag();    }    void drawPolygon(final int[] pointArray) {        ensureIntArraySpace(2 + pointArray.length);        intParams[intCount++] = OP_DRAWPOLYGON;        intParams[intCount++] = pointArray.length;        for(int i = 0; i < pointArray.length; ++i) {            intParams[intCount++] = pointArray[i];        }        raisePrimitiveFlag();    }    void drawPolyline(final int[] pointArray) {        ensureIntArraySpace(2 + pointArray.length);        intParams[intCount++] = OP_DRAWPOLYLINE;        intParams[intCount++] = pointArray.length;        for(int i = 0; i < pointArray.length; ++i) {            intParams[intCount++] = pointArray[i];        }        raisePrimitiveFlag();    }    void drawRect (final int x, final int y, final int width, final int height) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_DRAWRECT;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        raisePrimitiveFlag();    }    void drawRGB(final int[] rgb, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final boolean processAlpha, final int manipulation) {        ensureIntArraySpace(9);        intParams[intCount++] = OP_DRAWRGB_INT;        intParams[intCount++] = offset;        intParams[intCount++] = scanlength;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = processAlpha? 1 : 0;        intParams[intCount++] = manipulation;        rgbData.addElement(rgb);        raisePrimitiveFlag();    }    void drawRGB(final byte[] rgb, final byte[] transparencyMask, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final int manipulation, final int format) {        ensureIntArraySpace(9);        intParams[intCount++] = OP_DRAWRGB_BYTE;        intParams[intCount++] = offset;        intParams[intCount++] = scanlength;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = manipulation;        intParams[intCount++] = format;        rgbData.addElement(rgb);        rgbData.addElement(transparencyMask);        raisePrimitiveFlag();    }    void drawRGB(final short[] rgb, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final boolean processAlpha, final int manipulation, final int format) {        ensureIntArraySpace(10);        intParams[intCount++] = OP_DRAWRGB_SHORT;        intParams[intCount++] = offset;        intParams[intCount++] = scanlength;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = processAlpha? 1 : 0;        intParams[intCount++] = manipulation;        intParams[intCount++] = format;        rgbData.addElement(rgb);        raisePrimitiveFlag();    }    void drawRoundRect (final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) {        ensureIntArraySpace(7);        intParams[intCount++] = OP_DRAWROUNDRECT;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = arcWidth;        intParams[intCount++] = arcHeight;        raisePrimitiveFlag();    }    void drawString(final String string, final int x, final int y, final int width, final int height, final int alignments, final int flags, final boolean isTransparent) {        ensureIntArraySpace(9);        intParams[intCount++] = OP_DRAWSTRING;        intParams[intCount++] = string.length();        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = alignments;        intParams[intCount++] = flags;        intParams[intCount++] = isTransparent? 1 : 0;        strParams.append(string);        raisePrimitiveFlag();    }    void fillArc (final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) {        ensureIntArraySpace(7);        intParams[intCount++] = OP_FILLARC;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = startAngle;        intParams[intCount++] = arcAngle;        raisePrimitiveFlag();    }    void fillGradientRect(final int x, final int y, final int width, final int height, final boolean vertical, final boolean swapColors) {        ensureIntArraySpace(7);        intParams[intCount++] = OP_FILLGRADIENTRECT;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = vertical ? 1 : 0;        intParams[intCount++] = swapColors ? 1 : 0;        raisePrimitiveFlag();    }    void fillEllipse (final int x, final int y, final int width, final int height) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_FILLELLIPSE;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        raisePrimitiveFlag();    }    void fillPolygon (final int[] pointArray) {        ensureIntArraySpace(2 + pointArray.length);        intParams[intCount++] = OP_FILLPOLYGON;        intParams[intCount++] = pointArray.length;        for(int i = 0; i < pointArray.length; ++i) {            intParams[intCount++] = pointArray[i];        }        raisePrimitiveFlag();    }    void fillRect (final int x, final int y, final int width, final int height) {        ensureIntArraySpace(5);        intParams[intCount++] = OP_FILLRECT;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        raisePrimitiveFlag();    }    void fillRoundRectangle (final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) {        ensureIntArraySpace(7);        intParams[intCount++] = OP_FILLROUNDRECT;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = arcWidth;        intParams[intCount++] = arcHeight;        raisePrimitiveFlag();    }    public void setBackgroundAlpha(final int alpha) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETBACKGROUNDALPHA;        intParams[intCount++] = alpha;    }    void setBackgroundColor(final int argb, final boolean updateAlpha) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_SETBACKGROUNDCOLOR;        intParams[intCount++] = argb;        intParams[intCount++] = updateAlpha? 1 : 0;    }    void setBlendingMode(final int mode) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETBLENDINGMODE;        intParams[intCount++] = mode;    }    void setClip(final int x, final int y, final int width, final int height, final boolean intersects) {        ensureIntArraySpace(6);        intParams[intCount++] = OP_SETCLIP;        intParams[intCount++] = x;        intParams[intCount++] = y;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = intersects? 1 : 0;    }    void cancelClipping () {        ensureIntArraySpace(1);        intParams[intCount++] = OP_CANCELCLIPPING;    }    void setFont(final int fontHandle) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETFONT;        intParams[intCount++] = fontHandle;    }    void setForegroundAlpha(final int alpha) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETFOREGROUNDALPHA;        intParams[intCount++] = alpha;    }    void setForegroundColor(final int argb, final boolean updateAlpha) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_SETFOREGROUNDCOLOR;        intParams[intCount++] = argb;        intParams[intCount++] = updateAlpha? 1 : 0;    }    void setStrokeStyle(final int style) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETSTROKESTYLE;        intParams[intCount++] = style;    }    void setStrokeWidth(final int width) {        ensureIntArraySpace(2);        intParams[intCount++] = OP_SETSTROKEWIDTH;        intParams[intCount++] = width;    }    void translate(final int x, final int y) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_TRANSLATE;        intParams[intCount++] = x;        intParams[intCount++] = y;    }    void scale(final int x, final int y) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_SCALE;        intParams[intCount++] = x;        intParams[intCount++] = y;    }    void resetTransform() {        ensureIntArraySpace(1);        intParams[intCount++] = OP_RESETTRANSFORM;    }    void copyArea(final Image image, final int x, final int y) {        ensureIntArraySpace(3);        intParams[intCount++] = OP_COPYAREA1;        intParams[intCount++] = x;        intParams[intCount++] = y;        // TODO does this need flushing on the image        images.addElement(new Image(image));        raisePrimitiveFlag();    }    void copyArea(final int srcX, final int srcY, final int width, final int height, final int destX, final int destY, final boolean paint) {        ensureIntArraySpace(8);        intParams[intCount++] = OP_COPYAREA2;        intParams[intCount++] = srcX;        intParams[intCount++] = srcY;        intParams[intCount++] = width;        intParams[intCount++] = height;        intParams[intCount++] = destX;        intParams[intCount++] = destY;        intParams[intCount++] = paint? 1 : 0;        raisePrimitiveFlag();    }    // Unsupported operations    int getAdvancedCharacterWidth(final char ch, final boolean isAdvanced) {        reportNotSupported();        return 0;    }    void getFontMetricsData(final int[] data, final int fontHandle) {        reportNotSupported();    }    int getBackgroundAlpha() {        reportNotSupported();        return 0;    }    int getBackgroundColor() {        reportNotSupported();        return 0;    }    int getBlendingMode() {        reportNotSupported();        return 0;    }    void getClip(final int[] clip) {        reportNotSupported();    }    int getForegroundAlpha() {        reportNotSupported();        return 0;    }    int getForegroundColor() {        reportNotSupported();        return 0;    }    void getTextBoundingBox(final int[] boundingBox, final String string, final int alignments, final int flags, final int rectX, final int rectY, final int rectWidth, final int rectHeight) {        reportNotSupported();    }    int getStrokeWidth() {        reportNotSupported();        return 0;    }    int getStrokeStyle() {        reportNotSupported();        return 0;    }    int getTranslateX() {        reportNotSupported();        return 0;    }    int getTranslateY() {        reportNotSupported();        return 0;    }    boolean hasClipping() {        reportNotSupported();        return false;    }    void saveSettings() {        reportNotSupported();    }    void restoreSettings() {        reportNotSupported();    }}
\ No newline at end of file
+
+import java.util.Vector;
+import java.util.Enumeration;
+
+
+/**
+ * This class implements a command buffer that can be bound by GraphicsContext
+ * to collect the drawing operations. Contents of the command buffer can be replayed to
+ * GraphicsContext target with GraphicsContext.render() method.
+ *
+ * When JavaCommandBuffer is set as the target of GraphicsContext some of the methods
+ * provided by GraphicsContext are not supported, e.g. getters, since the JavaCommandBuffer
+ * does not have a real rendering target from which to query related data. To find out what is
+ * supported see the methods of this class. In principal GraphicsContext supports all draw and set operations,
+ * when JavaCommandBuffer is set as rendering target.
+ */
+public final class JavaCommandBuffer {
+
+    // All collected drawing operations and their parameters
+    private int[] intParams;
+    private int intCount;
+    private StringBuffer strParams;
+
+    // Container for images
+    private Vector images;
+
+    // Container for rgbData
+    private Vector rgbData;
+
+    // This flag is indicates if this buffer is bound by some GraphicsContext
+    private boolean bound;
+
+    // This flag indicates if this buffer is empty or not
+    private boolean containsData;
+
+    // This flag indicates if this buffer has any draw commands in it
+    private boolean containsPrimitiveData;
+
+    // Memory management configuration constants
+    private static final int INT_BUF_GRANULARITY         = 2560; // 10kB
+    private static final int INT_BUF_INITIAL_SIZE        = 256; // 1kB
+    private static final int IMAGE_BUF_INITIAL_SIZE      = 256; // 1kB
+    private static final int IMAGE_BUF_GRANULARITY       = 256; // 1kB
+    private static final int STRING_BUFFER_INITIAL_SIZE  = 256; // 1kB
+
+    // Prefixes for different categories of op codes, stored in MSB
+    final static int DRAW_PREFIX = 0;
+    final static int FILL_PREFIX = 1;
+    final static int SET_PREFIX = 2;
+    final static int MISC_PREFIX = 3;
+
+    // Unique operation codes for all the gc operations that can be buffered.
+    static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
+    static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
+    static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
+    static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
+    static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
+    static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
+    static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
+    static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
+    static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
+    static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
+    static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
+    static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
+    static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
+    static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
+    static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
+    static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
+    static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
+    static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
+    static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
+    static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
+    static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
+    static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
+    static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
+    static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
+    static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
+    static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
+    static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
+    static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
+    static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
+    static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
+    static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
+    static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
+    static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
+    static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
+    static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
+    static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
+
+    /**
+     * Constructs empty command buffer with defined buffer sizes.
+     */
+    public JavaCommandBuffer() {
+        intParams = new int[INT_BUF_INITIAL_SIZE];
+        strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
+        images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+        rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+    }
+
+    /**
+     * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
+     * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
+     * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
+     * @throws IllegalStateException if this CommandBuffer is bound while calling reset
+     */
+    public void reset() {
+        if(bound) {
+            throw new IllegalStateException("CommandBuffer is still bound by gc");
+        }
+        intCount = 0;
+        strParams.setLength(0);
+
+        Enumeration allImages = images.elements();
+        while(allImages.hasMoreElements()) {
+            Image image = (Image)allImages.nextElement();
+            if(image != null) {
+                image.freeCommandBufferCopy();
+            }
+        }
+        images.removeAllElements();
+        rgbData.removeAllElements();
+        containsData = false;
+        containsPrimitiveData = false;
+    }
+
+    /**
+     * Checks that does this buffer contain any commands
+     * @return true if any command has been written to buffer otherwise false
+     */
+    public boolean containsData() {
+        return containsData;
+    }
+
+    /**
+     * Checks that does this buffer contain any draw commands, i.e. any setters etc.
+     * that does to cause any pixels to be rendered are ignored
+     * @return true if any draw command has been written to buffer otherwise false
+     */
+    public boolean containsDrawnPrimitives() {
+        return containsPrimitiveData;
+    }
+
+    /**
+     * Binds this buffer
+     */
+    void bind() {
+        bound = true;
+    }
+
+    /**
+     * Provides the binding status of this buffer
+     * @return true if this buffer has been already bound otherwise false
+     */
+    boolean isBound() {
+        return bound;
+    }
+
+    /**
+     * Releases this buffer, i.e. it can be bound by some other GraphicsContext
+     */
+    void release() {
+        bound = false;
+    }
+
+    private void ensureIntArraySpace(final int items) {
+        if( intParams.length < intCount + items) {
+            int[] dst = new int[intParams.length + Math.max(INT_BUF_GRANULARITY, items)];
+            System.arraycopy(intParams, 0, dst, 0, intParams.length);
+            intParams = dst;
+        }
+        containsData = true;
+    }
+
+    private void reportNotSupported() {
+        throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
+    }
+
+//    private void printBufferInfo() {
+//        System.out.println("CommandBuffer Info: " +this);
+//        System.out.println("intParamCount: " + intCount);
+//        System.out.println("intBuffer Size: " + intParams.length);
+//        System.out.println("StringBuffer Size: " + strParams.length());
+//    }
+
+    private void raisePrimitiveFlag() {
+        containsPrimitiveData = true;
+    }
+
+    int[] intParams() {
+        return intParams;
+    }
+
+    int intParamCount() {
+        return intCount;
+    }
+
+    Vector rgbParams() {
+        return rgbData;
+    }
+
+    Vector images() {
+        return images;
+    }
+
+    String strParams() {
+        return strParams.toString();
+    }
+
+    void drawArc (final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) {
+        ensureIntArraySpace(7);
+        intParams[intCount++] = OP_DRAWARC;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = startAngle;
+        intParams[intCount++] = arcAngle;
+        raisePrimitiveFlag();
+    }
+
+    void drawFocus (final int x, final int y, final int width, final int height) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_DRAWFOCUS;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        raisePrimitiveFlag();
+    }
+
+    // Must be called from UI thread as images cannot be creates outside that
+    void drawImage(final Image image, final int x, final int y) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_DRAWIMAGE1;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        images.addElement(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
+
+    // must be called from UI thread as images cannot be creates outside that
+    void drawImage(final Image image, final int tx, final int ty, final int tw, final int th, final int sx, final int sy, final int sw, final int sh, final int manipulation) {
+        ensureIntArraySpace(10);
+        intParams[intCount++] = OP_DRAWIMAGE2;
+        intParams[intCount++] = tx;
+        intParams[intCount++] = ty;
+        intParams[intCount++] = tw;
+        intParams[intCount++] = th;
+        intParams[intCount++] = sx;
+        intParams[intCount++] = sy;
+        intParams[intCount++] = sw;
+        intParams[intCount++] = sh;
+        intParams[intCount++] = manipulation;
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        images.addElement(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
+
+    void drawLine (final int x1, final int y1, final int x2, final int y2) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_DRAWLINE;
+        intParams[intCount++] = x1;
+        intParams[intCount++] = y1;
+        intParams[intCount++] = x2;
+        intParams[intCount++] = y2;
+        raisePrimitiveFlag();
+    }
+
+    void drawEllipse (final int x, final int y, final int width, final int height) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_DRAWELLIPSE;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        raisePrimitiveFlag();
+    }
+
+    void drawPoint (final int x, final int y) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_DRAWPOINT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        raisePrimitiveFlag();
+    }
+
+    void drawPolygon(final int[] pointArray) {
+        ensureIntArraySpace(2 + pointArray.length);
+        intParams[intCount++] = OP_DRAWPOLYGON;
+        intParams[intCount++] = pointArray.length;
+        for(int i = 0; i < pointArray.length; ++i) {
+            intParams[intCount++] = pointArray[i];
+        }
+        raisePrimitiveFlag();
+    }
+
+    void drawPolyline(final int[] pointArray) {
+        ensureIntArraySpace(2 + pointArray.length);
+        intParams[intCount++] = OP_DRAWPOLYLINE;
+        intParams[intCount++] = pointArray.length;
+        for(int i = 0; i < pointArray.length; ++i) {
+            intParams[intCount++] = pointArray[i];
+        }
+        raisePrimitiveFlag();
+    }
+
+    void drawRect (final int x, final int y, final int width, final int height) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_DRAWRECT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        raisePrimitiveFlag();
+    }
+
+    void drawRGB(final int[] rgb, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final boolean processAlpha, final int manipulation) {
+        ensureIntArraySpace(9);
+        intParams[intCount++] = OP_DRAWRGB_INT;
+        intParams[intCount++] = offset;
+        intParams[intCount++] = scanlength;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = processAlpha? 1 : 0;
+        intParams[intCount++] = manipulation;
+        rgbData.addElement(rgb);
+        raisePrimitiveFlag();
+    }
+
+    void drawRGB(final byte[] rgb, final byte[] transparencyMask, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final int manipulation, final int format) {
+        ensureIntArraySpace(9);
+        intParams[intCount++] = OP_DRAWRGB_BYTE;
+        intParams[intCount++] = offset;
+        intParams[intCount++] = scanlength;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = manipulation;
+        intParams[intCount++] = format;
+        rgbData.addElement(rgb);
+        rgbData.addElement(transparencyMask);
+        raisePrimitiveFlag();
+    }
+
+    void drawRGB(final short[] rgb, final int offset, final int scanlength, final int x, final int y, final int width, final int height, final boolean processAlpha, final int manipulation, final int format) {
+        ensureIntArraySpace(10);
+        intParams[intCount++] = OP_DRAWRGB_SHORT;
+        intParams[intCount++] = offset;
+        intParams[intCount++] = scanlength;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = processAlpha? 1 : 0;
+        intParams[intCount++] = manipulation;
+        intParams[intCount++] = format;
+        rgbData.addElement(rgb);
+        raisePrimitiveFlag();
+    }
+
+    void drawRoundRect (final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) {
+        ensureIntArraySpace(7);
+        intParams[intCount++] = OP_DRAWROUNDRECT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = arcWidth;
+        intParams[intCount++] = arcHeight;
+        raisePrimitiveFlag();
+    }
+
+    void drawString(final String string, final int x, final int y, final int width, final int height, final int alignments, final int flags, final boolean isTransparent) {
+        ensureIntArraySpace(9);
+        intParams[intCount++] = OP_DRAWSTRING;
+        intParams[intCount++] = string.length();
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = alignments;
+        intParams[intCount++] = flags;
+        intParams[intCount++] = isTransparent? 1 : 0;
+        strParams.append(string);
+        raisePrimitiveFlag();
+    }
+
+    void fillArc (final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) {
+        ensureIntArraySpace(7);
+        intParams[intCount++] = OP_FILLARC;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = startAngle;
+        intParams[intCount++] = arcAngle;
+        raisePrimitiveFlag();
+    }
+
+    void fillGradientRect(final int x, final int y, final int width, final int height, final boolean vertical, final boolean swapColors) {
+        ensureIntArraySpace(7);
+        intParams[intCount++] = OP_FILLGRADIENTRECT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = vertical ? 1 : 0;
+        intParams[intCount++] = swapColors ? 1 : 0;
+        raisePrimitiveFlag();
+    }
+
+    void fillEllipse (final int x, final int y, final int width, final int height) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_FILLELLIPSE;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        raisePrimitiveFlag();
+    }
+
+    void fillPolygon (final int[] pointArray) {
+        ensureIntArraySpace(2 + pointArray.length);
+        intParams[intCount++] = OP_FILLPOLYGON;
+        intParams[intCount++] = pointArray.length;
+        for(int i = 0; i < pointArray.length; ++i) {
+            intParams[intCount++] = pointArray[i];
+        }
+        raisePrimitiveFlag();
+    }
+
+    void fillRect (final int x, final int y, final int width, final int height) {
+        ensureIntArraySpace(5);
+        intParams[intCount++] = OP_FILLRECT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        raisePrimitiveFlag();
+    }
+
+    void fillRoundRectangle (final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) {
+        ensureIntArraySpace(7);
+        intParams[intCount++] = OP_FILLROUNDRECT;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = arcWidth;
+        intParams[intCount++] = arcHeight;
+        raisePrimitiveFlag();
+    }
+
+    public void setBackgroundAlpha(final int alpha) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETBACKGROUNDALPHA;
+        intParams[intCount++] = alpha;
+    }
+
+    void setBackgroundColor(final int argb, final boolean updateAlpha) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_SETBACKGROUNDCOLOR;
+        intParams[intCount++] = argb;
+        intParams[intCount++] = updateAlpha? 1 : 0;
+    }
+
+    void setBlendingMode(final int mode) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETBLENDINGMODE;
+        intParams[intCount++] = mode;
+    }
+
+    void setClip(final int x, final int y, final int width, final int height, final boolean intersects) {
+        ensureIntArraySpace(6);
+        intParams[intCount++] = OP_SETCLIP;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = intersects? 1 : 0;
+    }
+
+    void cancelClipping () {
+        ensureIntArraySpace(1);
+        intParams[intCount++] = OP_CANCELCLIPPING;
+    }
+
+    void setFont(final int fontHandle) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETFONT;
+        intParams[intCount++] = fontHandle;
+    }
+
+    void setForegroundAlpha(final int alpha) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETFOREGROUNDALPHA;
+        intParams[intCount++] = alpha;
+    }
+
+    void setForegroundColor(final int argb, final boolean updateAlpha) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_SETFOREGROUNDCOLOR;
+        intParams[intCount++] = argb;
+        intParams[intCount++] = updateAlpha? 1 : 0;
+    }
+
+    void setStrokeStyle(final int style) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETSTROKESTYLE;
+        intParams[intCount++] = style;
+    }
+
+    void setStrokeWidth(final int width) {
+        ensureIntArraySpace(2);
+        intParams[intCount++] = OP_SETSTROKEWIDTH;
+        intParams[intCount++] = width;
+    }
+
+    void translate(final int x, final int y) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_TRANSLATE;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+    }
+
+    void scale(final int x, final int y) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_SCALE;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+    }
+
+    void resetTransform() {
+        ensureIntArraySpace(1);
+        intParams[intCount++] = OP_RESETTRANSFORM;
+    }
+
+    void copyArea(final Image image, final int x, final int y) {
+        ensureIntArraySpace(3);
+        intParams[intCount++] = OP_COPYAREA1;
+        intParams[intCount++] = x;
+        intParams[intCount++] = y;
+        // TODO does this need flushing on the image
+        images.addElement(new Image(image));
+        raisePrimitiveFlag();
+    }
+
+    void copyArea(final int srcX, final int srcY, final int width, final int height, final int destX, final int destY, final boolean paint) {
+        ensureIntArraySpace(8);
+        intParams[intCount++] = OP_COPYAREA2;
+        intParams[intCount++] = srcX;
+        intParams[intCount++] = srcY;
+        intParams[intCount++] = width;
+        intParams[intCount++] = height;
+        intParams[intCount++] = destX;
+        intParams[intCount++] = destY;
+        intParams[intCount++] = paint? 1 : 0;
+        raisePrimitiveFlag();
+    }
+
+    // Unsupported operations
+    int getAdvancedCharacterWidth(final char ch, final boolean isAdvanced) {
+        reportNotSupported();
+        return 0;
+    }
+
+    void getFontMetricsData(final int[] data, final int fontHandle) {
+        reportNotSupported();
+    }
+
+    int getBackgroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getBackgroundColor() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getBlendingMode() {
+        reportNotSupported();
+        return 0;
+    }
+
+    void getClip(final int[] clip) {
+        reportNotSupported();
+    }
+
+    int getForegroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getForegroundColor() {
+        reportNotSupported();
+        return 0;
+    }
+
+    void getTextBoundingBox(final int[] boundingBox, final String string, final int alignments, final int flags, final int rectX, final int rectY, final int rectWidth, final int rectHeight) {
+        reportNotSupported();
+    }
+
+    int getStrokeWidth() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getStrokeStyle() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getTranslateX() {
+        reportNotSupported();
+        return 0;
+    }
+
+    int getTranslateY() {
+        reportNotSupported();
+        return 0;
+    }
+
+    boolean hasClipping() {
+        reportNotSupported();
+        return false;
+    }
+
+    void saveSettings() {
+        reportNotSupported();
+    }
+
+    void restoreSettings() {
+        reportNotSupported();
+    }
+}
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java	Thu Sep 02 20:20:40 2010 +0300
@@ -53,12 +53,10 @@
      */
 	static final int UPDATE_MAXVALUE = UPDATE_ITEM_MAX << 1;
 	static final int UPDATE_VALUE = UPDATE_ITEM_MAX << 2;
-	
 
     private int maxValue;
     private int value;
     private boolean interactive;
-    private boolean isGaugeCreation;
 
     /**
      * Constructor.
@@ -68,75 +66,12 @@
      * @param maxVal the maximum value.
      * @param initVal the initial value.
      */
-    public Gauge(String name, boolean interactive, int maxVal, int initVal)
-    {
-        setLabel(name);
-        isGaugeCreation = true;
-        this.interactive = interactive;
-        setMaxValue(maxVal);
-        setValue(initVal);
-        isGaugeCreation = false;
-    }
-
-    /**
-     * Check value validity.
-     *
-     * @param value the value.
-     * @param maxVal the maximum value.
-     * @return validated value.
-     */
-    private int checkValue(int value, int maxVal)
+    public Gauge(String aName, boolean aInteractive, int aMaxVal, int aInitVal)
     {
-        if(maxVal == INDEFINITE)
-        {
-            if(isGaugeCreation)
-            {
-                switch(value)
-                {
-                case CONTINUOUS_IDLE:
-                case INCREMENTAL_IDLE:
-                case CONTINUOUS_RUNNING:
-                case INCREMENTAL_UPDATING:
-                    break;
-                default:
-                    throw new IllegalArgumentException(
-                        MsgRepository.GAUGE_EXCEPTION_INVALID_VALUE);
-                }
-                
-                return value;
-            }
-            else
-            {
-            	return CONTINUOUS_IDLE;
-            }
-        }
-        else
-        {
-            // make sure the value is in [0, maxValue] range
-            value = (value < 0 ? 0 : value);
-            value = (value > maxVal ? maxVal : value);
-            return value;
-        }
-    }
-
-    /**
-     * Check maximum value validity.
-     *
-     * @param maxVal the maximum value.
-     * @param interactive is interactive.
-     * @return validated maximum value.
-     */
-    private static int checkMaxValue(int maxVal, boolean interactive)
-    {
-        if(interactive)
-        {
-            if(maxVal <= 0)
-            {
-                throw new IllegalArgumentException(
-                    MsgRepository.GAUGE_EXCEPTION_INVALID_MAXVALUE);
-            }
-        }
-        return maxVal;
+        maxValue = validateMaxValue(aMaxVal, aInteractive);
+		value = validateValue(aInitVal, maxValue);
+		interactive = aInteractive;
+        setLabel(aName);
     }
 
     /**
@@ -144,7 +79,7 @@
      *
      * @param value New value. Must be between zero and maxvalue inclusive.
      */
-    public void setValue(int value)
+    public void setValue(int aValue)
     {
         // TODO: eSWT support required
         /*
@@ -152,7 +87,7 @@
          * indefinite, we should update Gauge when this method is called, but
          * that requires eSWT extension.
          */
-        this.value = checkValue(value, this.maxValue);
+        value = validateValue(aValue, maxValue);
         updateParent(UPDATE_VALUE);
     }
 
@@ -171,10 +106,11 @@
      *
      * @param maxValue the maximum value.
      */
-    public void setMaxValue(int maxValue)
+    public void setMaxValue(int aMaxValue)
     {
-        this.maxValue = checkMaxValue(maxValue, interactive);
-        this.value = checkValue(getValue(), this.maxValue);
+        int oldMaxValue = maxValue;
+		maxValue = validateMaxValue(aMaxValue, interactive);
+        value = validateValue(getValue(), maxValue, oldMaxValue);
         updateParent(UPDATE_MAXVALUE);
     }
 
@@ -199,6 +135,147 @@
     }
 
     /**
+     * Check maximum value validity.
+     *
+     * @param aMaxVal the maximum value.
+     * @param aInteractive is interactive.
+     * @return validated maximum value.
+     */
+    private int validateMaxValue(int aMaxVal, boolean aInteractive)
+    {
+        if((!aInteractive) && (aMaxVal == INDEFINITE))
+        {
+			return aMaxVal;
+        }
+
+        if(aMaxVal <= 0)
+        {
+            throw new IllegalArgumentException(
+                MsgRepository.GAUGE_EXCEPTION_INVALID_MAXVALUE);
+        }
+
+        return aMaxVal;
+    }
+
+    /**
+     * Check value validity.
+     *
+     * @param aValue the value.
+     * @param aMaxVal the maximum value.
+     * @return validated value.
+     */
+	private int validateValue(int aValue, int aMaxVal)
+	{
+		if (aMaxVal == INDEFINITE)
+		{
+			switch (aValue)
+			{
+			case CONTINUOUS_IDLE:
+			case INCREMENTAL_IDLE:
+			case CONTINUOUS_RUNNING:
+			case INCREMENTAL_UPDATING:
+				break;
+			default:
+				throw new IllegalArgumentException();
+			}
+			return aValue;
+		}
+		else
+		{
+			return clampValue(aValue, aMaxVal);
+		}
+	}
+
+    /**
+     * Check value validity.
+     *
+     * @param aValue the value.
+     * @param aNewMaxVal the new maximum value.
+     * @param aOlddMaxVal the old maximum value.
+     * @return validated value.
+     */
+	private int validateValue(int aValue, int aNewMaxVal, int aOlddMaxVal)
+	{
+		if (aNewMaxVal == INDEFINITE)
+		{
+			return CONTINUOUS_IDLE;
+		}
+		else if (aOlddMaxVal == INDEFINITE)
+		{
+			return 0;
+		}
+		else
+		{
+			return clampValue(aValue, aNewMaxVal);
+		}
+	}
+
+	  /**
+	 * Validates the value against the range.
+	 *
+	 * @param aValue the value.
+	 * @param aMaxVal the maximum value.
+	 * @return validated value.
+	 */
+    private static int clampValue(int aValue, int aMaxVal)
+    {
+        aValue = Math.min(aValue, aMaxVal);
+        aValue = Math.max(aValue, 0);
+        return aValue;
+    }
+
+    /**
+     * @return if the Gauge is indefinite.
+     */
+    boolean isIndefinite()
+    {
+        return (maxValue == INDEFINITE);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.microedition.lcdui.Item#isFocusable()
+     */
+    boolean isFocusable()
+    {
+        return (isInteractive() || (getNumCommands() > 0));
+    }
+
+    /**
+     * Returns if this indicator meets the restrictions for its use in an Alert.
+     */
+    boolean isSuitableForAlert()
+    {
+        return (!isInteractive()
+                && getParent() == null
+                && getLabel() == null
+                && getLayout() == Item.LAYOUT_DEFAULT
+                && !isSizeLocked()
+                && getNumCommands() == 0
+                && getItemCommandListener() == null);
+    }
+
+    /**
+     * Called by widget listeners to update Item value.
+     */
+    void internalSetValue(int newValue)
+    {
+        value = validateValue(newValue, maxValue);
+		updateParent(UPDATE_VALUE);
+        // notify item state listener
+        notifyStateChanged();
+    }
+
+    /**
+     * Return layout with optional custom flags.
+     *
+     * @return layout directive
+     */
+    int internalGetLayout()
+    {
+        return super.internalGetLayout() | Item.LAYOUT_NEWLINE_BEFORE;
+    }
+
+    /**
      * Updates Form or Alert.
      *
      * @see javax.microedition.lcdui.Item#updateParent(int)
@@ -235,54 +312,5 @@
         return GaugeLayouter.calculatePreferredBounds(this);
     }
 
-    /**
-     * Called by widget listeners to update Item value.
-     */
-    void internalSetValue(int newValue)
-    {
-        this.value = checkValue(newValue, this.maxValue);
-        // notify item state listener
-        notifyStateChanged();
-    }
-
-    /**
-     * Return layout with optional custom flags.
-     *
-     * @return layout directive
-     */
-    int internalGetLayout()
-    {
-        return super.internalGetLayout() | Item.LAYOUT_NEWLINE_BEFORE;
-    }
+}
 
-    /**
-     * @return if the Gauge is indefinite.
-     */
-    boolean isIndefinite()
-    {
-        return (maxValue == INDEFINITE);
-    }
-
-    /**
-     * Returns if this indicator meets the restrictions for its use in an Alert.
-     */
-    boolean isSuitableForAlert()
-    {
-        return (!isInteractive()
-                && getParent() == null
-                && getLabel() == null
-                && getLayout() == Item.LAYOUT_DEFAULT
-                && !isSizeLocked()
-                && getNumCommands() == 0
-                && getItemCommandListener() == null);
-    }
-
-    /* (non-Javadoc)
-     * @see javax.microedition.lcdui.Item#isFocusable()
-     */
-    boolean isFocusable()
-    {
-        return (isInteractive() || (getNumCommands() > 0));
-    }
-
-}
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/GaugeLayouter.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/GaugeLayouter.java	Thu Sep 02 20:20:40 2010 +0300
@@ -20,10 +20,13 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.*;
-
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.internal.extension.Style;
+import org.eclipse.ercp.swt.mobile.CaptionedControl;
+
+
 /**
  * Class for layouting gauges.
  */
@@ -33,7 +36,10 @@
     /**
      * Key name for selection listener.
      */
-    private static final String SELECTION_LISTENER = "selection";
+    private static final String SELECTION_LISTENER = "SelectionListener";
+    private static final String MAX_LABEL_DATA = "MaxLabel";
+    private static final String CURRENT_LABEL_DATA = "CurrentLabel";
+
 
     /**
      * Constructor.
@@ -61,53 +67,47 @@
         Gauge gauge = (Gauge) item;
         // create an owning composite every time
         Composite comp = new Composite(parent, SWT.NONE);
+		FormLayout layout = new FormLayout();
+		comp.setLayout(layout);
 
         if(gauge.isInteractive())
         {
-            FormLayout layout = new FormLayout();
-            layout.marginBottom = Style.pixelMetric(Style.QSTYLE_PM_LAYOUTBOTTOMMARGIN);
-            layout.marginTop = Style.pixelMetric(Style.QSTYLE_PM_LAYOUTTOPMARGIN);
-            layout.marginLeft = Style.pixelMetric(Style.QSTYLE_PM_LAYOUTLEFTMARGIN);
-            layout.marginRight = Style.pixelMetric(Style.QSTYLE_PM_LAYOUTRIGHTMARGIN);
-            layout.spacing = Style.pixelMetric(Style.QSTYLE_PM_LAYOUTVERTICALSPACING);
-            comp.setLayout(layout);
-
-            // Current Value - Mutable Value
+            //Current Value Label
             Label currentlabel = new Label(comp, SWT.WRAP);
             currentlabel.setText(Integer.toString(gauge.getValue()));
             currentlabel.setAlignment(SWT.LEAD);
-
+			currentlabel.setData(CURRENT_LABEL_DATA, CURRENT_LABEL_DATA);
+			//Current Value Label Data
             FormData currLabelData = new FormData();
             currLabelData.left = new FormAttachment(0);
             currentlabel.setLayoutData(currLabelData);
-
+			//Slider
             Slider slider = new Slider(comp, SWT.HORIZONTAL);
             slider.setMinimum(0);
-            slider.setMaximum(gauge.getMaxValue() + 1);
+            slider.setMaximum(gauge.getMaxValue());
             slider.setSelection(gauge.getValue());
             slider.setIncrement(1);
             slider.setPageIncrement(1);
-
-            FormData SliderLayoutData = new FormData();
-            SliderLayoutData.right = new FormAttachment(100);
-            SliderLayoutData.left = new FormAttachment(currentlabel);
-            slider.setLayoutData(SliderLayoutData);
-
-            // Min Value
+			//Slider Data
+            FormData sliderLayoutData = new FormData();
+            sliderLayoutData.right = new FormAttachment(100);
+            sliderLayoutData.left = new FormAttachment(currentlabel);
+            slider.setLayoutData(sliderLayoutData);
+            //Min Value Label
             Label minlabel = new Label(comp, SWT.WRAP);
             minlabel.setText("0");
             minlabel.setAlignment(SWT.LEAD);
-
+			//Min Value Label Data
             FormData minLabelData = new FormData();
             minLabelData.left = new FormAttachment(slider, 0, SWT.LEFT);
             minLabelData.top =  new FormAttachment(slider);
             minlabel.setLayoutData(minLabelData);
-
-            // Max Value
+            //Max Value Label
             Label maxlabel = new Label(comp, SWT.WRAP);
             maxlabel.setText(Integer.toString(gauge.getMaxValue()));
             maxlabel.setAlignment(SWT.LEAD);
-
+			maxlabel.setData(MAX_LABEL_DATA, MAX_LABEL_DATA);
+			//Max Value Label Data
             FormData maxLabelData = new FormData();
             maxLabelData.right = new FormAttachment(slider, 0, SWT.RIGHT);
             maxLabelData.top =  new FormAttachment(slider);
@@ -127,26 +127,24 @@
                                                   SWT.HORIZONTAL | SWT.INDETERMINATE);
                     break;
                 case Gauge.CONTINUOUS_RUNNING:
-                    // Gauge like busy-state indicator:
+                    // Gauge like busy-state indicator with continuous activity:
                     progressBar = new ProgressBar(comp,
                                                   SWT.HORIZONTAL | SWT.INDETERMINATE);
                     break;
                 case Gauge.INCREMENTAL_IDLE:
                     // TODO: eSWT support required
-                    // Gauge like INCREMENTAL_UPDATING, but no activity.
+                    // Gauge like icremental updating, but no activity.
                     progressBar = new ProgressBar(comp,
                                                   SWT.HORIZONTAL | SWT.INDETERMINATE);
                     break;
                 case Gauge.INCREMENTAL_UPDATING:
                     // TODO: eSWT support required
-                    // Gauge which is updated on  calling Gauge.setValue().
+                    //Gauge like icremental updating, with indefinite activity.
                     progressBar = new ProgressBar(comp,
                                                   SWT.HORIZONTAL | SWT.INDETERMINATE);
                     break;
                 default:
-                    // This is error and will cause NullPointerException
-                    // later in this method. Gauge-class takes care that
-                    // this is never executed.
+                    // This is invalid case and should never occur, as Gauge should take care of it.
                     Logger.warning("Unexpected gauge value: " + gauge.getValue());
                     break;
                 }
@@ -154,24 +152,68 @@
             else
             {
                 progressBar = new ProgressBar(comp, SWT.HORIZONTAL);
-                progressBar.setMaximum(gauge.getMaxValue() + 1);
+                progressBar.setMaximum(gauge.getMaxValue());
                 progressBar.setSelection(gauge.getValue());
             }
+
+			if(progressBar != null)
+			{
+				FormData progressBarData = new FormData();
+				progressBarData.left = new FormAttachment(0);
+				progressBarData.right = new FormAttachment(100);
+				progressBar.setLayoutData(progressBarData);
+			}
+        }
+		parent.pack();
+        return parent;
+    }
+
+    /**
+     * returns the matching data Label of Gauge control.
+     */
+	Label eswtGetDataLabel(Control control, String data)
+	{
+        Control ret = null;
+		
+        if(control instanceof Label)
+        {
+			if(data.equals((String)control.getData(data)))
+            ret = control;
+        }
+        else if(control instanceof Composite)
+        {
+            Control[] children = ((Composite) control).getChildren();
+            for(int i = 0; i < children.length; i++)
+            {
+                Control result = eswtGetDataLabel(children[i], data);
+                if(result != null)
+                {
+                    ret = result;
+                    break;
+                }
+            }
         }
-
-        return comp;
-    }
+        return (Label)ret;
+	}
 
     /**
      * Set the size of the layouted Control.
      */
     void eswtResizeControl(Item item, Control control, int width, int height)
     {
-        super.eswtResizeControl(item, control, width, height);
-        control.getParent().setSize(width, height);
-        // This will move gauge to the center of the screen:
-        control.setLocation((width - control.getBounds().width) / 2,
-                            control.getLocation().y);
+		if((control instanceof Slider) || (control instanceof ProgressBar))
+		{
+			Control comp = control.getParent();
+			Control capt = comp.getParent();
+			comp.pack();
+			Point size = comp.computeSize(width, comp.getBounds().height);
+			comp.setSize(size.x, size.y);
+			Point loc = comp.getLocation();
+			if((height-size.y) != 0)
+			{
+				comp.setLocation(loc.x, loc.y + (height - size.y)/2);
+			}
+		}
     }
 
     /**
@@ -179,15 +221,19 @@
      */
     void eswtAddSpecificListeners(Item item, Control control)
     {
-        super.eswtAddSpecificListeners(item, control);
-        Gauge gauge = (Gauge) item;
-        if(gauge.isInteractive())
-        {
-            Slider slider = (Slider) control;
-            SelectionListener listener = new GaugeSelectionListener(gauge);
-            slider.addSelectionListener(listener);
-            slider.setData(SELECTION_LISTENER, listener);
-        }
+    	if(control instanceof Slider)
+   		{
+	        Slider slider = (Slider)control;
+			SelectionListener listener = (SelectionListener)slider.getData(SELECTION_LISTENER);
+	        if(listener == null)
+	        {
+		        super.eswtAddSpecificListeners(item, control);
+				Gauge gauge = (Gauge)item;
+		        listener = new GaugeSelectionListener(gauge);
+				slider.addSelectionListener(listener);
+				slider.setData(SELECTION_LISTENER, listener);
+	        }
+    	}
     }
 
     /**
@@ -195,19 +241,17 @@
      */
     void eswtRemoveSpecificListeners(Item item, Control control)
     {
-        super.eswtRemoveSpecificListeners(item, control);
-        Gauge gauge = (Gauge) item;
-        if(gauge.isInteractive())
-        {
-            Slider slider = (Slider) control;
-            SelectionListener listener = (SelectionListener) slider
-                                         .getData(SELECTION_LISTENER);
-            if(listener != null)
-            {
-                slider.removeSelectionListener(listener);
+    	if(control instanceof Slider)
+   		{
+	        Slider slider = (Slider)control;
+			SelectionListener listener = (SelectionListener)slider.getData(SELECTION_LISTENER);
+	        if(listener != null)
+	        {
+		        super.eswtRemoveSpecificListeners(item, control);
+				slider.removeSelectionListener(listener);
                 slider.setData(SELECTION_LISTENER, null);
-            }
-        }
+	        }
+    	}
     }
 
     /**
@@ -215,32 +259,102 @@
      */
     boolean eswtIsSpecificControl(Item item, Control control)
     {
-        if(((Gauge) item).isInteractive())
-        {
-            return (control instanceof Slider);
-        }
-        else
-        {
-            return (control instanceof ProgressBar);
-        }
+        return((control instanceof Slider) || (control instanceof ProgressBar));
     }
 
     /**
      * Updates the values of Gauge.
      */
-    void eswtUpdateItem(Item item, Control control, int reason, Object param)
+    void eswtUpdateItem(Item item, Control control, int aReason, Object param)
     {
-        Gauge gauge = (Gauge) item;
-        if(control instanceof ProgressBar)
-        {
-            ((ProgressBar) control).setMaximum(gauge.getMaxValue() + 1);
-            ((ProgressBar) control).setSelection(gauge.getValue());
-        }
-        else if(control instanceof Slider)
-        {
-            ((Slider) control).setMaximum(gauge.getMaxValue() + 1);
-            ((Slider) control).setSelection(gauge.getValue());
-        }
+		if(!(control instanceof  CaptionedControl))
+		{
+			return;
+		}
+		
+		Gauge gauge = (Gauge)item;
+		int reason = aReason & Item.UPDATE_SIZE_MASK;
+		
+		switch(reason)
+		{
+		case Item.UPDATE_NONE:
+			break;
+		
+		case Item.UPDATE_LABEL:
+		{
+			String label = gauge.getLabel();
+			if(label == null)
+			{
+				label = "";
+			}
+		
+			((CaptionedControl)control).setText(label);
+			control.pack();
+			break;
+		}
+		
+		case Gauge.UPDATE_VALUE:
+		{
+			//Setting the value to the control irrespective of the reason,
+			//as trade of for reason filtration.
+			Control ctrl = eswtFindSpecificControl(gauge, control);
+		
+			if(ctrl instanceof Slider)
+			{
+				Slider slider = (Slider)ctrl;
+				slider.setSelection(gauge.getValue());
+			}
+			else if(ctrl instanceof ProgressBar)
+			{
+				ProgressBar progressbar = (ProgressBar)ctrl;
+				progressbar.setSelection(gauge.getValue());
+			}
+
+			Label currLabel = eswtGetDataLabel(control, CURRENT_LABEL_DATA);
+			if(currLabel != null)
+			{
+				currLabel.setText(Integer.toString(gauge.getValue()));
+				currLabel.getParent().layout();
+			}
+			break;
+		}
+		
+		case Gauge.UPDATE_MAXVALUE:
+		{
+			Control ctrl = eswtFindSpecificControl(gauge, control);
+		
+			if(ctrl instanceof Slider)
+			{
+				Slider slider = (Slider)ctrl;
+				slider.setMaximum(gauge.getMaxValue());
+			}
+			else if(ctrl instanceof ProgressBar)
+			{
+				ProgressBar progressbar = (ProgressBar)ctrl;
+				progressbar.setMaximum(gauge.getMaxValue());
+			}
+
+			Label maxLabel = eswtGetDataLabel(control, MAX_LABEL_DATA);
+			if(maxLabel != null)
+			{
+				maxLabel.setText(Integer.toString(gauge.getMaxValue()));			
+				maxLabel.getParent().layout();
+			}
+
+			Label currLabel = eswtGetDataLabel(control, CURRENT_LABEL_DATA);
+			if(currLabel != null)
+			{
+				currLabel.setText(Integer.toString(gauge.getValue()));
+			}
+			break;
+		}
+		
+		default:
+		{
+			break;
+		}
+		}
+
     }
 
     /**
@@ -253,16 +367,23 @@
         {
             if(key == SWT.ARROW_RIGHT)
             {
-                gauge.internalSetValue(gauge.getValue() + 1);
-                gauge.setLayout(gauge.internalGetLayout());
+            	if(gauge.getValue() != gauge.getMaxValue())
+				{
+	                gauge.internalSetValue(gauge.getValue() + 1);
+	                gauge.setLayout(gauge.internalGetLayout());
+					return true;
+            	}
 
             }
             else if(key == SWT.ARROW_LEFT)
             {
-                gauge.internalSetValue(gauge.getValue() -1);
-                gauge.setLayout(gauge.internalGetLayout());
+            	if(gauge.getValue() > 0)
+            	{
+	                gauge.internalSetValue(gauge.getValue() - 1);
+	                gauge.setLayout(gauge.internalGetLayout());
+					return true;
+            	}
             }
-            return true;
         }
         return false;
     }
@@ -275,19 +396,25 @@
      */
     static Point calculateMinimumBounds(final Gauge gauge)
     {
-        final Point minSize = new Point(0, 0);
+	    final Point minSize = new Point(0, 0);
         ESWTUIThreadRunner.syncExec(new Runnable()
         {
             public void run()
             {
-                Control comp = eswtCreateControl(eswtGetStaticShell(), gauge);
-                minSize.x = getMaximumItemWidth(gauge);
-                minSize.y = ((Composite) comp).computeSize(minSize.x, SWT.DEFAULT).y;
-                applyMinMargins(gauge, minSize);
-                comp.dispose();
+		        CaptionedControl captioned = new CaptionedControl(eswtGetStaticShell(), SWT.VERTICAL);
+		        if(gauge.hasLabel())
+		        {
+			        captioned.setText(MIN_TEXT);
+				}
+		        eswtCreateControl(captioned, gauge);
+				int maxWidth = getMaximumItemWidth(gauge);
+		        Point size = captioned.computeSize(maxWidth, SWT.DEFAULT);
+		        captioned.dispose();
+		        minSize.x = size.x;
+		        minSize.y = size.y;
             }
         });
-        return minSize;
+		return minSize;
     }
 
     /**
@@ -297,22 +424,27 @@
      * @return Preferred area needed to display Item. x is width
      *      and y is height.
      */
-    static Point calculatePreferredBounds(Item item)
+    static Point calculatePreferredBounds(final Gauge gauge)
     {
-        final Point prefSize = new Point(0, 0);
-        final Gauge gauge = (Gauge)item;
-        ESWTUIThreadRunner.syncExec(new Runnable()
-        {
-            public void run()
-            {
-                Control comp = eswtCreateControl(eswtGetStaticShell(), gauge);
-                prefSize.x = getMaximumItemWidth(gauge);
-                prefSize.y = ((Composite) comp).computeSize(prefSize.x, SWT.DEFAULT).y;
-                applyPrefMargins(gauge, prefSize);
-                comp.dispose();
-            }
-        });
-        return prefSize;
+	    final Point prefSize = new Point(0, 0);
+	    ESWTUIThreadRunner.syncExec(new Runnable()
+	    {
+	        public void run()
+	        {
+		        CaptionedControl captioned = new CaptionedControl(eswtGetStaticShell(), SWT.VERTICAL);
+		        if(gauge.hasLabel())
+		        {
+			        captioned.setText(gauge.getLabel());
+				}
+		        eswtCreateControl(captioned, gauge);
+				int maxWidth = getMaximumItemWidth(gauge);
+		        Point size = captioned.computeSize(maxWidth, SWT.DEFAULT);
+		        captioned.dispose();
+		        prefSize.x = size.x;
+		        prefSize.y = size.y;
+	        }
+	    });
+		return prefSize;
     }
 
     /**
@@ -320,7 +452,6 @@
      */
     class GaugeSelectionListener implements SelectionListener
     {
-
         private Gauge gauge;
 
         /**
@@ -332,7 +463,10 @@
             this.gauge = gauge;
         }
 
-        public void widgetDefaultSelected(SelectionEvent e) { }
+        public void widgetDefaultSelected(SelectionEvent e)
+		{
+			Logger.method(this, "widgetDefaultSelected");
+		}
 
         /**
          * Called by eSWT when Slider's value is changed.
@@ -340,7 +474,9 @@
          */
         public void widgetSelected(SelectionEvent e)
         {
+        	//Implement for other Gauge types with Commands
             int newValue = ((Slider) e.getSource()).getSelection();
+
             // Actions needed only if value is adjusted:
             if(newValue != gauge.getValue())
             {
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/ItemLayouter.java	Wed Aug 18 09:43:15 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/ItemLayouter.java	Thu Sep 02 20:20:40 2010 +0300
@@ -396,7 +396,7 @@
         {
             ret = control;
         }
-        else if(control != null && control instanceof Composite)
+        else if(control instanceof Composite)
         {
             Control[] children = ((Composite) control).getChildren();
             for(int i = 0; i < children.length; i++)