javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,1300 @@
+/*
+* Copyright (c) 2008-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:  The JNI code for Java Installer component
+*                SifRegistrator.
+*
+*/
+
+#include <apacmdln.h>
+#include <apaid.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <s32mem.h>
+#include <w32std.h>
+
+#include "com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator.h"
+#include "javacommonutils.h"
+#include "javasymbianoslayer.h" // for CleanupResetAndDestroyPushL
+#include "logger.h"
+
+// SCR usage is enabled if this macro has been defined.
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+#include <qservicemanager.h>
+#include <usif/scr/scr.h>
+#include <usif/scr/screntries.h>
+#ifdef RD_JAVA_USIF_APP_REG
+#include <usif/scr/appreginfo.h>
+#endif // RD_JAVA_USIF_APP_REG
+
+// Helper macro for logging a TDesC.
+#define LOG_TDESC_L(compIdParam, logLevelParam, msgParam, tdescParam) \
+    {                                                               \
+        HBufC8* tdescBuf = HBufC8::NewLC(tdescParam.Length() + 1);  \
+        TPtr8 tdescPtr(tdescBuf->Des());                            \
+        tdescPtr.Append(tdescParam);                                \
+        LOG1(compIdParam, logLevelParam, msgParam, tdescPtr.PtrZ());\
+        CleanupStack::PopAndDestroy(tdescBuf);                      \
+    }
+
+// NAMESPACE DECLARATION
+QTM_USE_NAMESPACE
+using namespace java;
+using namespace Usif;
+
+IMPORT_C HBufC* CreateHBufCFromJavaStringLC(JNIEnv* aEnv, jstring aString);
+
+// Java MIME types.
+_LIT(KMimeTypeAppDescriptor, "text/vnd.sun.j2me.app-descriptor");
+_LIT(KMimeTypeJava, "application/java");
+_LIT(KMimeTypeJavaArchive, "application/java-archive");
+_LIT(KMimeTypeXJavaArchive, "application/x-java-archive");
+
+// Properties registered to SCR.
+_LIT(KMIDletName, "MIDlet-Name");
+_LIT(KUid, "Uid");
+_LIT(KMediaId, "Media-Id");
+_LIT(KMIDletInfoURL, "MIDlet-Info-URL");
+_LIT(KMIDletDescription, "MIDlet-Description");
+_LIT(KDownloadURL, "Download-URL");
+_LIT(KSettingsPlugin, "SettingsName");
+_LIT(KSettingsPluginValue, "javaapplicationsettingsview");
+
+#ifdef RD_JAVA_USIF_APP_REG
+// Symbian file path separator.
+_LIT(KPathSeperator, "\\");
+// Postfix for the fake application name generated for AppArc.
+_LIT(KAppPostfix, ".fakeapp");
+#endif // RD_JAVA_USIF_APP_REG
+
+/**
+ * Internal helper method for checking if specified application
+ * is already running.
+ *
+ * @param aUid application uid
+ * @param aBringToForeground if application is running and this
+ *   flag is true the application is brought to foreground.
+ * @return ETrue if application is running
+ */
+TBool IsAppRunningL(TUid aUid, TBool aBringToForeground)
+{
+    TBool result = EFalse;
+    // Getting list of current processes requires window
+    // server session, create it now.
+    RWsSession wsSession;
+    TInt err = wsSession.Connect();
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "IsAppRunning: Cannot connect to window server, error %d",
+              err);
+        return result;
+    }
+    CleanupClosePushL(wsSession);
+    // Get list of all processes in the device.
+    TApaTaskList taskList(wsSession);
+    TApaTask task = taskList.FindApp(aUid);
+    if (task.Exists())
+    {
+        // Application is already running.
+        result = ETrue;
+        if (aBringToForeground)
+        {
+            // Bring the application to foreground.
+            task.BringToForeground();
+        }
+    }
+    CleanupStack::PopAndDestroy(&wsSession);
+    return result;
+}
+
+/**
+ * Internal helper method for starting specified application.
+ *
+ * @param aUid application uid
+ * @return 1 if application was already running,
+ *   0 if application was started,
+ *   negative number (Symbian error code) in case of error.
+ */
+TInt StartAppL(TUid aUid)
+{
+    if (IsAppRunningL(aUid, ETrue))
+    {
+        // Application is already running, do nothing.
+        LOG1(EJavaInstaller, EInfo,
+             "StartAppL: Application 0x%x already running", aUid.iUid);
+        return 1;
+    }
+    TInt err = KErrNone;
+    LOG1(EJavaInstaller, EInfo,
+         "StartAppL: Starting application 0x%x", aUid.iUid);
+    TApaAppInfo appInfo;
+    RApaLsSession lsSession;
+    err = lsSession.Connect();
+    CleanupClosePushL(lsSession);
+    if (KErrNone == lsSession.GetAppInfo(appInfo, aUid))
+    {
+        CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+        cmdLine->SetExecutableNameL(appInfo.iFullName);
+        //cmdLine->SetCommandL(EApaCommandBackground);
+        //cmdLine->SetTailEndL(_L8(""));
+        err = lsSession.StartApp(*cmdLine);
+        CleanupStack::PopAndDestroy(cmdLine);
+    }
+    CleanupStack::PopAndDestroy(&lsSession);
+    LOG1(EJavaInstaller, EInfo,
+         "StartAppL: Result of starting application is %d", err);
+    return err;
+}
+
+/**
+ * Creates an instance of RSoftwareComponentRegistry and connects to it.
+ */
+RSoftwareComponentRegistry *CreateScrL()
+{
+    RSoftwareComponentRegistry *pScr = new RSoftwareComponentRegistry;
+    if (NULL == pScr)
+    {
+        ELOG(EJavaInstaller,
+             "CreateScrL: Creating RSoftwareComponentRegistry failed");
+        User::Leave(KErrGeneral);
+    }
+    TInt err = pScr->Connect();
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "CreateScrL: Connecting to RSoftwareComponentRegistry failed, error %d",
+              err);
+        delete pScr;
+        User::Leave(err);
+    }
+    return pScr;
+}
+
+/**
+ * See JNI method __1notifyAppChange.
+ * This method makes calls that may leave (the actual registering).
+ */
+#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
+void NotifyAppChangeL(JNIEnv *aEnv, jintArray aAppUids, jint aAppChange)
+{
+    RApaLsSession apaSession;
+    TInt err = apaSession.Connect();
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "NotifyAppChangeL: Error %d when connecting AppArc", err);
+        User::Leave(err);
+    }
+    CleanupClosePushL(apaSession);
+
+    RArray<TApaAppUpdateInfo> appUpdateInfos;
+    CleanupClosePushL(appUpdateInfos);
+    TInt appUidCount = aEnv->GetArrayLength(aAppUids);
+    jint* appUids = aEnv->GetIntArrayElements(aAppUids, NULL);
+    for (TInt i = 0; i < appUidCount; i++)
+    {
+        TApaAppUpdateInfo appUpdateInfo;
+        appUpdateInfo.iAppUid = TUid::Uid(appUids[i]);
+        appUpdateInfo.iAction = (TApaAppUpdateInfo::TApaAppAction)aAppChange;
+        appUpdateInfos.AppendL(appUpdateInfo);
+        LOG2(EJavaInstaller, EInfo, "NotifyAppChangeL uid: 0x%x, action: %d",
+             appUpdateInfo.iAppUid, appUpdateInfo.iAction);
+    }
+    aEnv->ReleaseIntArrayElements(aAppUids, appUids, 0);
+    User::LeaveIfError(apaSession.UpdateAppListL(appUpdateInfos));
+    CleanupStack::PopAndDestroy(&appUpdateInfos);
+
+    CleanupStack::PopAndDestroy(&apaSession);
+    LOG(EJavaInstaller, EInfo, "NotifyAppChangeL completed");
+}
+#else
+void NotifyAppChangeL(JNIEnv *, jintArray, jint)
+{
+}
+#endif // RD_JAVA_USIF_NOTIFY_APP_ARC
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _notifyAppChange
+ * Signature: ([II)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1notifyAppChange
+(JNIEnv *aEnv, jclass, jintArray aAppUids, jint aAppChange)
+{
+    TRAPD(err, NotifyAppChangeL(aEnv, aAppUids, aAppChange));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "notifyAppChange: notifying AppArc failed, error %d",
+              err);
+    }
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _launchAppView
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1launchAppView
+(JNIEnv *, jclass)
+{
+    TInt err = KErrNone;
+    /*
+    //Application Library UID.
+    const TUid KAppLibUid = { 0x20022F35 };
+
+    QServiceManager serviceManager;
+    QObject* activityManager =
+        serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
+    if (!activityManager)
+    {
+        err = serviceManager.error();
+        ELOG1(EJavaInstaller,
+              "launchAppView: loading ActivityManager failed, error %d", err);
+        return KErrCouldNotConnect;
+    }
+    QMetaObject::invokeMethod(activityManager, "launchActivity",
+                              Q_ARG(int, KAppLibUid.iUid), // AppLib uid
+                              Q_ARG(QString, "showInstalledApps"));
+    err = serviceManager.error();
+    delete activityManager;
+    if (QServiceManager::NoError != err)
+    {
+        ELOG1(EJavaInstaller,
+              "launchAppView: launching AppLib activity failed, error %d",
+              err);
+        return KErrCouldNotConnect;
+    }
+
+    // Start AppLib and bring it to foreground.
+    TRAP(err, StartAppL(KAppLibUid));
+    */
+    return err;
+}
+
+/**
+ * See JNI method __1registerJavaSoftwareType.
+ * This method makes calls that may leave (the actual registering).
+ */
+void RegisterJavaSoftwareTypeL(RSoftwareComponentRegistry *aScr, TBool aRegister = ETrue)
+{
+    RPointerArray<HBufC> javaMimeTypes;
+    CleanupResetAndDestroyPushL(javaMimeTypes);
+    javaMimeTypes.AppendL(KMimeTypeAppDescriptor().AllocL());
+    javaMimeTypes.AppendL(KMimeTypeJava().AllocL());
+    javaMimeTypes.AppendL(KMimeTypeJavaArchive().AllocL());
+    javaMimeTypes.AppendL(KMimeTypeXJavaArchive().AllocL());
+    if (aRegister)
+    {
+        TUid javaSifPluginUid = TUid::Uid(0x2002bc70);
+        _LIT_SECURE_ID(KJavaInstallerSid, 0x102033E6);
+        aScr->AddSoftwareTypeL(
+            Usif::KSoftwareTypeJava, javaSifPluginUid,
+            KJavaInstallerSid, KJavaInstallerSid, javaMimeTypes);
+    }
+    else
+    {
+        aScr->DeleteSoftwareTypeL(Usif::KSoftwareTypeJava, javaMimeTypes);
+    }
+    CleanupStack::PopAndDestroy(&javaMimeTypes);
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerJavaSoftwareType
+ * Signature: (Z)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerJavaSoftwareType
+(JNIEnv *, jclass, jboolean aRegister)
+{
+    RSoftwareComponentRegistry *pScr = NULL;
+    TRAPD(err, pScr = CreateScrL());
+    if (KErrNone != err)
+    {
+        return err;
+    }
+    TRAP(err, RegisterJavaSoftwareTypeL(pScr, aRegister));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "registerJavaSoftwareType: registration failed, error %d",
+              err);
+    }
+    pScr->Close();
+    delete pScr;
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _startSession
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1startSession
+(JNIEnv *, jclass, jboolean aTransaction)
+{
+    RSoftwareComponentRegistry *pScr = NULL;
+    TRAPD(err, pScr = CreateScrL());
+    if (KErrNone != err)
+    {
+        return err;
+    }
+    if (aTransaction)
+    {
+        // Prepare for Java application registrations / unregistrations.
+        TRAP(err, pScr->CreateTransactionL());
+        if (KErrNone != err)
+        {
+            // Close session and return error
+            ELOG1(EJavaInstaller,
+                  "startSession: Creating transaction failed, error %d", err);
+            pScr->Close();
+            return err;
+        }
+    }
+    // Return handle to session. Utilize the fact that in Symbian
+    // all pointer addresses are MOD 4 so the last 2 bits are 0
+    // and can be shifted out. This way the returned handle is
+    // always positive whereas Symbian error codes are always negative.
+    return reinterpret_cast<TUint>(pScr)>>2;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _commitSession
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1commitSession
+(JNIEnv *, jclass, jint aSessionHandle)
+{
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, pScr->CommitTransactionL());
+    if (KErrNone == err)
+    {
+        pScr->Close();
+        delete pScr;
+    }
+    else
+    {
+        ELOG1(EJavaInstaller,
+              "commitSession: Commiting transaction failed, error %d", err);
+    }
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _rollbackSession
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1rollbackSession
+(JNIEnv *, jclass, jint aSessionHandle)
+{
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, pScr->RollbackTransactionL());
+    pScr->Close();
+    delete pScr;
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+              "rollbackSession: Rolling back transaction failed, error %d",
+              err);
+    }
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _closeSession
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1closeSession
+(JNIEnv *, jclass, jint aSessionHandle)
+{
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    pScr->Close();
+    delete pScr;
+}
+
+/**
+ * Sets component property if given property value is not NULL.
+ */
+void SetComponentPropertyL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr,
+    TComponentId aComponentId, const TDesC &aName, jstring aValue)
+{
+    if (NULL != aValue)
+    {
+        HBufC *valueBuf = CreateHBufCFromJavaStringLC(aEnv, aValue);
+        aScr->SetComponentPropertyL(aComponentId, aName, *valueBuf);
+        //LOG_TDESC_L(EJavaInstaller, EInfo,
+        //            "SetComponentPropertyL: name %s", aName);
+        //LOG_TDESC_L(EJavaInstaller, EInfo,
+        //            "SetComponentPropertyL: value %s", valueBuf->Des());
+        CleanupStack::PopAndDestroy(valueBuf);
+    }
+}
+
+/**
+ * See JNI method __1registerComponent.
+ * This method makes calls that may leave (the actual registering).
+ */
+TComponentId RegisterComponentL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jint aUid,
+    jstring aSuiteName, jstring aVendor, jstring aVersion,
+    jstring aName, jstring aGlobalId,
+    jobjectArray aComponentFiles, TInt64 aComponentSize,
+    TBool aIsRemovable, TBool aIsDrmProtected,
+    TBool aIsOriginVerified, TBool aIsUpdate, jint aMediaId,
+    jstring aMidletInfoUrl, jstring aMidletDescription, jstring aDownloadUrl)
+{
+    HBufC *name = NULL;
+    if (NULL == aName)
+    {
+        // If name is not specified, use suite name.
+        name = CreateHBufCFromJavaStringLC(aEnv, aSuiteName);
+    }
+    else
+    {
+        name = CreateHBufCFromJavaStringLC(aEnv, aName);
+    }
+    HBufC *vendor = CreateHBufCFromJavaStringLC(aEnv, aVendor);
+    HBufC *version = CreateHBufCFromJavaStringLC(aEnv, aVersion);
+    HBufC *globalId = CreateHBufCFromJavaStringLC(aEnv, aGlobalId);
+
+    TComponentId componentId = aScr->AddComponentL(
+                                   *name, *vendor, Usif::KSoftwareTypeJava, globalId,
+                                   (aIsUpdate? EScrCompUpgrade: EScrCompInstall));
+    //LOG1(EJavaInstaller, EInfo,
+    //     "RegisterComponentL: added component %d", componentId);
+    aScr->SetComponentVersionL(componentId, *version);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: version set");
+    aScr->SetComponentSizeL(componentId, aComponentSize);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: size set");
+    aScr->SetIsComponentRemovableL(componentId, aIsRemovable);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: isRemovable set");
+    aScr->SetIsComponentDrmProtectedL(componentId, aIsDrmProtected);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: DrmProtected set");
+    aScr->SetIsComponentOriginVerifiedL(componentId, aIsOriginVerified);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: isOriginVerified set");
+    aScr->SetComponentPropertyL(componentId, KUid(), aUid);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: Uid property set");
+    aScr->SetComponentPropertyL(componentId, KMediaId(), aMediaId);
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: Media-Id property set");
+    aScr->SetComponentPropertyL(componentId, KSettingsPlugin(), KSettingsPluginValue());
+    //LOG(EJavaInstaller, EInfo, "RegisterComponentL: Settings plugin property set");
+
+    if (NULL != aName)
+    {
+        // If name is specified, store suite name as property.
+        SetComponentPropertyL(aEnv, aScr, componentId, KMIDletName(), aSuiteName);
+    }
+    SetComponentPropertyL(aEnv, aScr, componentId, KMIDletInfoURL(), aMidletInfoUrl);
+    SetComponentPropertyL(aEnv, aScr, componentId, KMIDletDescription(), aMidletDescription);
+    SetComponentPropertyL(aEnv, aScr, componentId, KDownloadURL(), aDownloadUrl);
+
+    CleanupStack::PopAndDestroy(globalId);
+    CleanupStack::PopAndDestroy(version);
+    CleanupStack::PopAndDestroy(vendor);
+    CleanupStack::PopAndDestroy(name);
+
+    TInt fileCount = aEnv->GetArrayLength(aComponentFiles);
+    for (TInt i = 0; i < fileCount; i++)
+    {
+        HBufC *componentFile = CreateHBufCFromJavaStringLC(
+                                   aEnv, (jstring)aEnv->GetObjectArrayElement(aComponentFiles, i));
+        aScr->RegisterComponentFileL(componentId, *componentFile);
+        CleanupStack::PopAndDestroy(componentFile);
+    }
+
+    return componentId;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerComponent
+ * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;JZZZZLcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerComponent
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jint aUid, jstring aSuiteName,
+ jstring aVendor, jstring aVersion, jstring aName, jstring aGlobalId,
+ jobjectArray aComponentFiles, jlong aComponentSize, jboolean aIsRemovable,
+ jboolean aIsDrmProtected, jboolean aIsOriginVerified, jboolean aIsUpdate,
+ jint aMediaId, jstring aMidletInfoUrl, jstring aMidletDescription,
+ jstring aDownloadUrl, jobject aComponentId)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TComponentId componentId = -1;
+    TRAPD(err, componentId = RegisterComponentL(
+                                 aEnv, pScr, aUid, aSuiteName, aVendor, aVersion, aName, aGlobalId,
+                                 aComponentFiles, aComponentSize, aIsRemovable,
+                                 aIsDrmProtected, aIsOriginVerified, aIsUpdate, aMediaId,
+                                 aMidletInfoUrl, aMidletDescription, aDownloadUrl));
+    __UHEAP_MARKEND;
+    if (KErrNone == err)
+    {
+        jclass clazz = aEnv->GetObjectClass(aComponentId);
+        jmethodID methodSetId = aEnv->GetMethodID(clazz, "setId", "(I)V");
+        aEnv->CallVoidMethod(aComponentId, methodSetId, componentId);
+    }
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _unregisterComponent
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1unregisterComponent
+(JNIEnv *, jclass, jint aSessionHandle, jint aComponentId)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TInt err = KErrNone;
+#ifdef RD_JAVA_USIF_APP_REG
+    TRAP(err, pScr->DeleteApplicationEntriesL(aComponentId));
+#endif // RD_JAVA_USIF_APP_REG
+    if (KErrNone == err)
+    {
+        TRAP(err, pScr->DeleteComponentL(aComponentId));
+    }
+    __UHEAP_MARKEND;
+    return err;
+}
+
+/**
+ * See JNI method __1registerApplication.
+ * This method makes calls that may leave.
+ */
+#ifdef RD_JAVA_USIF_APP_REG
+void RegisterApplicationL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr,
+    jint aComponentId, jint aAppUid,
+    jstring aAppName, jstring aAppFilename, jstring aGroupName,
+    jstring aIconFilename, jint aNumberOfIcons,
+    jintArray aLanguages, jobjectArray aAppNames)
+{
+    __UHEAP_MARK;
+    // Application Uid.
+    TUid appUid = TUid::Uid(aAppUid);
+
+    // Generate the executable name using the same algorithm as used
+    // earlier in S60 platform in case some external S60 application
+    // needs to parse the Uid from the executable name.
+    TFileName appName;
+    appName.Copy(KPathSeperator);
+    appName.AppendNum(appUid.iUid);
+    appName.Append(KAppPostfix);
+
+    HBufC *caption = CreateHBufCFromJavaStringLC(aEnv, aAppName);
+    HBufC *appFilename = CreateHBufCFromJavaStringLC(aEnv, aAppFilename);
+    HBufC *groupName = CreateHBufCFromJavaStringLC(aEnv, aGroupName);
+    HBufC *iconFilename = NULL;
+    TInt numberOfAppIcons = 0;
+    if (NULL != aIconFilename)
+    {
+        iconFilename = CreateHBufCFromJavaStringLC(aEnv, aIconFilename);
+        numberOfAppIcons = aNumberOfIcons;
+    }
+
+    RPointerArray<HBufC> ownedFileArray; // codescanner::resourcenotoncleanupstack
+    RPointerArray<Usif::CServiceInfo> serviceArray; // codescanner::resourcenotoncleanupstack
+    RPointerArray<Usif::CPropertyEntry> appPropertiesArray; // codescanner::resourcenotoncleanupstack
+    RPointerArray<Usif::CAppViewData> viewDataList; // codescanner::resourcenotoncleanupstack
+
+    RPointerArray<Usif::COpaqueData> opaqueDataArray;
+    CleanupResetAndDestroyPushL(opaqueDataArray);
+    // Write application Uid to opaque data (needed by MIDlet launcher).
+    TBuf8<4> opaqueDataBuf; // Opaque data will contain one signed 32-bit int.
+    RDesWriteStream writeStream(opaqueDataBuf);
+    writeStream.WriteInt32L(aAppUid);
+    writeStream.CommitL();
+    COpaqueData *opaqueData =
+        COpaqueData::NewLC(opaqueDataBuf, KUnspecifiedLocale);
+    opaqueDataArray.AppendL(opaqueData);
+    CleanupStack::Pop(opaqueData);
+
+    RPointerArray<Usif::CLocalizableAppInfo> localizableAppInfoList;
+    CleanupResetAndDestroyPushL(localizableAppInfoList);
+    // Add non-localized application name (caption) and icon.
+    CCaptionAndIconInfo *captionAndIconInfo = CCaptionAndIconInfo::NewLC(
+                /*aCaption=*/ *caption,
+                /*aIconFileName=*/ *iconFilename,
+                /*aNumOfAppIcons=*/ numberOfAppIcons);
+    CLocalizableAppInfo *locAppInfo = CLocalizableAppInfo::NewLC(
+                                          /*aShortCaption=*/ KNullDesC, /*aApplicationLanguage=*/ KNonLocalized,
+                                          /*aGroupName=*/ KNullDesC, /*aCaptionAndIconInfo=*/ captionAndIconInfo,
+                                          /*aViewDataList=*/ viewDataList);
+    localizableAppInfoList.AppendL(locAppInfo);
+    CleanupStack::Pop(locAppInfo);
+    CleanupStack::Pop(captionAndIconInfo);
+
+    // Add localized application names (captions).
+    RPointerArray<HBufC> captionsArray;
+    CleanupResetAndDestroyPushL(captionsArray);
+    TInt langCount = aEnv->GetArrayLength(aLanguages);
+    TInt captionCount = aEnv->GetArrayLength(aAppNames);
+    if (langCount == captionCount)
+    {
+        jint* languages = aEnv->GetIntArrayElements(aLanguages, NULL);
+        for (TInt i = 0; i < langCount; i++)
+        {
+            TLanguage tmpLanguage = (TLanguage)languages[i];
+            HBufC *tmpCaption = CreateHBufCFromJavaStringLC(
+                                    aEnv, (jstring)aEnv->GetObjectArrayElement(aAppNames, i));
+            captionsArray.AppendL(tmpCaption);
+            CleanupStack::Pop(tmpCaption);
+            //LOG1(EJavaInstaller, EInfo,
+            //     "RegisterApplicationL: language %d", tmpLanguage);
+            //LOG_TDESC_L(EJavaInstaller, EInfo,
+            //            "RegisterApplicationL: caption %s", tmpCaption->Des());
+            CCaptionAndIconInfo *tmpCaptionAndIconInfo =
+                CCaptionAndIconInfo::NewLC(
+                    /*aCaption=*/ *tmpCaption,
+                    /*aIconFileName=*/ KNullDesC,
+                    /*aNumOfAppIcons=*/ 0);
+            CLocalizableAppInfo *tmpLocAppInfo =
+                CLocalizableAppInfo::NewLC(
+                    /*aShortCaption=*/ KNullDesC,
+                    /*aApplicationLanguage=*/ tmpLanguage,
+                    /*aGroupName=*/ KNullDesC,
+                    /*aCaptionAndIconInfo=*/ tmpCaptionAndIconInfo,
+                    /*aViewDataList=*/ viewDataList);
+            localizableAppInfoList.AppendL(tmpLocAppInfo);
+            CleanupStack::Pop(tmpLocAppInfo);
+            CleanupStack::Pop(tmpCaptionAndIconInfo);
+        }
+        aEnv->ReleaseIntArrayElements(aLanguages, languages, 0);
+    }
+    else
+    {
+        WLOG2(EJavaInstaller,
+              "RegisterApplicationL: localisation not made because language " \
+              "count does not match to caption count (%d != %d)",
+              langCount, captionCount);
+    }
+
+    // Create application registration data objects.
+    TApplicationCharacteristics appCharacteristics;
+    appCharacteristics.iAttributes = TApaAppCapability::ENonNative;
+    appCharacteristics.iEmbeddability = TApplicationCharacteristics::ENotEmbeddable;
+    appCharacteristics.iSupportsNewFile = EFalse;
+    appCharacteristics.iAppIsHidden = EFalse;
+    appCharacteristics.iLaunchInBackground = EFalse;
+    appCharacteristics.iGroupName = *groupName;
+    CApplicationRegistrationData *appRegData =
+        CApplicationRegistrationData::NewLC(
+            /*aOwnedFileArray=*/ ownedFileArray,
+            /*aServiceArray=*/ serviceArray,
+            /*aLocalizableAppInfoList=*/ localizableAppInfoList,
+            /*aAppPropertiesArray=*/ appPropertiesArray,
+            /*aOpaqueDataArray=*/ opaqueDataArray,
+            /*aAppUid=*/ appUid, /*aAppFile=*/ appName,
+            /*aCharacteristics=*/ appCharacteristics,
+            /*aDefaultScreenNumber=*/ 0);
+    aScr->AddApplicationEntryL(aComponentId, *appRegData);
+    CleanupStack::PopAndDestroy(appRegData);
+
+    CleanupStack::PopAndDestroy(&captionsArray);
+    CleanupStack::Pop(&localizableAppInfoList); // deleted in appRegData destructor
+    CleanupStack::Pop(&opaqueDataArray); // deleted in appRegData destructor
+
+    if (NULL != aIconFilename)
+    {
+        CleanupStack::PopAndDestroy(iconFilename);
+    }
+    CleanupStack::PopAndDestroy(groupName);
+    CleanupStack::PopAndDestroy(appFilename);
+    CleanupStack::PopAndDestroy(caption);
+    __UHEAP_MARKEND;
+}
+#else
+void RegisterApplicationL(
+    JNIEnv *, RSoftwareComponentRegistry *, jint, jint, jstring,
+    jstring, jstring, jstring, jint, jintArray, jobjectArray)
+{
+}
+#endif // RD_JAVA_USIF_APP_REG
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerApplication
+ * Signature: (IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[I[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerApplication
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jint aComponentId, jint aAppUid,
+ jstring aAppName, jstring aAppFilename, jstring aGroupName,
+ jstring aIconFilename, jint aNumberOfIcons,
+ jintArray aLanguages, jobjectArray aAppNames)
+{
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, RegisterApplicationL(
+              aEnv, pScr, aComponentId, aAppUid, aAppName, aAppFilename,
+              aGroupName, aIconFilename, aNumberOfIcons,
+              aLanguages, aAppNames));
+    return err;
+}
+
+/**
+ * See JNI method __1registerLocalizedComponentName.
+ * This method makes calls that may leave.
+ */
+void RegisterLocalizedComponentNameL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jint aComponentId,
+    jstring aName, jstring aVendor, jint aLanguage)
+{
+    if (NULL != aName)
+    {
+        HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aName);
+        aScr->SetComponentNameL(aComponentId, *name, (TLanguage)aLanguage);
+        CleanupStack::PopAndDestroy(name);
+    }
+
+    if (NULL != aVendor)
+    {
+        HBufC *vendor = CreateHBufCFromJavaStringLC(aEnv, aVendor);
+        aScr->SetVendorNameL(aComponentId, *vendor, (TLanguage)aLanguage);
+        CleanupStack::PopAndDestroy(vendor);
+    }
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerLocalizedComponentName
+ * Signature: (IILjava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerLocalizedComponentName
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jint aComponentId, jstring aName, jstring aVendor, jint aLanguage)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, RegisterLocalizedComponentNameL(
+              aEnv, pScr, aComponentId, aName, aVendor, aLanguage));
+    __UHEAP_MARKEND;
+    return err;
+}
+
+/**
+ * See JNI method __1setLocalizedComponentProperty.
+ * This method makes calls that may leave.
+ */
+void SetLocalizedComponentPropertyL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jint aComponentId,
+    jstring aName, jstring aValue, jint aLanguage)
+{
+    if (NULL != aName && NULL != aValue)
+    {
+        HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aName);
+        HBufC *value = CreateHBufCFromJavaStringLC(aEnv, aValue);
+        if (KUnspecifiedLocale == aLanguage)
+        {
+            aScr->SetComponentPropertyL(aComponentId, *name, *value);
+        }
+        else
+        {
+            aScr->SetComponentPropertyL(
+                aComponentId, *name, *value, (TLanguage)aLanguage);
+        }
+        CleanupStack::PopAndDestroy(value);
+        CleanupStack::PopAndDestroy(name);
+    }
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _setLocalizedComponentProperty
+ * Signature: (IILjava/lang/String;Ljava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1setLocalizedComponentProperty
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jint aComponentId, jstring aName, jstring aValue, jint aLanguage)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, SetLocalizedComponentPropertyL(
+              aEnv, pScr, aComponentId, aName, aValue, aLanguage));
+    __UHEAP_MARKEND;
+    return err;
+}
+
+/**
+ * See JNI method __1getComponentId.
+ * This method makes calls that may leave.
+ */
+TComponentId GetComponentIdL(
+    JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jstring aGlobalId)
+{
+    HBufC *globalId = CreateHBufCFromJavaStringLC(aEnv, aGlobalId);
+    TComponentId componentId =
+        aScr->GetComponentIdL(*globalId, Usif::KSoftwareTypeJava);
+    CleanupStack::PopAndDestroy(globalId);
+    return componentId;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getComponentId
+ * Signature: (ILjava/lang/String;Lcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentId
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jstring aGlobalId, jobject aComponentId)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TComponentId componentId = -1;
+    TRAPD(err, componentId = GetComponentIdL(aEnv, pScr, aGlobalId));
+    __UHEAP_MARKEND;
+    if (KErrNone == err)
+    {
+        jclass clazz = aEnv->GetObjectClass(aComponentId);
+        jmethodID methodSetId = aEnv->GetMethodID(clazz, "setId", "(I)V");
+        aEnv->CallVoidMethod(aComponentId, methodSetId, componentId);
+    }
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getComponentIdForApp
+ * Signature: (IILcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+#ifdef RD_JAVA_USIF_APP_REG
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentIdForApp
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jint aAppUid, jobject aComponentId)
+{
+    TInt err = KErrNone;
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TUid appUid = TUid::Uid(aAppUid);
+    TComponentId componentId = -1;
+    TRAP(err, componentId = pScr->GetComponentIdForAppL(appUid));
+    __UHEAP_MARKEND;
+    if (KErrNone == err)
+    {
+        jclass clazz = aEnv->GetObjectClass(aComponentId);
+        jmethodID methodSetId = aEnv->GetMethodID(clazz, "setId", "(I)V");
+        aEnv->CallVoidMethod(aComponentId, methodSetId, componentId);
+    }
+    return err;
+}
+#else
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentIdForApp
+(JNIEnv *, jclass, jint, jint, jobject)
+{
+    return KErrNone;
+}
+#endif // RD_JAVA_USIF_APP_REG
+
+/**
+ * See JNI method __1getuid.
+ * This method makes calls that may leave.
+ */
+TInt GetUidL(jint aCid)
+{
+    // Create a new tmporary instance of RSoftwareComponentRegistry.
+    RSoftwareComponentRegistry *pScr = CreateScrL();
+    CleanupClosePushL(*pScr);
+    TInt uid = 0;
+    CPropertyEntry *property = pScr->GetComponentPropertyL(aCid, KUid());
+    if (NULL != property)
+    {
+        if (property->PropertyType() == CPropertyEntry::EIntProperty)
+        {
+            uid = ((CIntPropertyEntry*)property)->IntValue();
+        }
+        else
+        {
+            ELOG2(EJavaInstaller,
+                  "GetUidL: Incorrect property type %d for cid %d",
+                  property->PropertyType(), aCid);
+        }
+        delete property;
+    }
+    // Close and delete the temporary RSoftwareComponentRegistry.
+    CleanupStack::PopAndDestroy(pScr);
+    delete pScr; // For some reason PopAndDestroy does not delete this.
+    return uid;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getUid
+ * Signature: (IILcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getUid
+(JNIEnv *aEnv, jclass, jint aCid, jobject aComponentId)
+{
+    __UHEAP_MARK;
+    TInt uid = 0;
+    TRAPD(err, uid = GetUidL(aCid));
+    __UHEAP_MARKEND;
+    if (KErrNone == err)
+    {
+        jclass clazz = aEnv->GetObjectClass(aComponentId);
+        jmethodID methodSetId = aEnv->GetMethodID(clazz, "setId", "(I)V");
+        aEnv->CallVoidMethod(aComponentId, methodSetId, uid);
+    }
+    return err;
+}
+
+/**
+ * See JNI method __1logComponent.
+ * This method makes calls that may leave.
+ */
+void LogComponentL(JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jstring aGlobalId, TLanguage aLanguage)
+{
+    HBufC *globalId = CreateHBufCFromJavaStringLC(aEnv, aGlobalId);
+    CComponentEntry *componentEntry =
+        aScr->GetComponentL(*globalId, Usif::KSoftwareTypeJava, aLanguage);
+    if (NULL == componentEntry)
+    {
+        //LOG_TDESC_L(EJavaInstaller, EInfo,
+        //            "Component not found for GlobalId %s", globalId->Des());
+        CleanupStack::PopAndDestroy(globalId);
+        return;
+    }
+    CleanupStack::PopAndDestroy(globalId);
+
+    // Log component entry.
+    TComponentId componentId = componentEntry->ComponentId();
+    LOG_TDESC_L(EJavaInstaller, EInfo, "GlobalId: %s", componentEntry->GlobalId());
+    LOG1(EJavaInstaller, EInfo, "ComponentId: %d", componentId);
+    LOG_TDESC_L(EJavaInstaller, EInfo, "SoftwareType: %s", componentEntry->SoftwareType());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Name: %s", componentEntry->Name());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Vendor: %s", componentEntry->Vendor());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Version: %s", componentEntry->Version());
+    LOG1(EJavaInstaller, EInfo, "ComponentSize: %d", componentEntry->ComponentSize());
+    LOG1(EJavaInstaller, EInfo, "ScomoState: %d", componentEntry->ScomoState());
+    LOG1(EJavaInstaller, EInfo, "IsDrmProtected: %d", componentEntry->IsDrmProtected());
+    LOG1(EJavaInstaller, EInfo, "IsHidden: %d", componentEntry->IsHidden());
+    LOG1(EJavaInstaller, EInfo, "IsKnownRevoked: %d", componentEntry->IsKnownRevoked());
+    LOG1(EJavaInstaller, EInfo, "IsOriginVerified: %d", componentEntry->IsOriginVerified());
+    LOG1(EJavaInstaller, EInfo, "IsRemovable: %d", componentEntry->IsRemovable());
+    TDriveList driveList = componentEntry->InstalledDrives();
+    for (TInt i = EDriveA; i < driveList.Length(); i++)
+    {
+        if (driveList[i])
+        {
+            LOG1(EJavaInstaller, EInfo, "InstalledDrive: %d", i);
+        }
+    }
+    delete componentEntry;
+
+    // Log component properties.
+    RPointerArray<CPropertyEntry> properties;
+    aScr->GetComponentPropertiesL(componentId, properties, aLanguage);
+    CleanupResetAndDestroyPushL(properties);
+    for (TInt i = 0; i < properties.Count(); i++)
+    {
+        CPropertyEntry *propertyEntry = properties[i];
+        switch (propertyEntry->PropertyType())
+        {
+        case CPropertyEntry::EBinaryProperty:
+            LOG_TDESC_L(EJavaInstaller, EInfo, "BinaryProperty: %s",
+                        propertyEntry->PropertyName());
+            break;
+        case CPropertyEntry::EIntProperty:
+            LOG_TDESC_L(EJavaInstaller, EInfo, "IntProperty: %s",
+                        propertyEntry->PropertyName());
+            LOG2(EJavaInstaller, EInfo, "  = 0x%x (%d)",
+                 ((CIntPropertyEntry*)propertyEntry)->IntValue(),
+                 ((CIntPropertyEntry*)propertyEntry)->IntValue());
+            break;
+        case CPropertyEntry::ELocalizedProperty:
+            LOG_TDESC_L(EJavaInstaller, EInfo, "LocalizedProperty: %s",
+                        propertyEntry->PropertyName());
+            LOG_TDESC_L(EJavaInstaller, EInfo, " = %s",
+                        ((CLocalizablePropertyEntry*)propertyEntry)->StrValue());
+            break;
+        }
+    }
+    CleanupStack::PopAndDestroy(&properties);
+
+#ifdef RD_JAVA_USIF_APP_REG
+    // Log uids of applications associated to component.
+    RArray<TUid> appUids;
+    CleanupClosePushL(appUids);
+    aScr->GetAppUidsForComponentL(componentId, appUids);
+    if (appUids.Count() == 0)
+    {
+        LOG(EJavaInstaller, EInfo, "No component appUids found from SCR");
+    }
+    for (TInt i = 0; i < appUids.Count(); i++)
+    {
+        LOG2(EJavaInstaller, EInfo, "AppUid [%x] (%d)",
+             appUids[i].iUid, appUids[i].iUid);
+    }
+    CleanupStack::PopAndDestroy(&appUids);
+#endif // RD_JAVA_USIF_APP_REG
+}
+
+/**
+ * See JNI method __1logComponent.
+ * This method makes calls that may leave.
+ */
+void LogComponentL(JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jstring aGlobalId)
+{
+    // Log the component with all supported languages.
+    TComponentId componentId = GetComponentIdL(aEnv, aScr, aGlobalId);
+    RArray<TLanguage> languages;
+    CleanupClosePushL(languages);
+    aScr->GetComponentSupportedLocalesListL(componentId, languages);
+    LogComponentL(aEnv, aScr, aGlobalId, KNonLocalized);
+    for (TInt i = 0; i < languages.Count(); i++)
+    {
+        if (KNonLocalized == i)
+        {
+            continue;
+        }
+        TLanguage language = languages[i];
+        LOG1(EJavaInstaller, EInfo, "Component supports language %d", language);
+        LogComponentL(aEnv, aScr, aGlobalId, language);
+    }
+    CleanupStack::PopAndDestroy(&languages);
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _logComponent
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1logComponent
+(JNIEnv *aEnv, jclass, jint aSessionHandle, jstring aGlobalId)
+{
+    __UHEAP_MARK;
+    RSoftwareComponentRegistry *pScr =
+        reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
+    TRAPD(err, LogComponentL(aEnv, pScr, aGlobalId));
+    __UHEAP_MARKEND;
+    return err;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getUsifMode
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getUsifMode
+(JNIEnv *, jclass)
+{
+#ifdef RD_JAVA_USIF_APP_REG
+    return 1;
+#else
+    return 0;
+#endif // RD_JAVA_USIF_APP_REG
+}
+
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _notifyAppChange
+ * Signature: ([II)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1notifyAppChange
+(JNIEnv *, jclass, jintArray, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _launchAppView
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1launchAppView
+(JNIEnv *, jclass)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerJavaSoftwareType
+ * Signature: (Z)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerJavaSoftwareType
+(JNIEnv *, jclass, jboolean)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _startSession
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1startSession
+(JNIEnv *, jclass, jboolean)
+{
+    return 1; // dummy session handle
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _commitSession
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1commitSession
+(JNIEnv *, jclass, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _rollbackSession
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1rollbackSession
+(JNIEnv *, jclass, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _closeSession
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1closeSession
+(JNIEnv *, jclass, jint)
+{
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerComponent
+ * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;JZZZZLcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerComponent
+(JNIEnv *, jclass, jint, jint, jstring, jstring, jstring, jstring, jstring,
+ jobjectArray, jlong, jboolean, jboolean, jboolean, jboolean, jint, jstring,
+ jstring, jstring, jobject)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _unregisterComponent
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1unregisterComponent
+(JNIEnv *, jclass, jint, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerApplication
+ * Signature: (IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[I[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerApplication
+(JNIEnv *, jclass, jint, jint, jint, jstring, jstring, jstring, jstring, jint, jintArray, jobjectArray)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _registerLocalizedComponentName
+ * Signature: (IILjava/lang/String;Ljava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerLocalizedComponentName
+(JNIEnv *, jclass, jint, jint, jstring, jstring, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _setLocalizedComponentProperty
+ * Signature: (IILjava/lang/String;Ljava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1setLocalizedComponentProperty
+(JNIEnv *, jclass, jint, jint, jstring, jstring, jint)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getComponentId
+ * Signature: (ILjava/lang/String;Lcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentId
+(JNIEnv *, jclass, jint, jstring, jobject)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getComponentIdForApp
+ * Signature: (IILcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentIdForApp
+(JNIEnv *, jclass, jint, jint, jobject)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getUid
+ * Signature: (IILcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getUid
+(JNIEnv *, jclass, jint, jobject)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _logComponent
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1logComponent
+(JNIEnv *, jclass, jint, jstring)
+{
+    return KErrNone;
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getUsifMode
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getUsifMode
+(JNIEnv *, jclass)
+{
+    return 0;
+}
+
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK