diff -r 0fd27995241b -r 9ac0a0a7da70 javatools/javaapppreconverter/src.s60/midletlist.cpp --- a/javatools/javaapppreconverter/src.s60/midletlist.cpp Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,513 +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: Java platform 2.0 javaapppreconverter process -* -*/ - -#include "midletlist.h" - - - -CMidletInfo::CMidletInfo() : - iMidletUid(TUid::Null()), iMidletId(KMaxTUint32), iSuiteId(KMaxTUint32), - iMidletName(NULL), iGroupName(NULL), iDrive(EDriveE) -{ -} - -CMidletInfo::CMidletInfo(CMidletInfo* aMidletInfo) -{ - iMidletUid = aMidletInfo->GetMidletUid(); - iMidletId = aMidletInfo->GetMidletId(); - iSuiteId = aMidletInfo->GetSuiteId(); - iMidletName = aMidletInfo->GetMidletName().Alloc(); - iGroupName = aMidletInfo->GetGroupName().Alloc(); - iDrive = aMidletInfo->GetDrive(); - iIconFileName = aMidletInfo->GetIconFileName(); -} - - -CMidletInfo::~CMidletInfo() -{ - delete iMidletName; - delete iGroupName; -} - - -TUid CMidletInfo::GetMidletUid() const -{ - return iMidletUid; -} - -TUint32 CMidletInfo::GetMidletId() const -{ - return iMidletId; -} - -TUint32 CMidletInfo::GetSuiteId() const -{ - return iSuiteId; -} - -const TDesC& CMidletInfo::GetMidletName() -{ - if (NULL == iMidletName) - { - return KNullDesC; - } - else - { - return *iMidletName; - } -} - -const TDesC& CMidletInfo::GetGroupName() -{ - if (NULL == iGroupName) - { - return KNullDesC; - } - else - { - return *iGroupName; - } -} - -TDriveNumber CMidletInfo::GetDrive() -{ - return iDrive; -} - -const TFileName& CMidletInfo::GetIconFileName() -{ - return iIconFileName; -} - - - - -void CMidletInfo::SetMidletUid(const TUid aUid) -{ - iMidletUid = aUid; -} - -void CMidletInfo::SetMidletId(const TUint32 aId) -{ - iMidletId = aId; -} - -void CMidletInfo::SetSuiteId(const TUint32 aId) -{ - iSuiteId = aId; -} - -void CMidletInfo::SetMidletName(const TDesC& aName) -{ - iMidletName = aName.Alloc(); -} - -void CMidletInfo::SetGroupName(const TDesC& aName) -{ - iGroupName = aName.Alloc(); -} - -void CMidletInfo::SetDrive(const TDriveNumber aDrive) -{ - iDrive = aDrive; -} - -void CMidletInfo::SetIconFileName(HBufC16 *aIconFileName) -{ - iIconFileName = *aIconFileName; -} - -void CMidletInfo::SetIconFileName(const TFileName &aIconFileName) -{ - iIconFileName = aIconFileName; -} - -void CMidletInfo::ExternalizeL(RWriteStream& aStream) const -{ - aStream.WriteUint32L(iMidletUid.iUid); - aStream.WriteUint32L(iMidletId); - aStream.WriteUint32L(iSuiteId); - - TInt32 nLen = 0; - if (iMidletName) - { - nLen = iMidletName->Length(); - } - aStream.WriteInt32L(nLen); - if (nLen > 0) - { - aStream.WriteL(*iMidletName); - } - - nLen = 0; - if (iGroupName) - { - nLen = iGroupName->Length(); - } - aStream.WriteInt32L(nLen); - if (nLen > 0) - { - aStream.WriteL(*iGroupName); - } - - aStream.WriteUint32L(iDrive); - - nLen = iIconFileName.Length(); - aStream.WriteInt32L(nLen); - if (nLen > 0) - { - aStream.WriteL(iIconFileName); - } - -} - -void CMidletInfo::InternalizeL(RReadStream& aStream) -{ - iMidletUid.iUid = aStream.ReadUint32L(); - iMidletId = aStream.ReadUint32L(); - iSuiteId = aStream.ReadUint32L(); - - TInt32 nLen = 0; - nLen = aStream.ReadInt32L(); - if (nLen > 0) - { - if (!iMidletName) - { - iMidletName = HBufC16::NewL(nLen + 8); - } - - TPtr16 tmpDes = iMidletName->Des(); - aStream.ReadL(tmpDes, nLen); - } - else - { - if (!iMidletName) - { - // empty midlet name - iMidletName = HBufC16::NewL(8); - } - } - - nLen = aStream.ReadInt32L(); - if (nLen > 0) - { - if (!iGroupName) - { - iGroupName = HBufC16::NewL(nLen + 8); - } - TPtr16 tmpDes = iGroupName->Des(); - aStream.ReadL(tmpDes, nLen); - } - else - { - if (!iGroupName) - { - // empty group name - iGroupName = HBufC16::NewL(8); - } - } - - iDrive = (TDriveNumber)aStream.ReadUint32L(); - - nLen = aStream.ReadInt32L(); - if (nLen > 0) - { - aStream.ReadL(iIconFileName, nLen); - } -} - -void CMidletInfo::ToString8(TDes8& aDescription) -{ - aDescription.Append(_L8("Uid: ")); - aDescription.AppendNumFixedWidth(iMidletUid.iUid, EHex, 8); - aDescription.Append(_L8("\nMidlet id: ")); - aDescription.AppendNumFixedWidth(iMidletId, EDecimal, 8); - aDescription.Append(_L8("\nSuite id: ")); - aDescription.AppendNumFixedWidth(iSuiteId, EDecimal, 8); - aDescription.Append(_L8("\nName: ")); - // Midlet name len is not limited. Make sure that buffer does not overflow. - aDescription.Append((*iMidletName).Left(256)); - aDescription.Append(_L8("\nGroup: ")); - // Group name is max 32 characters - aDescription.Append(*iGroupName); - aDescription.Append(_L8("\nDrive: ")); - aDescription.AppendNumFixedWidth(iDrive, EDecimal, 2); -} - -/* ---------------------------------------------------------------------------- */ - - - - -CMidletList::CMidletList() : - iMidletArray(RPointerArray()), iGetNextIndex(0), - iMidletArrayDestroyed(EFalse) -{ - -} - -CMidletList::~CMidletList() -{ - // Free the memory used by the RPointerArray. - // Do not destroy objects itself. - if (!iMidletArrayDestroyed) - { - iMidletArray.Close(); - } -} - -void CMidletList::ResetAndDestroy() -{ - iMidletArray.ResetAndDestroy(); - iMidletArrayDestroyed = ETrue; -} - -TInt CMidletList::Append(const CMidletInfo* aMidletInfo) -{ - if (NULL != Find(aMidletInfo->GetMidletUid())) - { - // midlet is already in list, do nothing - return KErrNone; - } - - return iMidletArray.Append(aMidletInfo); -} - -void CMidletList::Remove(const CMidletInfo* aMidletInfo) -{ - TInt nInd = iMidletArray.Find(aMidletInfo); - if (nInd < 0) - { - // The object is not in list, do nothing - return; - } - else if (nInd < iGetNextIndex) - { - // Removing one of the objects already returned by - // getNext(), the indexes of the objects not yet returned by - // getNext() are decreased by one. Must decrease iGetNextIndex too. - iGetNextIndex--; - } - - iMidletArray.Remove(nInd); -} - -TInt CMidletList::Count() const -{ - return iMidletArray.Count(); -} - -CMidletInfo* CMidletList::GetFirst() -{ - iGetNextIndex = 1; - - if (iMidletArray.Count() > 0) - { - return iMidletArray[0]; - } - else - { - return NULL; - } -} - -CMidletInfo* CMidletList::GetNext() -{ - if (iMidletArray.Count() > iGetNextIndex) - { - iGetNextIndex++; - return iMidletArray[iGetNextIndex-1]; - } - else - { - return NULL; - } -} - -CMidletInfo *CMidletList::Find(const TUid aMidletUid) -{ - TInt nCount = iMidletArray.Count(); - - for (TInt nInd = 0; nInd < nCount; nInd++) - { - if (iMidletArray[nInd]->GetMidletUid() == aMidletUid) - { - return iMidletArray[nInd]; - } - } - - return NULL; -} - -/** - * Return the first midlet that has name specified by aName and - * for which the midlet id and suite id have not yet been set. - * If midlet id and suite id have been set for all midlets with - * name specified by aName, returns the first midlet with name - * specified by aName - */ -CMidletInfo *CMidletList::Find(const TPtrC &aName) -{ - CMidletInfo *firstFound = NULL; - TInt nCount = iMidletArray.Count(); - - for (TInt nInd = 0; nInd < nCount; nInd++) - { - if (iMidletArray[nInd]->GetMidletName() == aName) - { - // If midlet id and suite id have already been set, - // find next midlet with the same name if any. - // If no such midlet, return this one. - if (NULL == firstFound) - { - firstFound = iMidletArray[nInd]; - } - if ((iMidletArray[nInd]->GetSuiteId() == KMaxTUint32) && - (iMidletArray[nInd]->GetMidletId() == KMaxTUint32)) - { - return iMidletArray[nInd]; - } - } - } - - return firstFound; -} - -void CMidletList::SetIds( - const TUint32 aUid, - const TUint32 aMidletSuiteId, - const TUint32 aMidletId) -{ - TUid uid; - uid.iUid = aUid; - CMidletInfo *midlet = Find(uid); - - if (NULL != midlet) - { - midlet->SetSuiteId(aMidletSuiteId); - midlet->SetMidletId(aMidletId); - } -} - -void CMidletList::SetIds( - const TPtrC &aName, - const TUint32 aMidletSuiteId, - const TUint32 aMidletId) -{ - CMidletInfo *midlet = Find(aName); - - if (NULL != midlet) - { - midlet->SetSuiteId(aMidletSuiteId); - midlet->SetMidletId(aMidletId); - } -} - -void CMidletList::ExportListL(RFs& aFs, const TFileName &aDirectory) -{ - if (iMidletArrayDestroyed || (iMidletArray.Count() == 0)) - { - // Trying to export empty list is an error - User::Leave(KErrArgument); - } - - // Create directory if it does not exist - TInt err= aFs.MkDirAll(aDirectory); - if ((KErrNone != err) && (KErrAlreadyExists != err)) - { - User::Leave(err); - } - - // Copy all icon files to directory - CFileMan *fm = CFileMan::NewL(aFs); - CleanupStack::PushL(fm); - CMidletInfo *midlet = GetFirst(); - TFileName newIconFileName; - TParse nameParser; - TUint32 nMidlets = 0; - - while (NULL != midlet) - { - User::LeaveIfError(fm->Copy(midlet->GetIconFileName(), aDirectory)); - - // set new icon file name - newIconFileName = aDirectory; - User::LeaveIfError(nameParser.Set(midlet->GetIconFileName(), NULL, NULL)); - newIconFileName.Append(nameParser.NameAndExt()); - midlet->SetIconFileName(newIconFileName); - - nMidlets++; - midlet = GetNext(); - } - - // Store all midlet info to a file in the directory - TFileName dataFilename = aDirectory; - dataFilename.Append(KMidletExportDataFileName); - - // Construct write stream so that new data file is created. - // If the file already exists, leave - RFileWriteStream writeStream; - User::LeaveIfError(writeStream.Create(aFs, dataFilename, EFileWrite)); - CleanupClosePushL(writeStream); - - // Write the number of midlets - writeStream.WriteUint32L(nMidlets); - - // write the midlet info one by one - midlet = GetFirst(); - while (NULL != midlet) - { - midlet->ExternalizeL(writeStream); - midlet = GetNext(); - } - - CleanupStack::PopAndDestroy(); // writeStream - CleanupStack::PopAndDestroy(fm); -} - -void CMidletList::ImportListL(RFs& aFs, const TFileName &aDirectory) -{ - CMidletInfo *midlet = NULL; - - // Form the data file name - TFileName dataFilename = aDirectory; - dataFilename.Append(KMidletExportDataFileName); - - // Open existing data file. If the file does not exist, leave - RFileReadStream readStream; - User::LeaveIfError(readStream.Open(aFs, dataFilename, EFileRead)); - CleanupClosePushL(readStream); - - // Read the number of midlets - TUint32 nMidlets = readStream.ReadUint32L(); - - for (TInt nInd = 0; nInd < nMidlets; nInd++) - { - // Read info of one midlet - midlet = new(ELeave) CMidletInfo; - CleanupStack::PushL(midlet); - midlet->InternalizeL(readStream); - - // Add it to list - Append(midlet); - CleanupStack::Pop(midlet); - } - - // close readStream - CleanupStack::PopAndDestroy(); -} -