serviceproviders/sapi_landmarks/landmarksservice/src/landmarkservice.cpp
changeset 26 5d0ec8b709be
parent 23 50974a8b132e
equal deleted inserted replaced
23:50974a8b132e 26:5d0ec8b709be
    29 #include "clandmarkcmdgetlandmarks.h"
    29 #include "clandmarkcmdgetlandmarks.h"
    30 #include "clandmarkmanagehandlers.h"
    30 #include "clandmarkmanagehandlers.h"
    31 #include "clandmarkfilter.h"
    31 #include "clandmarkfilter.h"
    32 #include "clandmarkmanageobjects.h"
    32 #include "clandmarkmanageobjects.h"
    33 #include "mlandmarkobserver.h"
    33 #include "mlandmarkobserver.h"
    34 
    34 #include "clandmarkdummyao.h"
       
    35 #include "clandmarkoperation.h"
    35 //CONSTANTS
    36 //CONSTANTS
    36 _LIT(KProtocolSeparator, "://");
    37 _LIT(KProtocolSeparator, "://");
    37 _LIT(KLocalProtocol, "file");
    38 _LIT(KLocalProtocol, "file");
    38 
    39 
    39 // ============================ MEMBER FUNCTIONS ===============================
    40 // ============================ MEMBER FUNCTIONS ===============================
    76 	iLog.Write (_L("CLandmarkService::ConstructL()") );
    77 	iLog.Write (_L("CLandmarkService::ConstructL()") );
    77 #endif
    78 #endif
    78 
    79 
    79 	iDatabaseManager = CPosLmDatabaseManager::NewL ( );
    80 	iDatabaseManager = CPosLmDatabaseManager::NewL ( );
    80 	iManageHandler = CLandmarkManageHandlers::NewL ( );
    81 	iManageHandler = CLandmarkManageHandlers::NewL ( );
       
    82 	iManageObjects = CLandmarkManageObjects::NewL();
    81 	SetActiveL(KNullDesC);
    83 	SetActiveL(KNullDesC);
    82 	}
    84 	}
    83 
    85 
    84 // -----------------------------------------------------------------------------
    86 // -----------------------------------------------------------------------------
    85 // CLandmarkService::CLandmarkService()
    87 // CLandmarkService::CLandmarkService()
   138 #ifdef _DEBUG
   140 #ifdef _DEBUG
   139 	iLog.Write(_L("CLandmarkService::ImportL:Exit"));
   141 	iLog.Write(_L("CLandmarkService::ImportL:Exit"));
   140 #endif    
   142 #endif    
   141 	}
   143 	}
   142 
   144 
       
   145 EXPORT_C void CLandmarkService::ImportL( TInt32 aTransactionId, CPosLandmarkParser& aLandmarkParser,
       
   146 		const TDesC& aDatabaseUri )
       
   147 	{
       
   148 #ifdef _DEBUG
       
   149 	iLog.Write(_L("CLandmarkService::ImportL: Async"));
       
   150 #endif
       
   151 
       
   152 	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
       
   153 	if ( !handler )
       
   154 		{
       
   155 		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
       
   156 		}
       
   157 	CLandmarkOperation* import = CLandmarkOperation::NewLC(iObserver,
       
   158 				iManageObjects);
       
   159 	import->ImportL(aTransactionId,handler,aLandmarkParser);
       
   160 	iManageObjects->AppendL(import);
       
   161 	CleanupStack::Pop(import);
       
   162 
       
   163 #ifdef _DEBUG
       
   164 	iLog.Write(_L("CLandmarkService::ImportL:Async:Exit"));
       
   165 #endif    
       
   166 	}
   143 // -----------------------------------------------------------------------------
   167 // -----------------------------------------------------------------------------
   144 // CLandmarkService::ExportL( CPosLandmarkEncoder* aLandmarkEncoder,
   168 // CLandmarkService::ExportL( CPosLandmarkEncoder* aLandmarkEncoder,
   145 //  const RArray<TPosLmItemId>& aLandmarkIdArray, const TDesC& aDatabaseUri )
   169 //  const RArray<TPosLmItemId>& aLandmarkIdArray, const TDesC& aDatabaseUri )
   146 // Exports a list of landmarks from database to a file.
   170 // Exports a list of landmarks from database to a file.
   147 // -----------------------------------------------------------------------------
   171 // -----------------------------------------------------------------------------
   157 	CPosLandmarkDatabase* db = handler->LandmarkDatabaseHandle();
   181 	CPosLandmarkDatabase* db = handler->LandmarkDatabaseHandle();
   158 	ExecuteAndDeleteLD(db->ExportLandmarksL(aLandmarkEncoder,aLandmarkIdArray,
   182 	ExecuteAndDeleteLD(db->ExportLandmarksL(aLandmarkEncoder,aLandmarkIdArray,
   159 					CPosLandmarkDatabase::EIncludeCategories));
   183 					CPosLandmarkDatabase::EIncludeCategories));
   160 	}
   184 	}
   161 
   185 
       
   186 EXPORT_C void CLandmarkService::ExportL( TInt32 aTransactionId,
       
   187 		CPosLandmarkEncoder& aLandmarkEncoder,
       
   188 		const RArray<TPosLmItemId>& aLandmarkIdArray,
       
   189 		const TDesC& aDestinationFile,
       
   190 		const TDesC& aDatabaseUri ) const
       
   191 	{
       
   192 	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
       
   193 	if (!handler)
       
   194 		{
       
   195 		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
       
   196 		}
       
   197 	CPosLandmarkDatabase* db = handler->LandmarkDatabaseHandle();
       
   198 	CLandmarkOperation* exportAO = CLandmarkOperation::NewLC(iObserver,
       
   199 					iManageObjects);
       
   200 	exportAO->ExportL(aTransactionId,db,aLandmarkEncoder,aLandmarkIdArray,aDestinationFile);
       
   201 	iManageObjects->AppendL(exportAO);
       
   202 	CleanupStack::Pop(exportAO);
       
   203 	}
       
   204 
   162 // -----------------------------------------------------------------------------
   205 // -----------------------------------------------------------------------------
   163 // CLandmarkService::GetListL(  CPosLmItemIterator*&  aIterator,
   206 // CLandmarkService::GetListL(  CPosLmItemIterator*&  aIterator,
   164 //    const CLandmarkFilter* aFilter, const  TDesC&  aDatabaseUri ) const
   207 //    const CLandmarkFilter* aFilter, const  TDesC&  aDatabaseUri ) const
   165 // Get a list of Landmarks/Categories from  Database synchronously based on filter.
   208 // Get a list of Landmarks/Categories from  Database synchronously based on filter.
   166 // -----------------------------------------------------------------------------
   209 // -----------------------------------------------------------------------------
   229 
   272 
   230 	//Leave if observer has not been set for the async call.
   273 	//Leave if observer has not been set for the async call.
   231 	if ( !iObserver )
   274 	if ( !iObserver )
   232 		{
   275 		{
   233 		User::Leave(KErrGeneral);
   276 		User::Leave(KErrGeneral);
   234 		}
       
   235 
       
   236 	if ( !iManageObjects )
       
   237 		{
       
   238 		iManageObjects = CLandmarkManageObjects::NewL();
       
   239 		}
   277 		}
   240 
   278 
   241 	if ( aFilter.IsLandmark() )
   279 	if ( aFilter.IsLandmark() )
   242 		{
   280 		{
   243 		CLandmarkCmdBase* getLm = CLandmarkCmdGetLandmarks::NewLC(iObserver,
   281 		CLandmarkCmdBase* getLm = CLandmarkCmdGetLandmarks::NewLC(iObserver,
   286 #endif
   324 #endif
   287 	
   325 	
   288 	return db->AddLandmarkL(aLandmark);
   326 	return db->AddLandmarkL(aLandmark);
   289 	}
   327 	}
   290 
   328 
       
   329 EXPORT_C void CLandmarkService::AddItemL(TInt32 aTransactionId,
       
   330 		CPosLandmark& aLandmark, const TDesC& aDatabaseUri)
       
   331 	{
       
   332 #ifdef _DEBUG
       
   333 	iLog.Write(_L("CLandmarkService::AddItemL: Landmark: Async"));
       
   334 #endif
       
   335 
       
   336 	//Leave if observer has not been set for the async call.
       
   337 	if (!iObserver)
       
   338 		{
       
   339 		User::Leave(KErrGeneral);
       
   340 		}
       
   341 
       
   342 	TPosLmItemId id = 0;
       
   343 	TRAPD(err,id = AddItemL(aLandmark,aDatabaseUri));
       
   344 	CLandmarkDummyAO* addLm = new (ELeave) CLandmarkDummyAO(iObserver,
       
   345 			iManageObjects);
       
   346 	CleanupStack::PushL(addLm);
       
   347 	addLm->Start(aTransactionId, CLandmarkDummyAO::EAdd, id, err);
       
   348 	iManageObjects->AppendL(addLm);
       
   349 	CleanupStack::Pop(addLm);
       
   350 #ifdef _DEBUG
       
   351 	iLog.Write(_L("CLandmarkService::AddItemL: Landmark: Async: Exit"));
       
   352 #endif
       
   353 	}
   291 // -----------------------------------------------------------------------------
   354 // -----------------------------------------------------------------------------
   292 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
   355 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
   293 // Adds a landmark category to the given database.
   356 // Adds a landmark category to the given database.
   294 // -----------------------------------------------------------------------------
   357 // -----------------------------------------------------------------------------
   295 //
   358 //
   311 	iLog.Write(_L("CLandmarkService::AddItemL: Category: Exit"));
   374 	iLog.Write(_L("CLandmarkService::AddItemL: Category: Exit"));
   312 #endif 
   375 #endif 
   313 	
   376 	
   314 	return cat->AddCategoryL(aCategory);
   377 	return cat->AddCategoryL(aCategory);
   315 	}
   378 	}
       
   379 EXPORT_C void CLandmarkService::AddItemL(TInt32 aTransactionId,
       
   380 		CPosLandmarkCategory& aCategory, const TDesC& aDatabaseUri)
       
   381 	{
       
   382 #ifdef _DEBUG
       
   383 	iLog.Write(_L("CLandmarkService::AddItemL: Category: Async"));
       
   384 #endif
       
   385 
       
   386 	//Leave if observer has not been set for the async call.
       
   387 	if (!iObserver)
       
   388 		{
       
   389 		User::Leave(KErrGeneral);
       
   390 		}
       
   391 
       
   392 	TPosLmItemId id = 0;
       
   393 	TRAPD(err,id = AddItemL(aCategory,aDatabaseUri));
       
   394 	CLandmarkDummyAO* addCat = new (ELeave) CLandmarkDummyAO(iObserver,
       
   395 			iManageObjects);
       
   396 	CleanupStack::PushL(addCat);
       
   397 	addCat->Start(aTransactionId, CLandmarkDummyAO::EAdd, id, err);
       
   398 	iManageObjects->AppendL(addCat);
       
   399 	CleanupStack::Pop(addCat);
       
   400 #ifdef _DEBUG
       
   401 	iLog.Write(_L("CLandmarkService::AddItemL: Category: Async: Exit"));
       
   402 #endif
       
   403 	}
   316 // -----------------------------------------------------------------------------
   404 // -----------------------------------------------------------------------------
   317 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
   405 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
   318 // Adds a landmark category to the given database.
   406 // Adds a landmark category to the given database.
   319 // -----------------------------------------------------------------------------
   407 // -----------------------------------------------------------------------------
   320 //
   408 //
   364 #ifdef _DEBUG
   452 #ifdef _DEBUG
   365 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark:Exit"));
   453 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark:Exit"));
   366 #endif    
   454 #endif    
   367 	}
   455 	}
   368 
   456 
       
   457 EXPORT_C void CLandmarkService::UpdateItemL(TInt32 aTransactionId,
       
   458 		const CPosLandmark& aLandmark, const TDesC& aDatabaseUri)
       
   459 	{
       
   460 #ifdef _DEBUG
       
   461 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async"));
       
   462 #endif
       
   463 
       
   464 	//Leave if observer has not been set for the async call.
       
   465 	if (!iObserver)
       
   466 		{
       
   467 		User::Leave(KErrGeneral);
       
   468 		}
       
   469 
       
   470 	//start async now
       
   471 	TPosLmItemId id = 0;
       
   472 	TRAPD(err,UpdateItemL(aLandmark,aDatabaseUri));
       
   473 	CLandmarkDummyAO* updateLm = new (ELeave) CLandmarkDummyAO(iObserver,
       
   474 			iManageObjects);
       
   475 	CleanupStack::PushL(updateLm);
       
   476 	updateLm->Start(aTransactionId, CLandmarkDummyAO::EUpdate, id, err);
       
   477 	iManageObjects->AppendL(updateLm);
       
   478 	CleanupStack::Pop(updateLm);
       
   479 #ifdef _DEBUG
       
   480 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async: Exit"));
       
   481 #endif
       
   482 	}
   369 // -----------------------------------------------------------------------------
   483 // -----------------------------------------------------------------------------
   370 // CLandmarkService::UpdateItemL( const CPosLandmarkCategory& aCategory,
   484 // CLandmarkService::UpdateItemL( const CPosLandmarkCategory& aCategory,
   371 //    const TDesC& aDatabaseUri )
   485 //    const TDesC& aDatabaseUri )
   372 // Updates a landmark Category in the given database.
   486 // Updates a landmark Category in the given database.
   373 // -----------------------------------------------------------------------------
   487 // -----------------------------------------------------------------------------
   388 	cat->UpdateCategoryL(aCategory);
   502 	cat->UpdateCategoryL(aCategory);
   389 
   503 
   390 #ifdef _DEBUG
   504 #ifdef _DEBUG
   391 	iLog.Write(_L("CLandmarkService::UpdateItemL: Category; Exit"));
   505 	iLog.Write(_L("CLandmarkService::UpdateItemL: Category; Exit"));
   392 #endif    
   506 #endif    
       
   507 	}
       
   508 
       
   509 EXPORT_C void CLandmarkService::UpdateItemL(TInt32 aTransactionId,
       
   510 		const CPosLandmarkCategory& aCategory, const TDesC& aDatabaseUri)
       
   511 	{
       
   512 #ifdef _DEBUG
       
   513 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async"));
       
   514 #endif
       
   515 
       
   516 	//Leave if observer has not been set for the async call.
       
   517 	if (!iObserver)
       
   518 		{
       
   519 		User::Leave(KErrGeneral);
       
   520 		}
       
   521 
       
   522 	//start async now
       
   523 	TPosLmItemId id = 0;
       
   524 	TRAPD(err,UpdateItemL(aCategory,aDatabaseUri));
       
   525 	CLandmarkDummyAO* updateCat = new (ELeave) CLandmarkDummyAO(iObserver,
       
   526 			iManageObjects);
       
   527 	CleanupStack::PushL(updateCat);
       
   528 	updateCat->Start(aTransactionId, CLandmarkDummyAO::EUpdate, id, err);
       
   529 	iManageObjects->AppendL(updateCat);
       
   530 	CleanupStack::Pop(updateCat);
       
   531 #ifdef _DEBUG
       
   532 	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async: Exit"));
       
   533 #endif
   393 	}
   534 	}
   394 
   535 
   395 // -----------------------------------------------------------------------------
   536 // -----------------------------------------------------------------------------
   396 // CLandmarkService::UpdateItemL( TPosLmDatabaseSettings aSettings, const TDesC& aDatabaseUri )
   537 // CLandmarkService::UpdateItemL( TPosLmDatabaseSettings aSettings, const TDesC& aDatabaseUri )
   397 // Updates the database information in the given database.
   538 // Updates the database information in the given database.
   533 #ifdef _DEBUG
   674 #ifdef _DEBUG
   534 	iLog.Write(_L("CLandmarkService::RemoveItemL:exit"));
   675 	iLog.Write(_L("CLandmarkService::RemoveItemL:exit"));
   535 #endif    
   676 #endif    
   536 	}
   677 	}
   537 
   678 
       
   679 EXPORT_C void CLandmarkService::RemoveItemL(TInt32 aTransactionId,
       
   680 		TPosLmItemId aItemId, TPosItem aItemIsLandmark,
       
   681 		const TDesC& aDatabaseUri)
       
   682 	{
       
   683 #ifdef _DEBUG
       
   684 	iLog.Write(_L("CLandmarkService::RemoveItemL: Async"));
       
   685 #endif
       
   686 
       
   687 	//Leave if observer has not been set for the async call.
       
   688 	if (!iObserver)
       
   689 		{
       
   690 		User::Leave(KErrGeneral);
       
   691 		}
       
   692 
       
   693 	TPosLmItemId id = 0;
       
   694 	TRAPD(err,RemoveItemL(aItemId,aItemIsLandmark,aDatabaseUri));
       
   695 	CLandmarkDummyAO* rem = new (ELeave) CLandmarkDummyAO(iObserver,
       
   696 			iManageObjects);
       
   697 	CleanupStack::PushL(rem);
       
   698 	rem->Start(aTransactionId, CLandmarkDummyAO::ERemove, id, err);
       
   699 	iManageObjects->AppendL(rem);
       
   700 	CleanupStack::Pop(rem);
       
   701 #ifdef _DEBUG
       
   702 	iLog.Write(_L("CLandmarkService::RemoveItemL: Async: Exit"));
       
   703 #endif
       
   704 	}
   538 // -----------------------------------------------------------------------------
   705 // -----------------------------------------------------------------------------
   539 // CLandmarkService::RemoveItemL( const TDesC& aDatabaseUri )
   706 // CLandmarkService::RemoveItemL( const TDesC& aDatabaseUri )
   540 // Removes the given database.
   707 // Removes the given database.
   541 // -----------------------------------------------------------------------------
   708 // -----------------------------------------------------------------------------
   542 //
   709 //
   610 #ifdef _DEBUG
   777 #ifdef _DEBUG
   611 	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL: Exit"));
   778 	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL: Exit"));
   612 #endif    
   779 #endif    
   613 	}
   780 	}
   614 
   781 
       
   782 EXPORT_C void CLandmarkService::LinkCategoryToLandmarksL(TInt32 aTransactionId,
       
   783 		TPosLmItemId aCategoryId, RArray<TPosLmItemId>& aLandmarkIdArray,
       
   784 		const TDesC& aDatabaseUri)
       
   785 	{
       
   786 #ifdef _DEBUG
       
   787 	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL :Async"));
       
   788 #endif
       
   789 	//Leave if observer has not been set for the async call.
       
   790 	if (!iObserver)
       
   791 		{
       
   792 		User::Leave(KErrGeneral);
       
   793 		}
       
   794 
       
   795 	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
       
   796 	if (!handler)
       
   797 		{
       
   798 		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
       
   799 		}
       
   800 	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
       
   801 	CLandmarkOperation* linkCat = CLandmarkOperation::NewLC(iObserver,
       
   802 			iManageObjects);
       
   803 	linkCat->LinkL(aTransactionId,aCategoryId,aLandmarkIdArray,cat);
       
   804 	iManageObjects->AppendL(linkCat);
       
   805 	CleanupStack::Pop(linkCat);
       
   806 #ifdef _DEBUG
       
   807 	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL: Async: Exit"));
       
   808 #endif    
       
   809 	}
   615 // -----------------------------------------------------------------------------
   810 // -----------------------------------------------------------------------------
   616 // CLandmarkService::UnlinkCategoryToLandmarksL( TPosLmItemId aCategoryId,
   811 // CLandmarkService::UnlinkCategoryToLandmarksL( TPosLmItemId aCategoryId,
   617 //    RArray< TPosLmItemId >& aLandmarkIdArray, const TDesC& aDatabaseUri )
   812 //    RArray< TPosLmItemId >& aLandmarkIdArray, const TDesC& aDatabaseUri )
   618 // associates a category to a set of landmarks.
   813 // associates a category to a set of landmarks.
   619 // -----------------------------------------------------------------------------
   814 // -----------------------------------------------------------------------------
   634 	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
   829 	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
   635 	ExecuteAndDeleteLD(cat->RemoveCategoryFromLandmarksL(aCategoryId,aLandmarkIdArray));
   830 	ExecuteAndDeleteLD(cat->RemoveCategoryFromLandmarksL(aCategoryId,aLandmarkIdArray));
   636 
   831 
   637 #ifdef _DEBUG
   832 #ifdef _DEBUG
   638 	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL: Exit"));
   833 	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL: Exit"));
       
   834 #endif    
       
   835 	}
       
   836 
       
   837 EXPORT_C void CLandmarkService::UnlinkCategoryToLandmarksL(TInt32 aTransactionId,
       
   838 		TPosLmItemId aCategoryId, RArray<TPosLmItemId>& aLandmarkIdArray,
       
   839 		const TDesC& aDatabaseUri)
       
   840 	{
       
   841 #ifdef _DEBUG
       
   842 	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL :Async"));
       
   843 #endif
       
   844 	//Leave if observer has not been set for the async call.
       
   845 	if (!iObserver)
       
   846 		{
       
   847 		User::Leave(KErrGeneral);
       
   848 		}
       
   849 
       
   850 	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
       
   851 	if (!handler)
       
   852 		{
       
   853 		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
       
   854 		}
       
   855 	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
       
   856 	CLandmarkOperation* linkCat = CLandmarkOperation::NewLC(iObserver,
       
   857 			iManageObjects);
       
   858 	linkCat->UnLinkL(aTransactionId,aCategoryId,aLandmarkIdArray,cat);
       
   859 	iManageObjects->AppendL(linkCat);
       
   860 	CleanupStack::Pop(linkCat);
       
   861 #ifdef _DEBUG
       
   862 	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL: Async: Exit"));
   639 #endif    
   863 #endif    
   640 	}
   864 	}
   641 
   865 
   642 // -----------------------------------------------------------------------------
   866 // -----------------------------------------------------------------------------
   643 // CLandmarkService::RegisterObserver( MLandmarkObserver* aObserver )
   867 // CLandmarkService::RegisterObserver( MLandmarkObserver* aObserver )