--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/TestSyncPlugIn/cnttestsync.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,312 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <cntsync.h>
+#include <cntfield.h>
+#include <cntfldst.h>
+#include <cntdef.h>
+#include <cntitem.h>
+#include <cntdb.h>
+#include "cnttestsynchroniser.h"
+#include <ecom/implementationproxy.h>
+
+
+CContactActiveTestSync::CContactActiveTestSync(CContactSyncChecker& aSyncChecker, TUid aPhoneBookUid)
+: CActive(EPriorityMuchMore), iStatusArray(3), iSyncChecker(aSyncChecker), iPhoneBookUid(aPhoneBookUid)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+CContactActiveTestSync::~CContactActiveTestSync()
+ {
+ Cancel();
+ }
+
+void CContactActiveTestSync::RunL()
+ {
+ const TInt result = iSyncChecker.FetchNotificationErrorL(iPhoneBookUid);
+ for(TInt i = 0; i < iStatusArray.Count(); ++i)
+ {
+ User::RequestComplete(iStatusArray[i], result);
+ }
+ iStatusArray.Reset();
+ }
+
+TInt CContactActiveTestSync::RunError(TInt /*aError*/)
+ {
+ TRAP_IGNORE(RunL() );
+ return KErrNone;
+ }
+
+void CContactActiveTestSync::DoCancel()
+ {
+ iSyncChecker.CompleteNotificationRequestL(KErrCancel, iPhoneBookUid);
+ for(TInt i = 0; i < iStatusArray.Count(); ++i)
+ {
+ User::RequestComplete(iStatusArray[i], KErrCancel);
+ }
+ iStatusArray.Reset();
+ }
+
+void CContactActiveTestSync::StartL(TRequestStatus& aStatus)
+ {
+ aStatus = KRequestPending;
+ iStatusArray.AppendL(&aStatus);
+ if (!IsActive())
+ {
+ __ASSERT_ALWAYS(iStatusArray.Count() == 1, User::Invariant());
+ iStatus = KRequestPending;
+ SetActive();
+ iSyncChecker.StoreNotificationRequestL(iStatus, iPhoneBookUid);
+ }
+ }
+
+TUid CContactActiveTestSync::PhoneBookUid()
+{
+ return iPhoneBookUid;
+}
+
+
+
+
+TInt CContactTestSynchroniser::ValidateContact(TValidateOperation aOp, TContactItemId /*aId*/)
+ {
+ iContactSyncChecker->ValidateMethodCalledL();
+ TInt ret=iContactSyncChecker->ValidateResponseL(aOp);
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ {
+ switch (aOp)
+ {
+ case ERead:
+ User::InfoPrint(_L("Validate ERead"));
+ break;
+ case ESearch:
+ User::InfoPrint(_L("Validate ESearch"));
+ break;
+ case EEdit:
+ User::InfoPrint(_L("Validate EEdit"));
+ break;
+ default:
+ break;
+ }
+ }
+ return ret;
+ }
+
+TInt CContactTestSynchroniser::ValidateWriteContact(CContactICCEntry& aContactItem)
+ {
+ TRAPD(err, iContactSyncChecker->ValidateMethodCalledL() );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+
+ TBool verboseLoggingEnabled(EFalse);
+ TRAP(err, verboseLoggingEnabled = iContactSyncChecker->VerboseLoggingEnabledL() );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+ if (verboseLoggingEnabled)
+ {
+ User::InfoPrint(_L("ValidateWriteContact"));
+ }
+
+ // Set the phonebook field, if the field doesn't exist, it should be added
+ CContactItemFieldSet& fieldset = aContactItem.CardFields();
+ TInt n = fieldset.Find(KUidContactFieldICCPhonebook);
+ if(n == KErrNotFound)
+ {
+ CContactItemField* field(NULL);
+ TRAP_IGNORE(field = CContactItemField::NewL(KStorageTypeText, KUidContactFieldICCPhonebook) );
+ TRAP(err, aContactItem.AddFieldL(*field) );
+ CContactItemFieldSet& fieldset = aContactItem.CardFields();
+ n = fieldset.Find(KUidContactFieldICCPhonebook);
+ __ASSERT_ALWAYS(err == KErrNone && n != KErrNotFound, User::Invariant() );
+ }
+
+ CContactItemField& field = fieldset[n];
+ CContactTextField* textField = field.TextStorage();
+ TUid phonebookUid(TUid::Null() );
+ TRAP(err, phonebookUid = iContactSyncChecker->PhonebookUidL(aContactItem.TemplateRefId() ) );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+
+ TBuf<128> buf;
+ if(phonebookUid != KUidIccPhonebookNotFound)
+ {
+ TInt phonebookUidNum = phonebookUid.iUid;
+ buf.AppendNum(phonebookUidNum);
+ TRAP(err, textField->SetTextL(buf));
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+ }
+
+ TBool validateWriteResponse(EFalse);
+ TRAP(err, validateWriteResponse = iContactSyncChecker->ValidateWriteResponseL() );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+
+ return validateWriteResponse;
+ }
+
+TInt CContactTestSynchroniser::DeleteContact(TContactItemId /*aId*/)
+ {
+ iContactSyncChecker->ValidateMethodCalledL();
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ User::InfoPrint(_L("DeleteContact"));
+ return iContactSyncChecker->DeleteContactResponseL();
+ }
+
+
+/**
+ * Update the lookup tables in the server.
+ * This method is called by the Contacts model when a new CContactICCEntry
+ * has been added to the database. The plug-in should extract the
+ * appropriate details from the item (eg. item UID and slot number)
+ * and call the sync server to update the lookup tables.
+ */
+void CContactTestSynchroniser::UpdatePostWriteL(const CContactICCEntry& /*aContactItem*/)
+ {
+ iContactSyncChecker->ValidateMethodCalledL();
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ User::InfoPrint(_L("UpdateLookupTable"));
+ }
+
+TContactItemId CContactTestSynchroniser::ICCTemplateIdL(TUid aPhonebookUid)
+ {
+ iContactSyncChecker->ValidateMethodCalledL();
+ User::InfoPrint(_L("TemplateId"));
+ return iContactSyncChecker->ICCTemplateIdL(aPhonebookUid);
+ }
+
+TContactItemId CContactTestSynchroniser::GroupIdL(TUid aPhonebookUid)
+ {
+
+ iContactSyncChecker->ValidateMethodCalledL();
+ User::InfoPrint(_L("GroupId"));
+ return iContactSyncChecker->GroupIdL(aPhonebookUid);
+ }
+
+void CContactTestSynchroniser::NotifySyncStateChange(TRequestStatus& aStatus, TUid aPhonebookUid)
+ {
+ TRAPD(err, iContactSyncChecker->SyncMethodCalledL() );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+
+ TBool exist(EFalse);
+ CContactActiveTestSync* temp(NULL);
+ TInt i(0);
+ TRAP(err,
+ for (i = 0 ; i < iActiveTestSync.Count() ; ++i)
+ {
+ temp = iActiveTestSync[i];
+ if (temp->PhoneBookUid().iUid == aPhonebookUid.iUid)
+ {
+ exist = ETrue;
+ temp->StartL(aStatus);
+ break;
+ }
+ }
+ );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+
+ if (!exist)
+ {
+ temp = new CContactActiveTestSync(*iContactSyncChecker, aPhonebookUid);
+ __ASSERT_ALWAYS(temp != NULL, User::Invariant() );
+ iActiveTestSync.Append(temp);
+ TRAP(err, temp->StartL(aStatus) );
+ __ASSERT_ALWAYS(err == KErrNone, User::Invariant() );
+ }
+ }
+
+void CContactTestSynchroniser::CancelNotifyRequest(TUid aPhonebookUid)
+ {
+ iContactSyncChecker->SyncMethodCalledL();
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ {
+ RDebug::Print(_L("PhonebookSync - CancelNotifyRequest(Phonebook Uid = 0x%08X)\r\n"),
+ aPhonebookUid.iUid);
+ }
+ for (TInt i = 0 ; i < iActiveTestSync.Count() ; ++i)
+ {
+ CContactActiveTestSync* temp = iActiveTestSync[i];
+ if (temp->PhoneBookUid().iUid == aPhonebookUid.iUid)
+ {
+ temp->Cancel();
+ break;
+ }
+ }
+ }
+
+TBool CContactTestSynchroniser::IsSynchronisedL(TUid aPhonebookUid)
+ {
+ iContactSyncChecker->SyncMethodCalledL();
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ {
+ RDebug::Print(_L("PhonebookSync - IsSynchronisedL(Phonebook Uid = 0x%08X)\r\n"),
+ aPhonebookUid.iUid);
+ }
+ return iContactSyncChecker->IsSynchronisedL(aPhonebookUid);
+ }
+
+TInt CContactTestSynchroniser::PhonebookList(RArray<TUid>& aPhonebookList) //Lots to do here
+ {
+ iContactSyncChecker->SyncMethodCalledL();
+ if (iContactSyncChecker->VerboseLoggingEnabledL())
+ {
+ RDebug::Print(_L("PhonebookSync - PhonebookList()\r\n"));
+ }
+ return iContactSyncChecker->PhonebookListL(aPhonebookList);
+ }
+
+CContactTestSynchroniser* CContactTestSynchroniser::NewL()
+ {
+ RDebug::Print(_L("**********CContactTestSynchroniser::NewL\n"));
+ CContactTestSynchroniser* self = new(ELeave) CContactTestSynchroniser();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+void CContactTestSynchroniser::ConstructL()
+ {
+ iContactSyncChecker = iContactSyncChecker->NewL();
+ //iActiveTestSync = new (ELeave) CContactActiveTestSync(*iContactSyncChecker);
+ iContactSyncChecker->PluginLoadedL();
+ }
+
+
+void CContactTestSynchroniser::Release()
+ {
+ User::InfoPrint(_L("Release"));
+ TRAP_IGNORE(iContactSyncChecker->PluginUnloadedL());
+ delete this;
+ }
+
+CContactTestSynchroniser::~CContactTestSynchroniser()
+ {
+ RDebug::Print(_L("**********CContactTestSynchroniser::~CContactTestSynchroniser\n"));
+ delete iContactSyncChecker;
+ iContactSyncChecker = NULL;
+ iActiveTestSync.ResetAndDestroy();
+ }
+
+// Export the implementation collection function
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(0x102035FF, CContactTestSynchroniser::NewL)
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
+/**
+ * Standard Epoc32 Dll Entry point
+ */