phonebookengines/contactsmodel/tsrc/NbCntTestLib/ContactPrinter.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/NbCntTestLib/ContactPrinter.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,476 @@
+// Copyright (c) 2007-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 <e32test.h>
+#include <cntitem.h>
+#include <cntfldst.h>  //to enable casting from ccontactfieldstorage* to ccontacttextfield* 
+
+
+
+struct SFlagsDict
+	{
+	TInt iFlag;
+	const TText* iDescript;
+	};
+
+#define FF(x) {x, _S(#x)}
+#define NbTestLast 0x00000000
+
+	//Contact field flag struct
+	enum // er5 hard coded enum most of which have been used but not documented ;o(
+		{
+		EHidden				=0x00000001,
+		EReadOnly			=0x00000002,
+		ESynchronize		=0x00000004,
+		EDisabled			=0x00000008,
+		/* 0x00000010,-> 0x00000080 are used for 
+			the user defined attribs / categories like work /
+			Personal / Other / None - used in er5 UI */
+		EUserMask			=0x000000F0,
+		ETemplateMask		=EUserMask|ESynchronize|EReadOnly|EHidden,
+		EOverRidesLabel		=0x00000100,
+		EUsesTemplateData	=0x00000200,
+		EUserAddedField		=0x00000400,
+		ETemplate			=0x00000800,
+		/* 0x00001000,-> 0x0000F000 are used for 
+			the storage type of the contact field */
+		ELabelUnspecified	=0x40000000,
+		EDeleted			=0x80000000
+		};
+	enum 
+		// new extended enum to allow cntmodel to have
+		// more attributes per field
+		{
+		EPrivate			=0x00000001,
+		ESpeedDial			=0x00000002,
+		EUserDefinedFilter	=0x00000004,
+		EUserDefinedFilter1 =0x00000008,
+		EUserDefinedFilter2	=0x00000010,
+		EUserDefinedFilter3	=0x00000020,
+		EUserDefinedFilter4	=0x00000040
+		};
+
+
+struct SDescArr 
+	{
+	operator const TText*() const
+		{
+		return iDesc;
+		}
+
+	const TText* iDesc;
+	};
+
+
+
+#define VM(x) case x: return _S(#x);
+
+extern const TText* VCardMaping(const TFieldType& type)
+	{
+	switch (type.iUid)
+		{
+	//case KUidContactFieldAddressValue: return _S("KUidContactFieldAddressValue");
+	VM(KUidContactFieldAddressValue			);                
+	VM(KUidContactFieldPostOfficeValue		);            
+	VM(KUidContactFieldExtendedAddressValue	);       
+	VM(KUidContactFieldLocalityValue		);            
+	VM(KUidContactFieldRegionValue			);            
+	VM(KUidContactFieldPostCodeValue		);            
+	VM(KUidContactFieldCountryValue			);                
+
+	VM(KUidContactFieldCompanyNameValue );                
+	VM(KUidContactFieldCompanyNamePronunciationValue );
+	VM(KUidContactFieldPhoneNumberValue );                
+	VM(KUidContactFieldGivenNameValue   );                
+	VM(KUidContactFieldFamilyNameValue  );                
+	VM(KUidContactFieldGivenNamePronunciationValue );   
+	VM(KUidContactFieldFamilyNamePronunciationValue );    
+
+	VM(KUidContactFieldAdditionalNameValue);              
+	VM(KUidContactFieldSuffixNameValue  );                
+	VM(KUidContactFieldPrefixNameValue  );                
+	VM(KUidContactFieldHiddenValue      );                
+	VM(KUidContactFieldEMailValue       );                
+	VM(KUidContactFieldMsgValue         );                
+	VM(KUidContactFieldSmsValue         );                
+	VM(KUidContactFieldFaxValue         );                
+
+	VM(KUidContactFieldDefinedTextValue );                
+	VM(KUidContactFieldNoteValue		);            
+	VM(KUidContactFieldBirthdayValue	);            
+	VM(KUidContactFieldUrlValue			);                
+	VM(KUidContactFieldStorageInlineValue);            
+	VM(KUidContactFieldTemplateLabelValue);            
+	VM(KUidContactFieldPictureValue		);                
+	VM(KUidContactFieldRingToneValue	);            
+	VM(KUidContactFieldDTMFValue		);            
+	VM(KUidContactsVoiceDialFieldValue	);            
+	VM(KUidContactFieldNoneValue		);			
+	VM(KUidContactFieldJobTitleValue	);            
+	VM(KUidContactFieldICCSlotValue		);		
+	VM(KUidContactFieldICCPhonebookValue);	
+	VM(KUidContactFieldICCGroupValue	);		
+	VM(KUidContactFieldIMAddressValue	);	
+	VM(KUidContactFieldSecondNameValue	);	
+	VM(KUidContactFieldSIPIDValue		);	
+
+	VM(KIntContactFieldVCardMapWORK );                      
+	VM(KIntContactFieldVCardMapHOME );                      
+	VM(KIntContactFieldVCardMapMSG  );                      
+	VM(KIntContactFieldVCardMapVOICE);                      
+	VM(KIntContactFieldVCardMapFAX  );                      
+	VM(KIntContactFieldVCardMapPREF );                      
+	VM(KIntContactFieldVCardMapCELL );                      
+	VM(KIntContactFieldVCardMapPAGER);                      
+	VM(KIntContactFieldVCardMapBBS  );                      
+	VM(KIntContactFieldVCardMapMODEM);                      
+	VM(KIntContactFieldVCardMapCAR  );                      
+	VM(KIntContactFieldVCardMapISDN );                      
+	VM(KIntContactFieldVCardMapVIDEO);                      
+	VM(KIntContactFieldVCardMapDOM  );                      
+
+	VM(KIntContactFieldVCardMapADR          );          
+	VM(KIntContactFieldVCardMapPOSTOFFICE	);          
+	VM(KIntContactFieldVCardMapEXTENDEDADR	);              
+	VM(KIntContactFieldVCardMapLOCALITY		);              
+	VM(KIntContactFieldVCardMapREGION		);          
+	VM(KIntContactFieldVCardMapPOSTCODE		);               
+	VM(KIntContactFieldVCardMapCOUNTRY		);           
+	VM(KIntContactFieldVCardMapAGENT        );               
+	VM(KIntContactFieldVCardMapBDAY         );               
+	VM(KIntContactFieldVCardMapEMAILINTERNET);               
+	VM(KIntContactFieldVCardMapGEO          );               
+	VM(KIntContactFieldVCardMapLABEL        );               
+	VM(KIntContactFieldVCardMapLOGO         );               
+	VM(KIntContactFieldVCardMapMAILER       );               
+	VM(KIntContactFieldVCardMapNOTE         );               
+	VM(KIntContactFieldVCardMapORG          );               
+	VM(KIntContactFieldVCardMapORGPronunciation );           
+	VM(KIntContactFieldVCardMapPHOTO        );               
+	VM(KIntContactFieldVCardMapROLE         );               
+	VM(KIntContactFieldVCardMapSOUND        );               
+	VM(KIntContactFieldVCardMapTEL          );               
+	VM(KIntContactFieldVCardMapTELFAX       );               
+	VM(KIntContactFieldVCardMapTITLE        );               
+	VM(KIntContactFieldVCardMapURL          );               
+	VM(KIntContactFieldVCardMapUnusedN      );               
+	VM(KIntContactFieldVCardMapUnusedFN     );               
+	VM(KIntContactFieldVCardMapNotRequired  );               
+	VM(KIntContactFieldVCardMapUnknownXDash );               
+	VM(KIntContactFieldVCardMapUnknown      );               
+	VM(KIntContactFieldVCardMapUID          );               
+	VM(KIntContactFieldVCardMapINTL         );               
+	VM(KIntContactFieldVCardMapPOSTAL       );               
+	VM(KIntContactFieldVCardMapPARCEL       );               
+	VM(KIntContactFieldVCardMapGIF		    );              
+	VM(KIntContactFieldVCardMapCGM          );               
+	VM(KIntContactFieldVCardMapWMF          );               
+	VM(KIntContactFieldVCardMapBMP          );               
+	VM(KIntContactFieldVCardMapMET          );               
+	VM(KIntContactFieldVCardMapPMB          );               
+	VM(KIntContactFieldVCardMapDIB          );               
+	VM(KIntContactFieldVCardMapPICT         );               
+	VM(KIntContactFieldVCardMapTIFF         );               
+	VM(KIntContactFieldVCardMapPDF          );               
+	VM(KIntContactFieldVCardMapPS           );               
+	VM(KIntContactFieldVCardMapJPEG         );               
+	VM(KIntContactFieldVCardMapMPEG         );               
+	VM(KIntContactFieldVCardMapMPEG2        );               
+	VM(KIntContactFieldVCardMapAVI          );               
+	VM(KIntContactFieldVCardMapQTIME        );               
+	VM(KIntContactFieldVCardMapTZ			);           
+	VM(KIntContactFieldVCardMapKEY			);           
+
+	VM(KIntContactFieldVCardMapX509			);               
+	VM(KIntContactFieldVCardMapPGP			);           
+	VM(KIntContactFieldVCardMapSMIME		);           
+	VM(KIntContactFieldVCardMapWV			);		
+	VM(KIntContactFieldVCardMapSECONDNAME	);	
+	VM(KIntContactFieldVCardMapSIPID		);		
+	VM(KIntContactFieldVCardMapPOC			);	
+	VM(KIntContactFieldVCardMapSWIS			);	
+	VM(KIntContactFieldVCardMapVOIP			);	
+	default: return _S("Unknown");
+		};
+	};
+
+
+
+class CMyField : public CBase
+	{
+public:
+	CContentType *iContentType;
+	TStorageType iStorageType;
+	HBufC* iLabel;
+	TInt iId;
+	TUint32 iAttributes;
+	TUint32 iExtendedAttributes;
+	CContactFieldStorage* iStorage;
+	TInt iTemplateFieldId;
+	};
+
+
+void PrintFieldsTableL(RFile& outFile, 	const CContactItemFieldSet& fldSet, TBuf8<255>& buf)
+	{
+	SDescArr sTStorageType[] = {
+		_S("KStorageTypeText"),
+		_S("KStorageTypeStore"),
+		_S("KStorageTypeContactIt"),
+		_S("KStorageTypeDateTime")
+		};
+
+	SFlagsDict sFieldFlag[]= {
+		FF(EHidden),
+		FF(EReadOnly),
+		FF(ESynchronize),
+		FF(EDisabled),
+		FF(EUserMask),
+		FF(EOverRidesLabel),
+		FF(EUsesTemplateData),
+		FF(EUserAddedField),
+		FF(ETemplate),
+		FF(ELabelUnspecified),
+		FF(EDeleted),
+		FF(NbTestLast)
+		};
+
+	outFile.Write(_L8("<html><body><table width=100% cellpadding=1 cellspacing=1 border=1>"));
+	outFile.Write(_L8("<tr><td>Fld</td><td>Label</td><td>Field types:</td><td>Storg type</td>" \
+		"<td>Field</td><td>Attr</td><td>Ext.Att</td><td>Templ</td></tr>\r\n"));
+
+	const TInt numOfFields = fldSet.Count();
+	for (TInt i=0; i < numOfFields; ++i)
+		{
+		const CContactItemField& field = fldSet[i];
+		const CMyField& myField = reinterpret_cast<const CMyField&>(field);
+		const CContentType& conType = *myField.iContentType;
+
+		buf.Format(_L8("<tr><td>%d</td>"), myField.iId);
+		outFile.Write(buf);
+
+		outFile.Write(_L8("<td>"));
+		if (myField.iLabel)
+			{
+			buf.Copy(*myField.iLabel);
+			outFile.Write(buf);
+			}
+		outFile.Write(_L8("</td>\r\n"));
+
+		//test.Printf(_L("Field types are:"));
+		outFile.Write(_L8("<td>"));
+
+		for(TInt j=0; j < conType.FieldTypeCount(); ++j)
+			{
+			const TFieldType& fldType = conType.FieldType(j);
+			//test.Printf(_L(" %s"), VCardMaping(fldType));
+			const TPtrC str = VCardMaping(fldType);
+			buf.Copy(str);
+			outFile.Write(buf);
+			outFile.Write(_L8(",<br>"));
+			}
+
+		//Print Mapping of the field 
+		outFile.Write(_L8("MP>: "));
+		const TPtrC mapp = VCardMaping(conType.Mapping());
+		buf.Copy(mapp);
+		outFile.Write(buf);
+
+		outFile.Write(_L8("</td>\r\n<td>"));
+
+		//test.Printf(_L("Storg type: %s"), sTStorageType[myField.iStorageType]);
+		const TPtrC str (sTStorageType[myField.iStorageType]);
+		buf.Copy(str);
+		outFile.Write(buf);
+
+		outFile.Write(_L8("</td>\r\n<td>"));
+		switch(myField.iStorageType)
+			{
+			case KStorageTypeText:  
+				{
+				const TPtrC& textFld = static_cast<CContactTextField*>(field.Storage())->Text();
+				//test.Printf(_L("Text	  : %S"),  textFld);
+				buf.Copy(textFld);
+				outFile.Write(buf);
+				}
+			break;
+			default: 
+			break;
+			}
+
+		outFile.Write(_L8("</td>\r\n"));
+
+		//test.Printf(_L("Attributes: 0x%08x"), myField.iAttributes);
+		buf.Format(_L8("<td>0x%08x"), myField.iAttributes);
+		outFile.Write(buf);
+
+		for (TInt i = 0;; ++i)
+			{
+			const SFlagsDict& aFlag = sFieldFlag[i];
+
+			if (aFlag.iFlag & myField.iAttributes)
+				{
+				TPtrC str(aFlag.iDescript);
+				buf.Copy(str);
+
+				outFile.Write(_L8(",<br>"));
+				outFile.Write(buf);
+				}
+
+
+			if (aFlag.iFlag == NbTestLast)
+				{
+				break;
+				}
+			}
+
+		outFile.Write(_L8("</td>\r\n"));
+
+		//test.Printf(_L("Ext Attrib: 0x%08x"), myField.iExtendedAttributes);
+		buf.Format(_L8("<td>0x%08x</td>\r\n"), myField.iExtendedAttributes);
+		outFile.Write(buf);
+
+		//test.Printf(_L("Temp fldId: 0x%08x"), myField.iTemplateFieldId);
+		buf.Format(_L8("<td>%d</td>\r\n"), myField.iTemplateFieldId);
+		outFile.Write(buf);
+
+		
+		outFile.Write(_L8("</tr>\r\n\r\n"));
+		}
+
+	outFile.Write(_L8("</table></body></html>\r\n"));
+	}
+
+
+
+void PrintIdArrayL(RFile& outFile, 	const CContactIdArray* aArray, const TDesC8& aLabel, TBuf8<255>& buf)
+	{
+	outFile.Write(_L8("<tr><td>"));
+	outFile.Write(aLabel);
+	outFile.Write(_L8("</td><td>"));
+	if (aArray) //If array exists
+		{
+		for (TInt i = 0; i < aArray->Count(); ++i)
+			{
+			const TContactItemId id = (*aArray)[i];
+			if (i)
+				{
+				outFile.Write(_L8("<br/>"));
+				}
+			
+			buf.Format(_L8("%d (%x)"), id,  id);
+			outFile.Write(buf);
+			}
+		}
+	else
+		{
+		outFile.Write(_L8("Not Initialised"));
+		}
+	outFile.Write(_L8("</td></tr>\r\n"));
+	}
+
+
+class CMyContact : public CBase
+	{
+public:
+	CContactItemFieldSet* iFieldSet;
+	TUint32 iAttributes;
+	TContactItemId iId;
+	TContactItemId iTemplateRefId;
+	TTime iLastModified;
+	TTime iCreationDate;
+	TUint32 iAccessCount;
+	HBufC* iGuid;
+	};
+
+class CMyContactPlusGroup : public CMyContact
+	{
+public:
+	CContactIdArray* iGroups;
+	};
+
+class CMyContactGroup : public CMyContactPlusGroup
+	{
+public:
+	CContactIdArray* iItems;
+	};
+
+EXPORT_C void PrintContactL(const TDesC& aFilename, const CContactItem& aContact)
+	{
+	TBuf8<255> buf;
+	TBuf16<100> buf16;
+
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	fs.MkDirAll(aFilename);
+
+	RFile outFile;
+	User::LeaveIfError(outFile.Replace(fs, aFilename, EFileWrite | EFileStreamText));
+	CleanupClosePushL(outFile);
+
+	const CMyContact& myContact = reinterpret_cast<const CMyContact&>(aContact);
+
+	buf.Format(_L8("<table><tr><td>Attributes:</td><td>0x%08x</td></tr>\r\n"), myContact.iAttributes);
+	outFile.Write(buf);
+
+	buf.Format(_L8("<tr><td>Contact ID:</td><td>%d (%x)</td></tr>\r\n"), myContact.iId,  myContact.iId);
+	outFile.Write(buf);
+
+	buf.Format(_L8("<tr><td>Template Ref ID:</td><td> %d (%x)</td></tr>\r\n"), myContact.iTemplateRefId,  myContact.iTemplateRefId);
+	outFile.Write(buf);
+
+
+/*	outFile.Write(_L8("<tr><td>Last Modified:</td><td>"));
+	  myContact.iLastModified.FormatL(buf16,KDateTimeFormat);
+	  buf.Copy(buf16);
+	  outFile.Write(buf);
+	outFile.Write(_L8("</td></tr>\r\n"));
+
+	outFile.Write(_L8("<tr><td>Creation Date:</td><td>"));
+	  myContact.iCreationDate.FormatL(buf16,KDateTimeFormat);
+	  buf.Copy(buf16);
+	  outFile.Write(buf);
+	outFile.Write(_L8("</td></tr>\r\n"));*/
+
+	buf.Format(_L8("<tr><td>Access count:</td><td> %d</td></tr>\r\n"), myContact.iTemplateRefId,  myContact.iAccessCount);
+	outFile.Write(buf);
+
+
+	if (aContact.Type() == KUidContactCard || 
+		aContact.Type() == KUidContactGroup || 
+		aContact.Type() == KUidContactOwnCard)
+		{
+		const CMyContactPlusGroup& myContactPlusGroup = reinterpret_cast<const CMyContactPlusGroup&>(aContact);
+		PrintIdArrayL(outFile, myContactPlusGroup.iGroups, _L8("Belongs to"), buf);
+
+		if (aContact.Type() == KUidContactGroup)
+			{
+			const CMyContactGroup& myContactGrp = reinterpret_cast<const CMyContactGroup&>(aContact);
+			PrintIdArrayL(outFile, myContactGrp.iItems, _L8("Contains"), buf);
+			}
+		}
+
+	outFile.Write(_L8("</table><br/>\r\n"));
+
+	PrintFieldsTableL(outFile, aContact.CardFields(), buf);
+
+	CleanupStack::PopAndDestroy(&outFile);
+	CleanupStack::PopAndDestroy(&fs);
+	}
+
+
+