phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/ContactsPBAPExportUtilityClass.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/ContactsPBAPExportUtilityClass.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,240 @@
+// Copyright (c) 2006-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 "ContactsPBAPExportUtilityClass.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "cntdb_internal.h"
+#endif
+
+CContactsPBAPExportUtilityClass::~CContactsPBAPExportUtilityClass()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CContactsPBAPExportUtilityClass::CContactsPBAPExportUtilityClass(CTestStep* atestStep)
+:iBaseTestStep(atestStep)
+/**
+ * Constructor
+ */
+	{
+	}
+
+// Gets a reference to the base test step. This is needed to read from the ini file
+CTestStep& CContactsPBAPExportUtilityClass::BaseTestStepReference()
+	{
+	return *iBaseTestStep;
+	}
+	
+/** Exports a vCard with version 2.1 or 3.0
+@param	adBase The database to export from
+@param	aStandard The PBAP version to export 
+@param aIdArray The contact item ID array to export from database
+@param aWriteStream The write stream to write to
+@param aContactFilter Filter
+*/	
+void CContactsPBAPExportUtilityClass::ExportvCardL(CContactDatabase* adBase, const TDesC& aStandard, CContactIdArray* aIdArray, RWriteStream& aWriteStream, TInt64 aContactFilter)
+	{
+	TVCardVersion version(EVCardUDEF);
+	
+	TBool enableTel = EFalse;
+	BaseTestStepReference().GetBoolFromConfig(BaseTestStepReference().ConfigSection(), KTelProp, enableTel);			
+	
+	if(aStandard.Compare(KVersion21) == 0)
+		{
+		version = EPBAPVCard21;	
+		}
+	if(aStandard.Compare(KVersion30) == 0)
+		{
+		version = EPBAPVCard30;	
+		}
+	else
+		{
+		if(aStandard.Compare(KVersionStd21) == 0)
+			{
+			version = EVCard21;	
+			adBase->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl), *aIdArray, aWriteStream, 0, aContactFilter, this, version ,enableTel);		
+			return;
+			}
+		}	
+	adBase->ExportSelectedContactsL(TUid::Uid(KUidPBAPVCardConvImpl), *aIdArray, aWriteStream, 0, aContactFilter, this, version ,enableTel);
+	}
+	
+/** Definition for the callback function from the interface
+@param	aContactId The Contact item id, supplied by the production code
+@param	aPropertyList The array of intra-properties to be added to the exported vCard 
+*/	
+void CContactsPBAPExportUtilityClass::AddIntraContactPropertiesL(const TContactItemId& /*aContactId*/, CArrayPtr<CParserProperty>* aPropertyList)
+	{
+	TPtrC intraPropName;
+	TPtrC intraPropParamName;
+	TPtrC intraPropDatatype;
+	BaseTestStepReference().GetStringFromConfig(BaseTestStepReference().ConfigSection(), KIntraPropName, intraPropName);			
+	BaseTestStepReference().GetStringFromConfig(BaseTestStepReference().ConfigSection(), KIntraPropDatatype, intraPropDatatype);			
+	BaseTestStepReference().GetStringFromConfig(BaseTestStepReference().ConfigSection(), KIntraPropParName, intraPropParamName);			
+	
+	RArray<TPtrC>	intraPropNameList;
+	CleanupClosePushL(intraPropNameList);
+	TokenizeStringL(intraPropName, intraPropNameList);
+
+	RArray<TPtrC> intraPropDatatypeList;
+	CleanupClosePushL(intraPropDatatypeList);
+	TokenizeStringL(intraPropDatatype, intraPropDatatypeList);
+	
+	RArray<TPtrC> intraPropParamNameList;
+	CleanupClosePushL(intraPropParamNameList);
+	TokenizeStringL(intraPropParamName, intraPropParamNameList);
+	
+	const TInt dataTypeCount = intraPropDatatypeList.Count();
+	
+	CParserPropertyValue* propertyValue = NULL;
+	
+	for(TInt i=0;i < dataTypeCount;i++)
+		{
+		if(intraPropDatatypeList[i].Compare(KCDesCArray) == 0)
+			{
+			propertyValue = CreateCDesCArrayL();
+			}
+		
+		if(intraPropDatatypeList[i].Compare(KDATETIME) == 0)
+			{
+			TTime date(KDateTimeVal);
+			propertyValue = CreateDatePropertyL(date);   
+			}
+		
+		if(intraPropDatatypeList[i].Compare(KHBufC) == 0)
+			{
+			propertyValue = CParserPropertyValueHBufC::NewL(KEmailVal);
+			}
+		
+		if(intraPropDatatypeList[i].Compare(KBinary) == 0)
+			{
+			propertyValue = CParserPropertyValueBinary::NewL(KPhotoVal);
+			}
+	
+		if(intraPropDatatypeList[i].Compare(KInt) == 0)
+			{
+			CParserPropertyValueInt* intVal = new(ELeave) CParserPropertyValueInt(143);
+			propertyValue = intVal;
+			}
+		
+		CParserParam* propParameter = CreateParameterL(intraPropParamNameList[i]);
+		
+		CleanupStack::PushL(propertyValue);
+		AddPropertyL(intraPropNameList[i], propertyValue, propParameter, aPropertyList);
+		CleanupStack::Pop();	// propertyValue
+		}
+		
+	TBool leave = EFalse;
+	BaseTestStepReference().GetBoolFromConfig(BaseTestStepReference().ConfigSection(), KLeave, leave);			
+	
+	if(leave)
+		{
+		User::Leave(KErrGeneral);
+		}
+			
+	CleanupStack::PopAndDestroy(3, &intraPropNameList);
+	
+	}
+	
+/** Creates a property parameter
+@param aParamName The paramter name
+@return Property parameter
+*/
+CParserParam* CContactsPBAPExportUtilityClass::CreateParameterL(const TDesC& aParamName)
+	{
+	TBuf8<KMaxLengthField> paramName;
+	paramName.Copy(aParamName);
+		
+	CParserParam* propParameter = CParserParam::NewL(paramName, KNullDesC8);	
+	return propParameter;
+	}
+
+/** Creates a CDesCArray property
+@return CDesCArray parser Property value
+*/
+CParserPropertyValue* CContactsPBAPExportUtilityClass::CreateCDesCArrayL()
+	{
+	CDesCArrayFlat* desArray = new (ELeave)CDesCArrayFlat(4);
+	CleanupStack::PushL(desArray);
+	desArray->AppendL(KAddr1);
+	desArray->AppendL(KAddr2);
+	desArray->AppendL(KAddr3);
+	CParserPropertyValue* propertyValue = new (ELeave) CParserPropertyValueCDesCArray(desArray);
+	CleanupStack::Pop();	// desArray
+	return propertyValue;
+	}
+
+/** Utility method to create a Versit date property.
+@param aDateTime Date (and Time) in Local Time. The only property that uses this field is BDAY, which should continue to be stored as MachineLocal time.
+@return Versit date property corresponding to aDateTime which does not contain a time
+*/	
+CParserPropertyValueDate* CContactsPBAPExportUtilityClass::CreateDatePropertyL(const TTime& aDateTime)	
+	{
+	TVersitDateTime* dateTime = new(ELeave)TVersitDateTime(aDateTime.DateTime(), TVersitDateTime::EIsMachineLocal); 
+	CleanupStack::PushL(dateTime);
+	CParserPropertyValueDate* dateValue = new(ELeave) CParserPropertyValueDate(dateTime);
+	CleanupStack::Pop(dateTime);	
+	return dateValue;
+	}
+
+/** Appends the property to the array in AddIntraContactPropertiesL
+@param	aPropertyName The property name to append
+@param	aPropertyValue Value of the property
+@param  aPropertyList The property list array in AddIntraContactPropertiesL to append  
+*/	
+void CContactsPBAPExportUtilityClass::AddPropertyL(const TDesC& aPropertyName, CParserPropertyValue* aPropertyValue, CParserParam* aPropParameter, CArrayPtr<CParserProperty>* aPropertyList) 
+	{
+	TBuf8<KMaxLengthField> propertyName;
+	propertyName.Copy(aPropertyName);
+	CParserProperty* property = CParserProperty::NewL(*aPropertyValue,propertyName,NULL);
+	CleanupStack::PushL(property);
+	if(aPropParameter)
+		{
+		property->AddParamL(aPropParameter);
+		}
+	aPropertyList->AppendL(property);
+	CleanupStack::Pop();
+	}
+
+/** Parses a comma separated string and constructs a list out of the values
+@param	aString The string to be tokenized
+@param	aList Output list containing the tokens
+@param	aSeparator Separator to recognize the tokens
+*/
+void CContactsPBAPExportUtilityClass::TokenizeStringL(const TDesC& aString, RArray<TPtrC>& aList, TChar aSeparator)
+	{
+	TLex lexer(aString);
+
+	while(!lexer.Eos())
+		{
+		lexer.SkipSpaceAndMark();
+
+		while(!lexer.Eos() && lexer.Get() != aSeparator)
+			{
+			}
+
+		if(!lexer.Eos())
+			{
+			lexer.UnGet(); // Do not include trailing ','
+			}
+		aList.AppendL(lexer.MarkedToken());
+		lexer.Inc();
+		}
+	}
+	
+
+