diff -r 50974a8b132e -r 5d0ec8b709be serviceproviders/sapi_landmarks/landmarksservice/src/landmarkservice.cpp --- 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& aLandmarkIdArray, const TDesC& aDatabaseUri ) @@ -159,6 +183,25 @@ CPosLandmarkDatabase::EIncludeCategories)); } +EXPORT_C void CLandmarkService::ExportL( TInt32 aTransactionId, + CPosLandmarkEncoder& aLandmarkEncoder, + const RArray& 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& 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& 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.