javamanager/javabackup/midp2backup_usif/src.s60/apparcbackuputil.cpp
branchRCL_3
changeset 83 26b2b12093af
parent 77 7cee158cb8cd
child 84 0553e2305d00
--- a/javamanager/javabackup/midp2backup_usif/src.s60/apparcbackuputil.cpp	Wed Sep 15 12:05:25 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,550 +0,0 @@
-/*
-* Copyright (c) 2008-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:  Implementation of CAppArcBackupUtil
-*
-*/
-
-
-#include "apparcbackuputil.h"
-#include "javaapparcutil.h"
-
-#include "javasymbianoslayer.h"
-#include "javauid.h"
-#include "logger.h"
-#include "javacommonutils.h"
-#include "s60commonutils.h"
-
-#include <apgcli.h>
-#include <wchar.h>
-#include <s32mem.h>
-#include <sysutil.h>
-#include <f32file.h>
-
-#include <memory>
-#include <string>
-
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <apgicnfl.h>
-#else
-#include <apgicnflpartner.h>
-#endif
-
-
-using namespace std;
-using namespace java::storage;
-using namespace java::backup;
-
-const TUid  KMidletApplicationTypeUid = { 0x10210E26 };
-_LIT(KDefaultFolder, "");
-
-// ======== MEMBER FUNCTIONS ========
-
-CAppArcBackupUtil::CAppArcBackupUtil()
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil constructor");
-}
-
-void CAppArcBackupUtil::ConstructL(RFs& aFs)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::ConstructL");
-
-    User::LeaveIfError(iApparcServer.Connect());
-
-    iNumberOfIcons = 0;
-    iFs = aFs;
-}
-
-
-CAppArcBackupUtil* CAppArcBackupUtil::NewL(RFs& aFs)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::NewL");
-
-    CAppArcBackupUtil* self = new(ELeave) CAppArcBackupUtil();
-    CleanupStack::PushL(self);
-    self->ConstructL(aFs);
-    CleanupStack::Pop();
-
-    return self;
-}
-
-
-CAppArcBackupUtil::~CAppArcBackupUtil()
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil destructor");
-
-    iApparcServer.Close();
-}
-
-
-void CAppArcBackupUtil::RegisterAppL(TPtr8& aRestoreIconPtr, TDriveNumber& aDrive)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::RegisterApp");
-
-    RDesReadStream stream(aRestoreIconPtr);
-    CleanupClosePushL(stream);
-
-    // Read Uid
-    int midletUid = stream.ReadUint32L();
-
-    if (!CheckIfAlreadyRegisteredL(midletUid))
-    {
-        // Read filename
-        TInt32 fileNameSize = stream.ReadInt32L();
-        HBufC* fileName = HBufC::NewL(fileNameSize);
-        CleanupStack::PushL(fileName);
-        TPtr16 fileNamePtr = fileName->Des();
-        stream.ReadL(fileNamePtr, fileNameSize / 2);   // half of size
-
-        // Read number of icons
-        TInt numberOfIcons = stream.ReadInt32L();
-//        numberOfIcons = 1;
-        //LOG1(EBackup, EInfo, "Number of Icons = %d", numberOfIcons);
-
-        TInt groupNameSize = stream.ReadInt32L();
-        TBuf<KApaMaxAppGroupName> groupName;
-
-        if (groupNameSize != 0)
-        {
-            stream.ReadL(groupName, groupNameSize / 2);
-        }
-
-        // check disk space
-        TInt index = sizeof(TUint32)    // midletUid
-                     + sizeof(TInt32)                // size of fileNameSize
-                     + fileNameSize                  // size of filename
-                     + sizeof(TInt32)                // size of numberOfIcons
-                     + sizeof(TInt32)                // group name size
-                     + groupNameSize;                // groupname
-
-        if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, aRestoreIconPtr.Size() - index, aDrive))
-        {
-            ELOG(EBackup, "Disk space below critical level. Leaving with KErrDiskFull.");
-            User::Leave(KErrDiskFull);
-        }
-
-        // Make directory if necessary
-        iFs.CreatePrivatePath(aDrive);
-
-        // Make full path of temporary icon file
-        TPath tempPath;
-        TPath tempPrivatePath;
-        iFs.PrivatePath(tempPrivatePath);
-
-        TDriveUnit* driveUnit = new(ELeave) TDriveUnit(aDrive);
-        CleanupStack::PushL(driveUnit);
-
-        tempPath.Append(driveUnit->Name().Left(1));
-        tempPath.Append(KDriveDelimiter);
-        tempPath.Append(tempPrivatePath);
-        tempPath.Append(fileNamePtr);
-
-        // Set private session path to point same drive where restoring
-        iFs.SetSessionToPrivate(aDrive);
-
-
-        RFile iconFile;
-        User::LeaveIfError(iconFile.Create(iFs, fileNamePtr, EFileWrite));
-
-        CleanupStack::PopAndDestroy(fileName);
-        CleanupClosePushL(iconFile);
-
-        iconFile.Write(aRestoreIconPtr.Mid(index));
-
-        // Register application
-        LOG1(EBackup,EInfo,"Registering app %d", midletUid);
-        TUid uid = TUid::Uid(midletUid);
-        TBuf<128>   appName;
-        CJavaApparcUtil::AppName(uid, appName);
-
-        CApaRegistrationResourceFileWriter* writer =
-            CApaRegistrationResourceFileWriter::NewL(uid,
-                    appName,
-                    TApaAppCapability::ENonNative);
-        CleanupStack::PushL(writer);
-
-        const TInt  KOpaqueDataLength = 4;
-        TBuf8<KOpaqueDataLength>    opaqueData;
-        RDesWriteStream             writeStream(opaqueData);
-        CleanupClosePushL(writeStream);
-
-        LOG(EBackup, EInfo, "Getting midlet entry");
-
-        JavaStorageApplicationEntry_t appEntries = StorageEntryL(uid);
-
-        if (appEntries.size() == 0)
-        {
-            ELOG(EBackup, "No midlet entry found in Java Storage; Mismatch between AppArc and Storage data. Abort backup");
-            User::Leave(KErrNotFound);
-        }
-
-        JavaStorageEntry attribute;
-        attribute.setEntry(NAME, L"");
-
-        // Get Name attribute from read attributes.
-        JavaStorageApplicationEntry_t::const_iterator findIterator = appEntries.find(attribute);
-        wstring midName;
-
-        if (findIterator != appEntries.end())
-        {
-            midName = (*findIterator).entryValue();
-
-        }
-        else
-        {
-            User::Leave(KErrBadHandle);
-        }
-
-        appEntries.clear();
-
-        HBufC* tempstr = java::util::S60CommonUtils::wstringToDes(midName.c_str());
-        TPtrC midletName = tempstr->Des();
-
-        if (groupNameSize != 0)
-        {
-            writer->SetGroupNameL(groupName);
-        }
-        else
-        {
-            writer->SetGroupNameL(KDefaultFolder);
-        }
-
-        writeStream.WriteUint32L(midletUid);
-        writeStream.CommitL();
-
-        LOG(EBackup, EInfo, "Setting opaque data");
-        writer->SetOpaqueDataL(opaqueData);
-
-        CApaLocalisableResourceFileWriter*  lWriter =
-            CApaLocalisableResourceFileWriter::NewL(KNullDesC,
-                                                    midletName,
-                                                    numberOfIcons,
-                                                    KNullDesC);
-        CleanupStack::PushL(lWriter);
-
-        // Prepare AppArc for deregistration
-        LOG(EBackup, EInfo, "PrepareNonNativeApplicationsUpdatesL");
-        iApparcServer.PrepareNonNativeApplicationsUpdatesL();
-
-        // Register application
-        LOG(EBackup, EInfo, "RegisterNonNativeApplicationL");
-        iApparcServer.RegisterNonNativeApplicationL(KMidletApplicationTypeUid,
-                aDrive,
-                *writer,
-                lWriter,
-                &iconFile);
-
-        // Commit registration changes
-        LOG(EBackup, EInfo, "CommitNonNativeApplicationsUpdatesL");
-        iApparcServer.CommitNonNativeApplicationsUpdatesL();
-
-        delete tempstr;
-        CleanupStack::PopAndDestroy(lWriter);
-        CleanupStack::PopAndDestroy(&writeStream);
-        CleanupStack::PopAndDestroy(writer);
-        iconFile.Close();
-        CleanupStack::PopAndDestroy(&iconFile);
-
-        TInt err = iFs.Delete(tempPath);
-        LOG1(EBackup, EInfo, "iFs.Delete err = %d", err);
-        CleanupStack::PopAndDestroy(driveUnit);
-    }
-
-    CleanupStack::PopAndDestroy(&stream);
-}
-
-
-void CAppArcBackupUtil::DeregisterAppsL(TDriveNumber aDrive)
-{
-    LOG1(EBackup, EInfo, "CAppArcBackupUtil::DeregisterApps, drive: %d", aDrive);
-
-    // Initialise the process of getting apps
-    iApparcServer.GetFilteredApps(TApaAppCapability::ENonNative,
-                                  TApaAppCapability::ENonNative);
-
-    // Getting the apps one-by-one
-    TApaAppInfo* info = new(ELeave) TApaAppInfo();
-    CleanupStack::PushL(info);
-
-    TUid typeUid;
-
-    // Prepare AppArc for deregistration
-    LOG(EBackup, EInfo, "PrepareNonNativeApplicationsUpdatesL");
-    iApparcServer.PrepareNonNativeApplicationsUpdatesL();
-
-    while (!iApparcServer.GetNextApp((*info)))
-    {
-        LOG1(EBackup, EInfo, "Getting Next App from AppArc, UID = %d", info->iUid);
-
-        // Getting the type of the application
-        iApparcServer.GetAppType(typeUid, info->iUid);
-
-        // If it's a MIDlet, check if it has an entry in Java Registry
-        TInt drive = 0;
-        GetDriveOfApp(info->iFullName, drive);
-
-        if (typeUid == KMidletApplicationTypeUid && drive == aDrive)
-        {
-            LOG1(EBackup, EInfo, "Checking registry, midlet id = %d", info->iUid);
-            wstring PackageID;
-            // If there's no entry on the drive, deregister it from AppArc
-            JavaStorageApplicationEntry_t appEntries = StorageEntryL(info->iUid);
-
-            if (appEntries.size() != 0)
-            {
-                JavaStorageEntry attribute;
-                attribute.setEntry(PACKAGE_ID, L"");
-
-                JavaStorageApplicationEntry_t::const_iterator findIterator = appEntries.find(attribute);
-
-                if (findIterator != appEntries.end())
-                {
-                    PackageID = (*findIterator).entryValue();
-                }
-                else
-                {
-                    User::Leave(KErrBadHandle);
-                }
-
-                if (GetDrivefromStorageL(PackageID) != aDrive)
-                {
-                    iApparcServer.DeregisterNonNativeApplicationL(info->iUid);
-                    LOG1(EBackup, EInfo, "Deregistering midlet id = %d", info->iUid);
-                }
-            }
-            else
-            {
-                LOG(EBackup, EInfo, "Midlet entry not found in Java Storage; Deregister the Application");
-                iApparcServer.DeregisterNonNativeApplicationL(info->iUid);
-                LOG1(EBackup, EInfo, "Deregistering midlet id = %d", info->iUid);
-            }
-            appEntries.clear();
-        }
-    }
-
-    // Commit registration changes
-    LOG(EBackup, EInfo, "CommitNonNativeApplicationsUpdatesL");
-    iApparcServer.CommitNonNativeApplicationsUpdatesL();
-    CleanupStack::PopAndDestroy(info);
-}
-
-
-void CAppArcBackupUtil::GetMidletsFromAppArcL(RArray<TUid>& aUidArray, TDriveNumber aDrive)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::GetMidletsFromAppArc");
-    CleanupClosePushL(aUidArray);
-
-    // Initialise the process of getting apps
-    iApparcServer.GetFilteredApps(TApaAppCapability::ENonNative,
-                                  TApaAppCapability::ENonNative);
-
-    // Getting the apps one-by-one
-    TApaAppInfo* info = new(ELeave) TApaAppInfo();
-    CleanupStack::PushL(info);
-
-    TUid typeUid;
-    LOG1(EBackup, EInfo, "Drive Number aDrive = %d", aDrive);
-
-    while (!iApparcServer.GetNextApp((*info)))
-    {
-        // Getting the type of the application
-        iApparcServer.GetAppType(typeUid, info->iUid);
-
-        // If it's a MIDlet, check if it's registered to this drive
-        if (typeUid == KMidletApplicationTypeUid)
-        {
-            JavaStorageApplicationEntry_t appEntries = StorageEntryL(info->iUid);
-
-            if (appEntries.size() != 0)
-            {
-                JavaStorageEntry attribute;
-                attribute.setEntry(PACKAGE_ID, L"");
-
-                JavaStorageApplicationEntry_t::const_iterator findIterator = appEntries.find(attribute);
-                wstring PackageID;
-
-                if (findIterator != appEntries.end())
-                {
-                    PackageID = (*findIterator).entryValue();
-
-                }
-                else
-                {
-                    User::Leave(KErrBadHandle);
-                }
-                appEntries.clear();
-
-                if (GetDrivefromStorageL(PackageID) == aDrive)
-                {
-                    aUidArray.AppendL(info->iUid);
-                    iNumberOfIcons++;
-                }
-            }
-            else
-            {
-                ELOG(EBackup, "No entries from registry; midlet does not exist");
-            }
-        }
-    }
-    CleanupStack::PopAndDestroy(info);
-    CleanupStack::Pop();
-
-}
-
-
-void CAppArcBackupUtil::GetIconFilename(TUid aUid, HBufC*& aFullFileName)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::GetIconFilename");
-
-    iApparcServer.GetAppIcon(aUid, aFullFileName);
-}
-
-TInt CAppArcBackupUtil::NumberOfIcons()
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::NumberOfIcons");
-
-    return iNumberOfIcons;
-}
-
-void CAppArcBackupUtil::NumberOfOwnDefinedIcons(TUid aUid, TInt& aIconCount)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::NumberOfOwnDefinedIcons");
-
-    iApparcServer.NumberOfOwnDefinedIcons(aUid, aIconCount);
-}
-
-TBool CAppArcBackupUtil::CheckIfAlreadyRegisteredL(TInt& aUid)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::CheckIfAlreadyRegisteredL");
-
-    TApaAppInfo* info = new(ELeave) TApaAppInfo();
-
-    TInt err = iApparcServer.GetAppInfo(*info, TUid::Uid(aUid));
-    delete info;
-    if (err == KErrNone)
-    {
-        return ETrue;
-    }
-    else
-    {
-        return EFalse;
-    }
-
-
-}
-
-void CAppArcBackupUtil::GetDriveOfApp(TFileName aPath, TInt& aDrive)
-{
-    LOG(EBackup, EInfo, "CAppArcBackupUtil::DriveOfApp");
-
-    iFs.CharToDrive(aPath[0], aDrive);
-}
-
-
-TApaAppGroupName CAppArcBackupUtil::GetMidletGroupName(TUid aUid)
-{
-    TApaAppCapabilityBuf cap;
-
-    TInt err = iApparcServer.GetAppCapability(cap, aUid);
-    return cap().iGroupName;
-}
-
-
-JavaStorageApplicationEntry_t CAppArcBackupUtil::StorageEntryL(const TUid& aMidletUID)
-{
-    auto_ptr<JavaStorage> js(JavaStorage::createInstance());
-
-    try
-    {
-        js->open(JAVA_DATABASE_NAME);
-        LOG(EBackup, EInfo, "Java database opened");
-    }
-    catch (JavaStorageException jse)
-    {
-        ELOG(EBackup, "Opening database connection failed");
-        User::Leave(KErrNotFound);
-    }
-
-    JavaStorageApplicationEntry_t entries;
-
-    java::util::Uid appUid;
-    TUidToUid(aMidletUID, appUid);
-
-    try
-    {
-        js->read(APPLICATION_TABLE, appUid, entries);
-    }
-    catch (JavaStorageException jse)
-    {
-        ELOG(EBackup, "Read in Java Storage failed");
-        js->close();
-        User::Leave(KErrGeneral);
-    }
-    js->close();
-
-    return entries;
-}
-
-TDriveNumber CAppArcBackupUtil::GetDrivefromStorageL(wstring& aPackageID)
-{
-    wchar_t Drive;
-    auto_ptr<JavaStorage> js(JavaStorage::createInstance());
-
-    try
-    {
-        js->open(JAVA_DATABASE_NAME);
-    }
-    catch (JavaStorageException jse)
-    {
-        ELOG(EBackup, "Opening database connection failed");
-        User::Leave(KErrNotFound);
-    }
-
-    JavaStorageApplicationEntry_t entries;
-    java::util::Uid PackageID(aPackageID);
-
-    try
-    {
-        js->read(APPLICATION_PACKAGE_TABLE, PackageID, entries);
-    }
-    catch (JavaStorageException jse)
-    {
-        ELOG(EBackup, "Read in Java Storage failed");
-        js->close();
-        User::Leave(KErrGeneral);
-    }
-
-    js->close();
-
-    JavaStorageEntry attribute;
-    attribute.setEntry(ROOT_PATH, L"");
-
-    JavaStorageApplicationEntry_t::const_iterator findIterator = entries.find(attribute);
-    wstring RootPath;
-
-    if (findIterator != entries.end())
-    {
-        RootPath = (*findIterator).entryValue();
-
-    }
-    else
-    {
-        User::Leave(KErrBadHandle);
-    }
-
-    Drive = (wchar_t)RootPath[0];
-    LOG1(EBackup, EInfo, "Drive = %c", Drive);
-    TInt i = Drive - (wchar_t)'a';
-    LOG1(EBackup, EInfo, "Drive = %d", (TDriveNumber)i);
-    return (TDriveNumber)i;
-}