serviceproviders/sapi_landmarks/landmarksservice/src/landmarkservice.cpp
changeset 26 5d0ec8b709be
parent 23 50974a8b132e
--- a/serviceproviders/sapi_landmarks/landmarksservice/src/landmarkservice.cpp	Tue Nov 24 08:56:33 2009 +0200
+++ b/serviceproviders/sapi_landmarks/landmarksservice/src/landmarkservice.cpp	Thu Dec 17 09:09:50 2009 +0200
@@ -31,7 +31,8 @@
 #include "clandmarkfilter.h"
 #include "clandmarkmanageobjects.h"
 #include "mlandmarkobserver.h"
-
+#include "clandmarkdummyao.h"
+#include "clandmarkoperation.h"
 //CONSTANTS
 _LIT(KProtocolSeparator, "://");
 _LIT(KLocalProtocol, "file");
@@ -78,6 +79,7 @@
 
 	iDatabaseManager = CPosLmDatabaseManager::NewL ( );
 	iManageHandler = CLandmarkManageHandlers::NewL ( );
+	iManageObjects = CLandmarkManageObjects::NewL();
 	SetActiveL(KNullDesC);
 	}
 
@@ -140,6 +142,28 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::ImportL( TInt32 aTransactionId, CPosLandmarkParser& aLandmarkParser,
+		const TDesC& aDatabaseUri )
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::ImportL: Async"));
+#endif
+
+	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
+	if ( !handler )
+		{
+		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
+		}
+	CLandmarkOperation* import = CLandmarkOperation::NewLC(iObserver,
+				iManageObjects);
+	import->ImportL(aTransactionId,handler,aLandmarkParser);
+	iManageObjects->AppendL(import);
+	CleanupStack::Pop(import);
+
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::ImportL:Async:Exit"));
+#endif    
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::ExportL( CPosLandmarkEncoder* aLandmarkEncoder,
 //  const RArray<TPosLmItemId>& aLandmarkIdArray, const TDesC& aDatabaseUri )
@@ -159,6 +183,25 @@
 					CPosLandmarkDatabase::EIncludeCategories));
 	}
 
+EXPORT_C void CLandmarkService::ExportL( TInt32 aTransactionId,
+		CPosLandmarkEncoder& aLandmarkEncoder,
+		const RArray<TPosLmItemId>& aLandmarkIdArray,
+		const TDesC& aDestinationFile,
+		const TDesC& aDatabaseUri ) const
+	{
+	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
+	if (!handler)
+		{
+		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
+		}
+	CPosLandmarkDatabase* db = handler->LandmarkDatabaseHandle();
+	CLandmarkOperation* exportAO = CLandmarkOperation::NewLC(iObserver,
+					iManageObjects);
+	exportAO->ExportL(aTransactionId,db,aLandmarkEncoder,aLandmarkIdArray,aDestinationFile);
+	iManageObjects->AppendL(exportAO);
+	CleanupStack::Pop(exportAO);
+	}
+
 // -----------------------------------------------------------------------------
 // CLandmarkService::GetListL(  CPosLmItemIterator*&  aIterator,
 //    const CLandmarkFilter* aFilter, const  TDesC&  aDatabaseUri ) const
@@ -233,11 +276,6 @@
 		User::Leave(KErrGeneral);
 		}
 
