landmarksui/engine/src/CLmkDbUtils.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
--- a/landmarksui/engine/src/CLmkDbUtils.cpp	Thu Aug 19 09:48:36 2010 +0300
+++ /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 <eikenv.h>
-#include <eikcapc.h>
-#include <EPos_CPosLmCategoryManager.h>
-#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 <lmkerrors.h>
-
-
-// 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<TPosLmItemId>& 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<TPosLmItemId>&  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<TPosLmItemId>& 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<TPosLmItemId>& aCategoryIdArray )
-	{
-	LeaveIfInUseL();
-
-	CPosLmOperation* operation =
-	    CLmkAddToCatOperation::NewL( *iCategoryMgr,
-	                                 aLandmarkId,
-	                                 aCategoryIdArray );
-
-	SetupAndStartOperationL( operation, EAddToCategory );
-	}
-
-// -----------------------------------------------------------------------------
-// CLmkDbUtils::AddLmsToCategoriesL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CLmkDbUtils::AddLmsToCategoriesL(
-	const RArray<TPosLmItemId>& aLandmarkIdArray,
-	const RArray<TPosLmItemId>& 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<TPosLmItemId> 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