phonebookengines_old/contactsmodel/tsrc/dbcreator.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/dbcreator.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,151 @@
+// Copyright (c) 2008-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:
+// Summary:
+// A class for creating a CContactDatabase object with random data.
+// The contact items take the form of the following example:
+// [KUidContactFieldFamilyName]	Fasiokljno	<5-10 chars>
+// [KUidContactFieldGivenName]		Liasidwq	<5-10 chars>
+// [KUidContactFieldCompanyName]	Xwjweiohj	<5-10 chars>	
+// [KUidContactFieldPhoneNumber]	9874234891	<10 digits>
+// Usage example:
+//
+
+// #include "dbcreator.h"
+// void MyFunctionL()
+// // create a database populated with 500 randomly created contact items
+// const TInt KNumContacts(500);
+// _LIT(KDbName, "C:mydb.cbd");
+// CContactDatabase* db = DbCreator::CreateDbL(KDbName, KNumContacts);
+// CleanupStack::PushL(db);
+// // do something interesting...
+// CleanupStack::PopAndDestroy(db);
+// CContactDatabase::DeleteDatabaseL(KDbName);
+// Written by:
+// James Clarke
+//
+
+#include "dbcreator.h"
+
+//
+// DbCreator methods
+//
+
+CContactDatabase* DbCreator::CreateDbL(const TDesC &aFileName, TInt aNumContacts)
+	{
+	CContactDatabase* db = CContactDatabase::ReplaceL(aFileName);
+	CleanupStack::PushL(db);
+	PopulateDatabaseL(*db, aNumContacts);
+	CleanupStack::Pop();
+	return db;
+	}
+
+
+TUint DbCreator::RandomNum(TUint aMin, TUint aMax)
+    {
+	TInt64 seed(Math::Random());
+	return (static_cast<TUint>(Math::Rand(seed)) % ((aMax - aMin) + 1)) + aMin;
+	}
+
+
+TChar DbCreator::RandomAlphaChar(TBool aIsUpper = EFalse)
+    {
+	const TInt KUppercaseA(65);
+	const TInt KLowercaseA(97);
+	const TInt KZOffset(25);
+	TInt min = aIsUpper ? KUppercaseA : KLowercaseA;
+	TInt max = min + KZOffset;
+	return TChar(RandomNum(min, max));
+	}
+
+
+HBufC* DbCreator::RandomNameL()
+    {
+	const TInt KNameLen( RandomNum(5, 10) );
+	HBufC* name = HBufC::NewLC(KNameLen);
+	TPtr namePtr = name->Des();
+	for (TInt i = 0; i < KNameLen; ++i)
+		{
+		namePtr.Append(RandomAlphaChar(i == 0));		
+		}
+	CleanupStack::Pop(name);
+	return name;
+	}
+
+
+HBufC* DbCreator::RandomPhoneNumL()
+    {
+	const TInt KAsciiZero(48);
+	const TInt KTenDigits(10);
+	HBufC* num = HBufC::NewLC(KTenDigits);
+	TPtr numPtr = num->Des();
+	for (TInt i = 0; i < KTenDigits; ++i)
+		{
+		numPtr.Append( TChar(RandomNum(KAsciiZero, KAsciiZero + 9) ) );		
+		}
+	CleanupStack::Pop(num);
+	return num;
+	}
+
+
+void DbCreator::PopulateDatabaseL(CContactDatabase& aDb, TInt aNumContacts)
+    {
+	for(TInt i = 0; i < aNumContacts; ++i)
+		{
+		CContactCard* contact = CContactCard::NewLC();
+
+		// first name
+		HBufC* fnameBuf = RandomNameL();
+		CleanupStack::PushL(fnameBuf);
+		CContactItemField* fname = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName);
+		TPtr fnamePtr = fnameBuf->Des();
+		fname->TextStorage()->SetTextL(fnamePtr);
+		contact->AddFieldL(*fname);
+		CleanupStack::Pop(fname);
+		CleanupStack::PopAndDestroy(fnameBuf);
+		
+		// last name
+		HBufC* lnameBuf = RandomNameL();
+		CleanupStack::PushL(lnameBuf);
+		CContactItemField* lname = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName);
+		TPtr lnamePtr = lnameBuf->Des();
+		lname->TextStorage()->SetTextL(lnamePtr);
+		contact->AddFieldL(*lname);
+		CleanupStack::Pop(lname);
+		CleanupStack::PopAndDestroy(lnameBuf);
+
+		// company name
+		HBufC* cnameBuf = RandomNameL();
+		CleanupStack::PushL(cnameBuf);
+		CContactItemField* cname = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldCompanyName);
+		TPtr cnamePtr = cnameBuf->Des();
+		cname->TextStorage()->SetTextL(cnamePtr);
+		contact->AddFieldL(*cname);
+		CleanupStack::Pop(cname);
+		CleanupStack::PopAndDestroy(cnameBuf);
+
+		// phone number
+		HBufC* numBuf = RandomPhoneNumL();
+		CleanupStack::PushL(numBuf);
+		CContactItemField* num = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPhoneNumber);
+		TPtr numPtr = numBuf->Des();
+		num->TextStorage()->SetTextL(numPtr);
+		contact->AddFieldL(*num);
+		CleanupStack::Pop(num);
+		CleanupStack::PopAndDestroy(numBuf);
+
+		aDb.AddNewContactL(*contact);
+		CleanupStack::PopAndDestroy(contact);
+		}
+	}
+