diff -r 522cd55cc3d7 -r 13ae750350c9 landmarksui/engine/src/CLmkDbUtils.cpp --- a/landmarksui/engine/src/CLmkDbUtils.cpp Tue Feb 02 00:16:03 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,530 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: This file contains utility methods for performing -* landmark database related operations like adding, deleting -* or updating a landmark and category etc. -* -*/ - - - -// INCLUDE FILES - -#include -#include -#include -#include "LmkConsts.h" -#include "landmarks.hrh" -#include "Debug.h" -#include "CLmkAOOperation.h" -#include "MLmkAOOperationObserver.h" -#include "CLmkIconOperation.h" -#include "CLmkAddToCatOperation.h" -#include "CLmkDbUtils.h" -#include "CLmkFields.h" -#include - - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { -#if defined(_DEBUG) -_LIT( KPanicMsg, "CLmkDbUtils" ); - -void Panic( TPanicCode aReason ) - { - User::Panic( KPanicMsg, aReason ); - } -#endif -const TInt KUrlProtocolEnds (3); -_LIT( KDoubleSlash, "//"); // Empty Mime Type indicator -} // namespace - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CLmkDbUtils -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CLmkDbUtils::CLmkDbUtils( -CPosLandmarkDatabase& aDb, -MLmkAOOperationObserver& aObserver, -TBool aProgressNote ) -: iDb( aDb ), - iObserver( &aObserver ), - iProgressNote( aProgressNote ) - { - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::NewL() -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkDbUtils* CLmkDbUtils::NewL( -CPosLandmarkDatabase& aDb, -MLmkAOOperationObserver& aObserver, -TBool aProgressNote ) - { - CLmkDbUtils* self = - new ( ELeave ) CLmkDbUtils( aDb, aObserver, aProgressNote ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::ConstructL() -// ----------------------------------------------------------------------------- -// -void CLmkDbUtils::ConstructL() - { - iCategoryMgr = CPosLmCategoryManager::NewL( iDb ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::~CLmkDbUtils() -// ----------------------------------------------------------------------------- -// -CLmkDbUtils::~CLmkDbUtils() - { - CancelLmOperation(); - delete iCategoryMgr; - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::HandleOperationL -// ----------------------------------------------------------------------------- -// -void CLmkDbUtils::HandleOperationL( -TOperationTypes aType, -TReal32 aProgress, -TInt aStatus ) - { - DEBUG2( CLmkDbUtils::HandleOperationL entered: progress=%d status=%d, - aProgress, aStatus ); - if ( aStatus != KPosLmOperationNotComplete ) - { - // iAOOperation usually always exists when this method is called. - // Exception may be e.g. that a leave is trapped by CLmkDbUtils user. - delete iAOOperation; - iAOOperation = NULL; - } - //this handle operation performs db compact operation. - TRAPD(err,iObserver->HandleOperationL( aType, aProgress, aStatus )); - if (err == KErrLocked) - { - //since db compact operation failed, db has to be re-initialized. - InitializeDbL(); - } - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::InitializeDbL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::InitializeDbL() - { - DEBUG( CLmkDbUtils::InitializeDbL entered ); - LeaveIfInUseL(); - - // We do not check IsInitializingNeeded() since it is better to do this - // always asynchronously to ensure consistent program flow. - - CPosLmOperation* operation = NULL; - operation = iDb.InitializeL(); - - SetupAndStartOperationL( operation, EInitialize ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CompactDbL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::CompactDbL() - { - DEBUG( CLmkDbUtils::CompactDbL entered ); - LeaveIfInUseL(); - - CPosLmOperation* operation = iDb.CompactL(); - - SetupAndStartOperationL( operation, ECompact ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::AddCategoryL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::AddCategoryL( - CPosLandmarkCategory& aCategory, - CPosLandmarkDatabase& aDb ) - { - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL( aDb ); - CleanupStack::PushL( categoryMgr ); - - categoryMgr->AddCategoryL( aCategory ); - - CleanupStack::PopAndDestroy( categoryMgr ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::RenameCategoryL -// ----------------------------------------------------------------------------- -// - EXPORT_C void CLmkDbUtils::RenameCategoryL( - TDesC& aCategoryName, - TPosLmItemId aId, - CPosLandmarkDatabase& aDb ) - { - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL( aDb ); - CleanupStack::PushL( categoryMgr ); - - CPosLandmarkCategory* category = categoryMgr->ReadCategoryLC( aId ); - category->SetCategoryNameL( aCategoryName ); - categoryMgr->UpdateCategoryL( *category ); - - CleanupStack::PopAndDestroy( 2 ); //category, categoryMgr - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CategoryNameL -// ----------------------------------------------------------------------------- -// -EXPORT_C HBufC* CLmkDbUtils::CategoryNameL( - CPosLandmarkDatabase& aDb, - TPosLmItemId aCategoryId ) - { - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL( aDb ); - CleanupStack::PushL( categoryMgr ); - - CPosLandmarkCategory* category = categoryMgr->ReadCategoryLC(aCategoryId); - TPtrC catName; - User::LeaveIfError( category->GetCategoryName ( catName ) ); - HBufC* result = catName.AllocL(); - CleanupStack::PopAndDestroy( 2 ); //category, categoryMgr - return result; - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::ChangeIconL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::ChangeIconL( - CPosLandmarkDatabase& aDb, - const TPosLmItemId aId, - TLmkItemType aItemType, - const TDesC& aMbmFileName, - TInt aIconIndex, TInt aMaskIndex) - { - - if ( aItemType == ELmkItemTypeLandmark ) - { - CPosLandmark* landmark = aDb.ReadLandmarkLC( aId ); - - landmark->SetIconL( aMbmFileName, aIconIndex, aMaskIndex); //KLmkDefaultId+1 ); - aDb.UpdateLandmarkL( *landmark ); - CleanupStack::PopAndDestroy(); // landmark - } - else - { - __ASSERT_DEBUG( aItemType == ELmkItemTypeCategory, - Panic( KLmkPanicUnknownItemType ) ); - - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL(aDb); - CleanupStack::PushL( categoryMgr ); - CPosLandmarkCategory* category = categoryMgr->ReadCategoryLC( aId ); - category->SetIconL( aMbmFileName, aIconIndex, aMaskIndex);//KCategoryDefaultId+1); - - categoryMgr->UpdateCategoryL( *category ); - CleanupStack::PopAndDestroy( 2 ); //category, categoryMgr - } - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::ChangeIconsL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::ChangeIconsL( - const RArray& aIdArray, - TLmkItemType aItemsType, - const TDesC& aMbmFileName, - TInt aIconIndex, TInt /*aMaskIndex*/) - { - LeaveIfInUseL(); - - CPosLmOperation* operation = CLmkIconOperation::NewL( iDb, - aIdArray, - aItemsType, - aMbmFileName, - aIconIndex ); - - SetupAndStartOperationL( operation, EChangeIcons ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::DeleteCategoriesL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::DeleteCategoriesL( - const RArray& aCategoryIdArray ) - { - LeaveIfInUseL(); - - CPosLmOperation* operation = - iCategoryMgr->RemoveCategoriesL( aCategoryIdArray ); - - SetupAndStartOperationL( operation, EDeleteCategories ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::DeleteLandmarkL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::DeleteLandmarkL( - TPosLmItemId aId, - CPosLandmarkDatabase& aDb ) - { - aDb.RemoveLandmarkL( aId ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::DeleteLandmarksL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::DeleteLandmarksL( - const RArray& aLandmarkIdArray ) - { - LeaveIfInUseL(); - - CPosLmOperation* operation = - iDb.RemoveLandmarksL( aLandmarkIdArray ); - - SetupAndStartOperationL( operation, EDeleteLandmarks ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::AddLmToCategoryL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::AddLmToCategoryL( - TPosLmItemId aLandmarkId, - TPosLmItemId aCategoryId, - CPosLandmarkDatabase& aDb ) - { - CPosLandmark* landmark = aDb.ReadLandmarkLC( aLandmarkId ); - landmark->AddCategoryL( aCategoryId ); - aDb.UpdateLandmarkL( *landmark ); - CleanupStack::PopAndDestroy(); // landmark - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::AddLmToCategoriesL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::AddLmToCategoriesL( - TPosLmItemId aLandmarkId, - const RArray& aCategoryIdArray ) - { - LeaveIfInUseL(); - - CPosLmOperation* operation = - CLmkAddToCatOperation::NewL( *iCategoryMgr, - aLandmarkId, - aCategoryIdArray ); - - SetupAndStartOperationL( operation, EAddToCategory ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::AddLmsToCategoriesL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::AddLmsToCategoriesL( - const RArray& aLandmarkIdArray, - const RArray& aCategoryIdArray ) - { - LeaveIfInUseL(); - - CPosLmOperation* operation = - CLmkAddToCatOperation::NewL( *iCategoryMgr, - aLandmarkIdArray, - aCategoryIdArray ); - - SetupAndStartOperationL( operation, EAddToCategory ); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CancelLmOperation -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::CancelLmOperation() - { - if ( iAOOperation ) - { - iAOOperation->Cancel(); - delete iAOOperation; - iAOOperation = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::LeaveIfInUseL -// ----------------------------------------------------------------------------- -// -void CLmkDbUtils::LeaveIfInUseL() - { - if ( iAOOperation ) - { - User::Leave( KErrInUse ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::SetupAndStartOperationL -// ----------------------------------------------------------------------------- -// -void CLmkDbUtils::SetupAndStartOperationL( - CPosLmOperation* aOperation, - MLmkAOOperationObserver::TOperationTypes aOpType ) - { - CleanupStack::PushL( aOperation ); - iAOOperation = - CLmkAOOperation::NewL( aOperation, - *this, - aOpType, - iProgressNote ); - CleanupStack::Pop( aOperation ); // ownership transferred - - iAOOperation->StartOperation(); - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CategoryIdL() -// ----------------------------------------------------------------------------- -// -EXPORT_C TPosLmItemId CLmkDbUtils::CategoryIdL( - CPosLandmarkDatabase& aDb, - const TDesC& aCategoryName ) - { - - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL( aDb ); - CleanupStack::PushL( categoryMgr ); - - TPosLmItemId categoryId = categoryMgr->GetCategoryL(aCategoryName); - if (categoryId == KPosLmNullItemId) - { - User::Leave(KErrArgument); - } - - CleanupStack::PopAndDestroy(categoryMgr); //, categoryMgr - return categoryId; - } - - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::IsLmWithThisFieldExist -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CLmkDbUtils::IsLmWithThisFieldExistL( TPositionFieldId aFieldId ) - { - RArray lmIdArray; - CleanupClosePushL( lmIdArray ); - lmIdArray.Reset(); - - TPosLmSortPref sortOrder( CPosLandmark::ELandmarkName, - TPosLmSortPref::EAscending ); - CPosLmItemIterator* iterator = iDb.LandmarkIteratorL( sortOrder ); - CleanupStack::PushL( iterator ); - TUint count = iterator->NumOfItemsL(); - if ( count > 0 ) - { // can only be called if there are some items - iterator->GetItemIdsL( lmIdArray, 0, count ); - } - CleanupStack::PopAndDestroy( iterator ); - - // search for lm with given position field - TBool lmkFieldDefined = EFalse; - for (TInt i = 0; i< lmIdArray.Count(); i++) - { - CPosLandmark* landmark = iDb.ReadLandmarkLC(lmIdArray[i]); - if ( landmark->IsPositionFieldAvailable( aFieldId ) ) - { - // Check if field info availabe or not - TPtrC fieldValue; - if (landmark->GetPositionField( aFieldId, fieldValue ) == KErrNone ) - { - if (fieldValue.Length() > 0 ) - { - lmkFieldDefined = ETrue; - CleanupStack::PopAndDestroy ( landmark ); - break; - } - } - } - CleanupStack::PopAndDestroy ( landmark ); - } - CleanupStack::PopAndDestroy( ); // LmIdArray - return lmkFieldDefined; - } - - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::CheckToTrimUrlProtocol -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::RemoveDefaultProtocolL(TPtr& aWebUrl) - { - TInt emptySlashPos(0); - if ( aWebUrl.Length() > 0 ) - { - emptySlashPos = aWebUrl.Find( KDoubleSlash ); - if ( emptySlashPos == 0 ) - { - aWebUrl.Delete(emptySlashPos, 2); - } - if(aWebUrl.Length() > KMaxUrlFieldLen) - { - TInt pos = aWebUrl.Find(KProtocol); - aWebUrl.Delete(emptySlashPos, (pos + KUrlProtocolEnds)); - } - } - } - -// ----------------------------------------------------------------------------- -// CLmkDbUtils::AddDefaultProtocolL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkDbUtils::AddDefaultProtocolL(CPosLandmark* landmark) - { - HBufC* webUrl = HBufC::NewL(KMaxBufferLen); - CleanupStack::PushL(webUrl); - TPtrC urlDes = webUrl->Des(); - landmark->GetPositionField(ELmkPositionFieldWebAddress,urlDes); - if(urlDes.Length() > KMaxUrlFieldLenWithDefaultProtocol) - { - TInt pos = urlDes.Find(KProtocol); - if (pos == KErrNotFound) - { - webUrl = webUrl->ReAllocL( KHttp().Length() + urlDes.Length() ); - TPtr url = webUrl->Des(); - webUrl->Des().Copy(urlDes); - webUrl->Des().Insert(0, KHttp); - landmark->SetPositionFieldL(ELmkPositionFieldWebAddress,webUrl->Des()); - } - } - CleanupStack::PopAndDestroy();//webUrl - } -// End of File