diff -r 50974a8b132e -r 5d0ec8b709be serviceproviders/sapi_landmarks/src/landmarkinterface.cpp --- a/serviceproviders/sapi_landmarks/src/landmarkinterface.cpp Tue Nov 24 08:56:33 2009 +0200 +++ b/serviceproviders/sapi_landmarks/src/landmarkinterface.cpp Thu Dec 17 09:09:50 2009 +0200 @@ -295,66 +295,53 @@ User::Leave (SErrInvalidServiceArgument ); } - if ( !aCmdName.CompareF(KCancel) && (KLiwOptCancel & aCmdOptions) ) - { - Cancel (aInParamList, aOutParamList, aCmdOptions, aCallback ); - } - else - if ( !aCmdName.CompareF(KGetList) ) - { - GetListL (aInParamList, aOutParamList, aCmdOptions, aCallback ); - } - else - //since no other APIs support async return error if callback is - //provide - if ( aCallback ) - { - iErrMsg = KAsyncNotSupported().AllocL ( ); - User::Leave (SErrInvalidServiceArgument ); - } - else - if ( !aCmdName.CompareF(KAdd) ) - { - AddL (aInParamList, aOutParamList, aCmdOptions, aCallback ); - } - else - if ( !aCmdName.CompareF(KRemove) ) - { - RemoveL (aInParamList, aOutParamList, aCmdOptions, - aCallback ); - } - else - if ( !aCmdName.CompareF(KOrganise) ) - { - OrganiseL (aInParamList, aOutParamList, - aCmdOptions, aCallback ); - } - else - if ( !aCmdName.CompareF(KImport) ) - { - ImportL (aInParamList, aOutParamList, - aCmdOptions, aCallback ); - } - else - if ( !aCmdName.CompareF(KExport) ) - { - ExportL (aInParamList, aOutParamList, - aCmdOptions, aCallback ); - } - else - if ( !aCmdName.CompareF(KNew) ) - { - NewTemplateL (aInParamList, - aOutParamList, aCmdOptions, - aCallback ); - } - else - { - // invalid command return error in outparam list - iErrMsg = KInvalidServiceCmd().AllocL ( ); - User::Leave (SErrInvalidServiceArgument ); - } - } + if (!aCmdName.CompareF(KCancel) && (KLiwOptCancel & aCmdOptions)) + { + Cancel(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KGetList)) + { + GetListL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KAdd)) + { + AddL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KRemove)) + { + RemoveL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KOrganise)) + { + OrganiseL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KImport)) + { + ImportL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else if (!aCmdName.CompareF(KExport)) + { + ExportL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else + //since no other APIs support async return error if callback is + //provide + if (aCallback) + { + iErrMsg = KAsyncNotSupported().AllocL(); + User::Leave(SErrInvalidServiceArgument); + } + else if (!aCmdName.CompareF(KNew)) + { + NewTemplateL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else + { + // invalid command return error in outparam list + iErrMsg = KInvalidServiceCmd().AllocL(); + User::Leave(SErrInvalidServiceArgument); + } + } // --------------------------------------------------------------------------- // CLandmarkInterface::GetListL(const CLiwGenericParamList& aInParamList, @@ -437,18 +424,18 @@ // This function calls the appropriate functions based on the content type. // --------------------------------------------------------------------------- // -void CLandmarkInterface::AddL( const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, - MLiwNotifyCallback* /*aCallback*/) +void CLandmarkInterface::AddL(const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, TUint aCmdOptions, + MLiwNotifyCallback* aCallback) { - //Input param List must have contentType and data specified - if ( aInParamList.Count ( )< EIndex2 ) - { - ErrorMessageL (KAdd, KArgsMissing ); - iErrMsg->Des().Append (KMissing ); - //leave since argument is improper - User::Leave (SErrMissingArgument ); - } + //Input param List must have contentType and data specified + if (aInParamList.Count() < EIndex2) + { + ErrorMessageL(KAdd, KArgsMissing); + iErrMsg->Des().Append(KMissing); + //leave since argument is improper + User::Leave(SErrMissingArgument); + } //position to start search in input params TInt index = 0; @@ -471,25 +458,24 @@ ValidateParamL (KAdd, KContentType, variant, LIW::EVariantTypeDesC ); TPtrC contentType(variant.AsDes ( )); - //Content type is Landmark - if ( contentType == KLandmark ) - { - AddLandmarksL (aInParamList,aOutParamList ); - } - //Content type is Category. - else - if ( contentType == KCategory ) - { - AddCategoryL (aInParamList,aOutParamList ); - } - else - { - ErrorMessageL (KAdd, KContentType ); - iErrMsg->Des().Append (KInvalid ); - //leave since argument is improper - User::Leave (SErrInvalidServiceArgument ); - } - } + //Content type is Landmark + if (contentType == KLandmark) + { + AddLandmarksL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + //Content type is Category. + else if (contentType == KCategory) + { + AddCategoryL(aInParamList, aOutParamList, aCmdOptions, aCallback); + } + else + { + ErrorMessageL(KAdd, KContentType); + iErrMsg->Des().Append(KInvalid); + //leave since argument is improper + User::Leave(SErrInvalidServiceArgument); + } + } // --------------------------------------------------------------------------- // CLandmarkInterface::RemoveL(const CLiwGenericParamList& aInParamList, @@ -499,12 +485,12 @@ // This calls the appropriate service function based on the content type. // --------------------------------------------------------------------------- // -void CLandmarkInterface::RemoveL( const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& /*aOutParamList*/, TUint /*aCmdOptions*/, - MLiwNotifyCallback* /*aCallback*/) - { +void CLandmarkInterface::RemoveL(const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, + MLiwNotifyCallback* aCallback) + { //Input param List must have contentType and data specified - if ( aInParamList.Count ( )< EIndex2 ) + if (aInParamList.Count() < EIndex2) { ErrorMessageL (KAdd, KArgsMissing ); iErrMsg->Des().Append (KMissing ); @@ -562,14 +548,13 @@ variant = param->Value ( ); ValidateParamL (KRemove, KDataFields, variant, LIW::EVariantTypeMap ); const CLiwMap* landmarkMap = variant.AsMap ( ); - CleanupStack::PushL( - TCleanupItem( TLiwVariant::VariantCleanup, &variant ) ); - ValidateParamL (KRemove, KId, landmarkMap, - LIW::EVariantTypeDesC, ETrue, variant ); - TPtrC lmPtr(variant.AsDes ( )); - TLex lmparseString(lmPtr); //Get Id as string and convert to TUint32 - TPosLmItemId lmid; - TInt parseErr = lmparseString.Val (lmid, EDecimal ); + CleanupStack::PushL(TCleanupItem(TLiwVariant::VariantCleanup, &variant)); + ValidateParamL(KRemove, KId, landmarkMap, LIW::EVariantTypeDesC, ETrue, + variant); + TPtrC lmPtr(variant.AsDes()); + TLex lmparseString(lmPtr); //Get Id as string and convert to TUint32 + TPosLmItemId lmid; + TInt parseErr = lmparseString.Val(lmid, EDecimal); TBuf lmIdString(KNullDesC ( )); if ( !parseErr ) { @@ -587,37 +572,53 @@ { dbUri.Set (variant.AsDes ( ) ); } - iService->RemoveItemL (lmid, CLandmarkService::ELandmark, dbUri ); + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + iService->RemoveItemL(transactionId, lmid, + CLandmarkService::ELandmark, dbUri); + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { + iService->RemoveItemL(lmid, CLandmarkService::ELandmark, dbUri); + } CleanupStack::PopAndDestroy(&variant); } //Content type is Category. - else - if ( contentType == KCategory ) - { - index = 0; - if ( posBased ) - { - param = &aInParamList[EIndex1]; - } - else - { - param = aInParamList.FindFirst (index, KDataFields ); - if ( !param ) - { - ErrorMessageL (KRemove, KDataFields ); - iErrMsg->Des().Append (KMissing ); - //leave since argument is improper - User::Leave (SErrMissingArgument ); - } - } - variant = param->Value ( ); - ValidateParamL (KRemove, KDataFields, variant, LIW::EVariantTypeMap ); - const CLiwMap* categoryMap = variant.AsMap ( ); - CleanupStack::PushL( - TCleanupItem( TLiwVariant::VariantCleanup, &variant ) ); - ValidateParamL (KRemove, KId, categoryMap, - LIW::EVariantTypeDesC, ETrue, variant ); - TPtrC catPtr(variant.AsDes ( )); + else if (contentType == KCategory) + { + index = 0; + if (posBased) + { + param = &aInParamList[EIndex1]; + } + else + { + param = aInParamList.FindFirst(index, KDataFields); + if (!param) + { + ErrorMessageL(KRemove, KDataFields); + iErrMsg->Des().Append(KMissing); + //leave since argument is improper + User::Leave(SErrMissingArgument); + } + } + variant = param->Value(); + ValidateParamL(KRemove, KDataFields, variant, LIW::EVariantTypeMap); + const CLiwMap* categoryMap = variant.AsMap(); + CleanupStack::PushL(TCleanupItem(TLiwVariant::VariantCleanup, &variant)); + ValidateParamL(KRemove, KId, categoryMap, LIW::EVariantTypeDesC, ETrue, + variant); + TPtrC catPtr(variant.AsDes()); TLex catparseString(catPtr); //Get Id as string and convert to TUint32 TPosLmItemId catid; TInt parseErr = catparseString.Val (catid, EDecimal ); @@ -638,7 +639,25 @@ { dbUri.Set (variant.AsDes ( ) ); } - iService->RemoveItemL (catid, CLandmarkService::ECategory, dbUri ); + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + iService->RemoveItemL(transactionId, catid, + CLandmarkService::ECategory, dbUri); + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { + iService->RemoveItemL(catid, CLandmarkService::ECategory, dbUri); + } CleanupStack::PopAndDestroy(&variant); } else @@ -660,7 +679,7 @@ // void CLandmarkInterface::ImportL( const CLiwGenericParamList& aInParamList, CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, - MLiwNotifyCallback* /*aCallback*/) + MLiwNotifyCallback* aCallback) { //Input param List must have contentType and importData specified if ( aInParamList.Count ( )< EIndex2 ) @@ -758,24 +777,44 @@ { dbUri.Set (variant.AsDes ( ) ); } - CPosLmItemIterator* iterator= NULL; - //call the service function for import - iService->ImportL (iterator, *parser, dbUri ); - CleanupStack::PopAndDestroy (parser ); + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + iService->ImportL(transactionId, *parser, dbUri); + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + CleanupStack::Pop (parser ); + } + else //sync call + { + CPosLmItemIterator* iterator= NULL; + //call the service function for import + iService->ImportL (iterator, *parser, dbUri ); + CleanupStack::PushL(iterator); + // if dbURI is not specified retrieve default databse URI + if ( dbUri == KNullDesC ) + { + iService->GetDefaultDbUriL (dbUri ); + } + //instantiate CLandmarkIterable + CLiwIterable* iterable = CLandmarkIterable::NewL (iterator, dbUri ); + CleanupStack::Pop(iterator); + CleanupClosePushL(*iterable); + aOutParamList.AppendL (TLiwGenericParam (KReturnValue, + TLiwVariant (iterable ) ) ); + CleanupStack::PopAndDestroy(iterable); + CleanupStack::PopAndDestroy (parser ); + } + + CleanupStack::PopAndDestroy (mimeType8 ); - CleanupStack::PushL(iterator); - // if dbURI is not specified retrieve default databse URI - if ( dbUri == KNullDesC ) - { - iService->GetDefaultDbUriL (dbUri ); - } - //instantiate CLandmarkIterable - CLiwIterable* iterable = CLandmarkIterable::NewL (iterator, dbUri ); - CleanupStack::Pop(iterator); - CleanupClosePushL(*iterable); - aOutParamList.AppendL (TLiwGenericParam (KReturnValue, - TLiwVariant (iterable ) ) ); - CleanupStack::PopAndDestroy(iterable); CleanupStack::PopAndDestroy(&variant); } else @@ -796,8 +835,8 @@ // --------------------------------------------------------------------------- // void CLandmarkInterface::ExportL( const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& /*aOutParamList*/, TUint /*aCmdOptions*/, - MLiwNotifyCallback* /*aCallback*/) + CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, + MLiwNotifyCallback* aCallback) { //Input param List must have contentType and exportData specified if ( aInParamList.Count ( )< EIndex2 ) @@ -867,23 +906,7 @@ //leave since argument is improper User::Leave (SErrInvalidServiceArgument ); } - ValidateParamL (KExport, KMimeType, exportData, LIW::EVariantTypeDesC, - ETrue, variant ); - if( variant.AsDes() == KNullDesC ) - { - ErrorMessageL (KExport, KMimeType ); - iErrMsg->Des().Append (KInvalid ); - //leave since argument is improper - User::Leave (SErrInvalidServiceArgument ); - } - //instantiate CPosLandmarkEncoder based on mime type. - HBufC8* mimeType8 = - CnvUtfConverter::ConvertFromUnicodeToUtf8L ( variant.AsDes ( ) ); - CleanupStack::PushL( mimeType8 ); - CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL ( *mimeType8 ); - CleanupStack::PushL (encoder ); - CBufBase* exportBuffer = encoder->SetUseOutputBufferL(); - CleanupStack::PushL(exportBuffer); + ValidateParamL (KExport, KIdList, exportData, LIW::EVariantTypeList, ETrue, variant ); const CLiwList* lmList = variant.AsList ( ); @@ -929,29 +952,69 @@ { dbUri.Set (variant.AsDes ( ) ); } - iService->ExportL (*encoder, landmarkIdArray, dbUri ); - ExecuteAndDeleteLD (encoder->FinalizeEncodingL ( ) ); - //Write to file + ValidateParamL (KExport, KMimeType, exportData, LIW::EVariantTypeDesC, + ETrue, variant ); + if( variant.AsDes() == KNullDesC ) + { + ErrorMessageL (KExport, KMimeType ); + iErrMsg->Des().Append (KInvalid ); + //leave since argument is improper + User::Leave (SErrInvalidServiceArgument ); + } + //instantiate CPosLandmarkEncoder based on mime type. + HBufC8* mimeType8 = + CnvUtfConverter::ConvertFromUnicodeToUtf8L ( variant.AsDes ( ) ); + CleanupStack::PushL( mimeType8 ); + CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL ( *mimeType8 ); + CleanupStack::PushL (encoder ); ValidateParamL (KExport, KDestinationFile, exportData, - LIW::EVariantTypeDesC, ETrue, variant ); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - RFile file; - CleanupClosePushL(file); - User::LeaveIfError(file.Create(fs, variant.AsDes(), - EFileShareExclusive | EFileStreamText | EFileWrite)); - TInt size = exportBuffer->Size(); - for( TInt i = 0; i < size; ++i ) - { - file.Write(i,exportBuffer->Ptr(i)); - } - CleanupStack::PopAndDestroy(&file); - CleanupStack::PopAndDestroy(&fs); - CleanupStack::PopAndDestroy (&landmarkIdArray ); - CleanupStack::PopAndDestroy (exportBuffer); - CleanupStack::PopAndDestroy (encoder ); - CleanupStack::PopAndDestroy (mimeType8 ); + LIW::EVariantTypeDesC, ETrue, variant ); + + + + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + iService->ExportL(transactionId, *encoder, landmarkIdArray, + variant.AsDes(), dbUri); + CleanupStack::Pop(encoder ); + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { + CBufBase* exportBuffer = encoder->SetUseOutputBufferL(); + CleanupStack::PushL(exportBuffer); + iService->ExportL (*encoder, landmarkIdArray, dbUri ); + ExecuteAndDeleteLD (encoder->FinalizeEncodingL ( ) ); + //Write to file + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Create(fs, variant.AsDes(), + EFileShareExclusive | EFileStreamText | EFileWrite)); + TInt size = exportBuffer->Size(); + for( TInt i = 0; i < size; ++i ) + { + file.Write(i,exportBuffer->Ptr(i)); + } + CleanupStack::PopAndDestroy(&file); + CleanupStack::PopAndDestroy(&fs); + CleanupStack::PopAndDestroy (exportBuffer); + CleanupStack::PopAndDestroy (encoder ); + } + + CleanupStack::PopAndDestroy (mimeType8 ); + CleanupStack::PopAndDestroy (&landmarkIdArray ); CleanupStack::PopAndDestroy(&variant); } else @@ -971,9 +1034,9 @@ // This calls the appropriate service function for organising landmarks. // --------------------------------------------------------------------------- // -void CLandmarkInterface::OrganiseL( const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& /*aOutParamList*/, TUint /*aCmdOptions*/, - MLiwNotifyCallback* /*aCallback*/) +void CLandmarkInterface::OrganiseL(const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, + MLiwNotifyCallback* aCallback) { //Input param List must have contentType, filter and operationType specified if ( aInParamList.Count ( )< EIndex3 ) @@ -1121,23 +1184,50 @@ ValidateParamL (KOrganise, KOperationType, variant, LIW::EVariantTypeDesC ); TPtrC operationType = variant.AsDes ( ); - if ( operationType == KAssociate ) - { - iService->LinkCategoryToLandmarksL (catid, landmarkIdArray, dbUri ); - } - else - if ( operationType == KDisassociate ) - { - iService->UnlinkCategoryToLandmarksL (catid, landmarkIdArray, - dbUri ); - } - else - { - ErrorMessageL (KOrganise, KOperationType ); - iErrMsg->Des().Append (KInvalid ); - //leave since argument is improper - User::Leave (SErrInvalidServiceArgument ); - } + if (operationType != KAssociate && operationType != KDisassociate) + { + ErrorMessageL(KOrganise, KOperationType); + iErrMsg->Des().Append(KInvalid); + //leave since argument is improper + User::Leave(SErrInvalidServiceArgument); + } + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + if (operationType == KAssociate) + { + iService->LinkCategoryToLandmarksL(transactionId, catid, + landmarkIdArray, dbUri); + } + else + { + iService->UnlinkCategoryToLandmarksL(transactionId, catid, + landmarkIdArray, dbUri); + } + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { + if (operationType == KAssociate) + { + iService->LinkCategoryToLandmarksL(catid, landmarkIdArray, + dbUri); + } + else + { + iService->UnlinkCategoryToLandmarksL(catid, landmarkIdArray, + dbUri); + } + } + CleanupStack::PopAndDestroy(&variantDb); CleanupStack::PopAndDestroy (&landmarkIdArray ); CleanupStack::PopAndDestroy(&variant); @@ -1395,6 +1485,35 @@ //Do whatever is default } } + //changes for implementing CJSE 2.1 spec :categoryId + if ( ValidateParamL (KGetList, KCategoryIdChanged, filter, + LIW::EVariantTypeDesC, EFalse, variant ) ) + { + TPtrC catPtr(variant.AsDes()); + + TPosLmItemId catid; + TLex catparseString(catPtr); //Get Id as string and convert to TUint32 + TInt parseErr = catparseString.Val (catid, EDecimal ); + if (parseErr) { + ErrorMessageL (KGetList, KMaximumDistance ); + iErrMsg->Des().Append (KInvalid ); + User::Leave (KErrArgument ); + } + + TBuf catIdString(KNullDesC ( )); + if ( !parseErr ) + { + catIdString.Num(catid); + } + CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC(); + crit->SetCategoryItemId(catid); + //add to the criteria + //Adding successfully to the criteria will pass the ownership + User::LeaveIfError (criteria->AddArgument (crit)); + CleanupStack::Pop (crit); + } + + //CJSE Changes done if ( ValidateParamL (KGetList, KCategoryName, filter, LIW::EVariantTypeDesC, EFalse, variant ) ) { @@ -1932,8 +2051,10 @@ // This calls the appropriate service function for adding landmarks. // --------------------------------------------------------------------------- // -void CLandmarkInterface::AddLandmarksL( const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& aOutParamList ) +void CLandmarkInterface::AddLandmarksL( + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, + MLiwNotifyCallback* aCallback) { //position to start search in input params TInt index = 0; @@ -2179,25 +2300,49 @@ variant.AsDes ( ) ); } } - //checks if the landmark passed is to update an existing lanmark or add a - //new landmark. - if ( update ) - { - iService->UpdateItemL (*landmark, dbUri ); - } - else - { - lmid = iService->AddItemL (*landmark, dbUri ); - } - CleanupStack::PopAndDestroy (landmark ); - CleanupStack::PopAndDestroy(&variant); - CleanupStack::PopAndDestroy(&variantDb); - - iId = HBufC::NewL(KMaxIDStringLength); - iId->Des().Num(lmid,EDecimal); - aOutParamList.AppendL (TLiwGenericParam (KReturnValue, - TLiwVariant (iId ) ) ); - } + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + //checks if the landmark passed is to update an existing lanmark or add a + //new landmark. + if (update) + { + iService->UpdateItemL(transactionId, *landmark, dbUri); + } + else + { + iService->AddItemL(transactionId, *landmark, dbUri); + } + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { + //checks if the landmark passed is to update an existing lanmark or add a + //new landmark. + if (update) + { + iService->UpdateItemL(*landmark, dbUri); + } + else + { + lmid = iService->AddItemL(*landmark, dbUri); + } + iId = HBufC::NewL(KMaxIDStringLength); + iId->Des().Num(lmid, EDecimal); + aOutParamList.AppendL(TLiwGenericParam(KReturnValue, TLiwVariant(iId))); + } + CleanupStack::PopAndDestroy(landmark); + CleanupStack::PopAndDestroy(&variant); + CleanupStack::PopAndDestroy(&variantDb); + } // --------------------------------------------------------------------------- // CLandmarkInterface::AddCategoryL(const CLiwGenericParamList& aInParamList) @@ -2205,7 +2350,8 @@ // --------------------------------------------------------------------------- // void CLandmarkInterface::AddCategoryL(const CLiwGenericParamList& aInParamList, - CLiwGenericParamList& aOutParamList ) + CLiwGenericParamList& aOutParamList, TUint /*aCmdOptions*/, + MLiwNotifyCallback* aCallback) { //position to start search in input params TInt index = 0; @@ -2318,6 +2464,31 @@ CleanupStack::PopAndDestroy(&iconVariant); } + //Async Call + if (aCallback) + { + //Get the transaction ID + TInt32 transactionId(aCallback->GetTransactionID()); + CLandmarkCallbackMap* map = new (ELeave) CLandmarkCallbackMap( + transactionId, aCallback); + CleanupStack::PushL(map); + iCallbackMap.AppendL(map); + CleanupStack::Pop(map); + //checks if the landmark passed is to update an existing lanmark or add a + //new landmark. + if (update) + { + iService->UpdateItemL(transactionId, *category, dbUri); + } + else + { + iService->AddItemL(transactionId, *category, dbUri); + } + aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant( + TInt32(transactionId)))); + } + else //sync call + { if ( update ) { iService->UpdateItemL (*category, dbUri ); @@ -2326,15 +2497,15 @@ { catid = iService->AddItemL (*category, dbUri ); } + iId = HBufC::NewL(KMaxIDStringLength); + iId->Des().Num(catid, EDecimal); + aOutParamList.AppendL(TLiwGenericParam(KReturnValue, TLiwVariant(iId))); + } CleanupStack::PopAndDestroy (category ); CleanupStack::PopAndDestroy(&variant); CleanupStack::PopAndDestroy(&variantDb); - iId = HBufC::NewL(KMaxIDStringLength); - iId->Des().Num(catid,EDecimal); - aOutParamList.AppendL (TLiwGenericParam (KReturnValue, - TLiwVariant (iId ) ) ); } // ---------------------------------------------------------------------------