-	if ( !iManageObjects )
-		{
-		iManageObjects = CLandmarkManageObjects::NewL();
-		}
-
 	if ( aFilter.IsLandmark() )
 		{
 		CLandmarkCmdBase* getLm = CLandmarkCmdGetLandmarks::NewLC(iObserver,
@@ -288,6 +326,31 @@
 	return db->AddLandmarkL(aLandmark);
 	}
 
+EXPORT_C void CLandmarkService::AddItemL(TInt32 aTransactionId,
+		CPosLandmark& aLandmark, const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::AddItemL: Landmark: Async"));
+#endif
+
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	TPosLmItemId id = 0;
+	TRAPD(err,id = AddItemL(aLandmark,aDatabaseUri));
+	CLandmarkDummyAO* addLm = new (ELeave) CLandmarkDummyAO(iObserver,
+			iManageObjects);
+	CleanupStack::PushL(addLm);
+	addLm->Start(aTransactionId, CLandmarkDummyAO::EAdd, id, err);
+	iManageObjects->AppendL(addLm);
+	CleanupStack::Pop(addLm);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::AddItemL: Landmark: Async: Exit"));
+#endif
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
 // Adds a landmark category to the given database.
@@ -313,6 +376,31 @@
 	
 	return cat->AddCategoryL(aCategory);
 	}
+EXPORT_C void CLandmarkService::AddItemL(TInt32 aTransactionId,
+		CPosLandmarkCategory& aCategory, const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::AddItemL: Category: Async"));
+#endif
+
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	TPosLmItemId id = 0;
+	TRAPD(err,id = AddItemL(aCategory,aDatabaseUri));
+	CLandmarkDummyAO* addCat = new (ELeave) CLandmarkDummyAO(iObserver,
+			iManageObjects);
+	CleanupStack::PushL(addCat);
+	addCat->Start(aTransactionId, CLandmarkDummyAO::EAdd, id, err);
+	iManageObjects->AppendL(addCat);
+	CleanupStack::Pop(addCat);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::AddItemL: Category: Async: Exit"));
+#endif
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::AddItemL( CPosLandmarkCategory& aCategory,const TDesC& aDatabaseUri )
 // Adds a landmark category to the given database.
@@ -366,6 +454,32 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::UpdateItemL(TInt32 aTransactionId,
+		const CPosLandmark& aLandmark, const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async"));
+#endif
+
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	//start async now
+	TPosLmItemId id = 0;
+	TRAPD(err,UpdateItemL(aLandmark,aDatabaseUri));
+	CLandmarkDummyAO* updateLm = new (ELeave) CLandmarkDummyAO(iObserver,
+			iManageObjects);
+	CleanupStack::PushL(updateLm);
+	updateLm->Start(aTransactionId, CLandmarkDummyAO::EUpdate, id, err);
+	iManageObjects->AppendL(updateLm);
+	CleanupStack::Pop(updateLm);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async: Exit"));
+#endif
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::UpdateItemL( const CPosLandmarkCategory& aCategory,
 //    const TDesC& aDatabaseUri )
@@ -392,6 +506,33 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::UpdateItemL(TInt32 aTransactionId,
+		const CPosLandmarkCategory& aCategory, const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async"));
+#endif
+
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	//start async now
+	TPosLmItemId id = 0;
+	TRAPD(err,UpdateItemL(aCategory,aDatabaseUri));
+	CLandmarkDummyAO* updateCat = new (ELeave) CLandmarkDummyAO(iObserver,
+			iManageObjects);
+	CleanupStack::PushL(updateCat);
+	updateCat->Start(aTransactionId, CLandmarkDummyAO::EUpdate, id, err);
+	iManageObjects->AppendL(updateCat);
+	CleanupStack::Pop(updateCat);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UpdateItemL: Landmark: Async: Exit"));
+#endif
+	}
+
 // -----------------------------------------------------------------------------
 // CLandmarkService::UpdateItemL( TPosLmDatabaseSettings aSettings, const TDesC& aDatabaseUri )
 // Updates the database information in the given database.
@@ -535,6 +676,32 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::RemoveItemL(TInt32 aTransactionId,
+		TPosLmItemId aItemId, TPosItem aItemIsLandmark,
+		const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::RemoveItemL: Async"));
+#endif
+
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	TPosLmItemId id = 0;
+	TRAPD(err,RemoveItemL(aItemId,aItemIsLandmark,aDatabaseUri));
+	CLandmarkDummyAO* rem = new (ELeave) CLandmarkDummyAO(iObserver,
+			iManageObjects);
+	CleanupStack::PushL(rem);
+	rem->Start(aTransactionId, CLandmarkDummyAO::ERemove, id, err);
+	iManageObjects->AppendL(rem);
+	CleanupStack::Pop(rem);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::RemoveItemL: Async: Exit"));
+#endif
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::RemoveItemL( const TDesC& aDatabaseUri )
 // Removes the given database.
@@ -612,6 +779,34 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::LinkCategoryToLandmarksL(TInt32 aTransactionId,
+		TPosLmItemId aCategoryId, RArray<TPosLmItemId>& aLandmarkIdArray,
+		const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL :Async"));
+#endif
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
+	if (!handler)
+		{
+		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
+		}
+	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
+	CLandmarkOperation* linkCat = CLandmarkOperation::NewLC(iObserver,
+			iManageObjects);
+	linkCat->LinkL(aTransactionId,aCategoryId,aLandmarkIdArray,cat);
+	iManageObjects->AppendL(linkCat);
+	CleanupStack::Pop(linkCat);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::LinkCategoryToLandmarksL: Async: Exit"));
+#endif    
+	}
 // -----------------------------------------------------------------------------
 // CLandmarkService::UnlinkCategoryToLandmarksL( TPosLmItemId aCategoryId,
 //    RArray< TPosLmItemId >& aLandmarkIdArray, const TDesC& aDatabaseUri )
@@ -639,6 +834,35 @@
 #endif    
 	}
 
+EXPORT_C void CLandmarkService::UnlinkCategoryToLandmarksL(TInt32 aTransactionId,
+		TPosLmItemId aCategoryId, RArray<TPosLmItemId>& aLandmarkIdArray,
+		const TDesC& aDatabaseUri)
+	{
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL :Async"));
+#endif
+	//Leave if observer has not been set for the async call.
+	if (!iObserver)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	CLandmarkHandler* handler = iManageHandler->GetHandlerL(aDatabaseUri);
+	if (!handler)
+		{
+		handler = iManageHandler->CreateHandlerL(aDatabaseUri);
+		}
+	CPosLmCategoryManager* cat = handler->CategoryManagerHandle();
+	CLandmarkOperation* linkCat = CLandmarkOperation::NewLC(iObserver,
+			iManageObjects);
+	linkCat->UnLinkL(aTransactionId,aCategoryId,aLandmarkIdArray,cat);
+	iManageObjects->AppendL(linkCat);
+	CleanupStack::Pop(linkCat);
+#ifdef _DEBUG
+	iLog.Write(_L("CLandmarkService::UnlinkCategoryToLandmarksL: Async: Exit"));
+#endif    
+	}
+
 // -----------------------------------------------------------------------------
 // CLandmarkService::RegisterObserver( MLandmarkObserver* aObserver )
 // Register an observer for aynsc method.