--- 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.