smf/smfservermodule/smfclient/common/smfcontact.cpp
changeset 14 a469c0e6e7fb
parent 10 77a56c951f86
equal deleted inserted replaced
13:b5d63d5fc252 14:a469c0e6e7fb
     1 /*
     1 /**
     2  * smfcontact.cpp
     2  * Copyright (c) 2010 Sasken Communication Technologies Ltd.
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of the "Eclipse Public License v1.0" 
       
     6  * which accompanies  this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html"
     3  *
     8  *
     4  *  Created on: Apr 15, 2010
     9  * Initial Contributors:
     5  *      Author: manasij
    10  * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
     6  */
    11  *
     7 #include "smfcontact.h"
    12  * Contributors:
       
    13  * Manasij Roy, Nalina Hariharan
       
    14  * 
       
    15  * Description:
       
    16  * The contact class represents a social contact
       
    17  * Note: This class has dependencies on QtMobility project
       
    18  *
       
    19  */
       
    20 
     8 #include <QFile>
    21 #include <QFile>
     9 #include <QTextStream>
    22 #include <QTextStream>
    10 
    23 
    11 
    24 #include "smfcontact.h"
    12 	/**
    25 
    13 	 * Constructor with default argument
    26 /**
    14 	 * @param aParent The parent object
    27  * Constructor with default argument
    15 	 */
    28  * @param aParent The parent object
    16 	SmfContact::SmfContact( QObject *aParent)//:QObject(aParent)
    29  */
    17 	{
    30 SmfContact::SmfContact( QObject *aParent)
    18 	        Q_UNUSED(aParent);
    31 	{
    19 		d = new SmfContactPrivate;
    32 	Q_UNUSED(aParent);
    20 	}
    33 	d = new SmfContactPrivate;
    21 	
    34 	}
    22 	/**
    35 
    23 	 * Copy Constructor
    36 /**
    24 	 * @param aOther The reference object
    37  * Copy Constructor
    25 	 */
    38  * @param aOther The reference object
    26 	SmfContact::SmfContact( const SmfContact &aOther ): d (aOther.d)
    39  */
    27 		{
    40 SmfContact::SmfContact( const SmfContact &aOther ): d (aOther.d)
    28 		
    41 	{
    29 		}
    42 	}
    30 	
    43 
    31 	/**
    44 /**
    32 	 * Destructor
    45  * Overloaded = operator
    33 	 */
    46  * @param aOther The reference object
    34 	SmfContact::~SmfContact( )
    47  * @return The target reference value
    35 		{
    48  */
    36 		
    49 SmfContact& SmfContact::operator=( const SmfContact &aOther )
    37 		}
    50 	{
    38 	QStringList SmfContact::subTypes( ) const
    51 	d->m_details = aOther.d->m_details;
    39 			{
    52 	return *this;
    40 			    return QStringList();
    53 	}
    41 			}
    54 
    42 	
    55 /**
    43 	/**
    56  * Destructor
    44 	 * Method to convert an SmfContact to a QContact
    57  */
    45 	 * Changes made to the returned QContact will not be reflected 
    58 SmfContact::~SmfContact( )
    46 	 * in its parent SmfContact object
    59 	{
    47 	 * @param aContact QContact corresponding to SmfContact 
    60 	}
    48 	 */
    61 
    49 	void SmfContact::convert( QContact &aContact ) const
    62 /**
    50 			{
    63  * Method to get the available sub fields for contacts.
    51 			    Q_UNUSED(aContact);
    64  * The following are the available sub types of a contact
    52 			}
    65  *   QtMobility::QContactAddress		Address;
    53 	
    66  *   QtMobility::QContactAnniversary	Anniversary;
    54 	/**
    67  *   QtMobility::QContactAvatar			Avatar;
    55 	 * Method to get the value of a sub field for this contact
    68  *   QtMobility::QContactBirthday		Birthday;
    56 	 * @param aSubType The sub field type 
    69  *   QtMobility::QContactId				ContactId;
    57 	 * @return The value of the sub field subType
    70  *   QtMobility::QContactEmailAddress	EmailAddress;
    58 	 * @see subTypes()
    71  *   QtMobility::QContactGender			Gender;
    59 	 */
    72  *   QtMobility::QContactGeoLocation	Geolocation;
    60 	QVariant SmfContact::value( const QString& aSubType ) const
    73  *   QtMobility::QContactGuid			Guid;
    61 			{
    74  *   QtMobility::QContactName			Name;
    62 			if(d->m_details.contains(aSubType))
    75  *   QtMobility::QContactNickname		Nickname;
    63 				return d->m_details.value(aSubType);
    76  *   QtMobility::QContactNote			Note;
    64 			else
    77  *   QtMobility::QContactOnlineAccount	OnlineAccount;
    65 				return QString("Not found");
    78  *   QtMobility::QContactOrganization	Organization;
    66 			}
    79  *   QtMobility::QContactPhoneNumber	PhoneNumber;
    67 	
    80  *   QtMobility::QContactPresence		Presence;
    68 	void SmfContact::setValue(const QString& aSubType,QVariant& value)
    81  *   QtMobility::QContactThumbnail		Thumbnail;
    69 		{
    82  *   QtMobility::QContactTimestamp		Timestamp;
    70 		d->m_details.insert(aSubType,value);
    83  *   QtMobility::QContactType			Type;
    71 		}
    84  *   QtMobility::QContactUrl			Url;
    72 	void SmfContact::writeLog(QString log) const
    85  * @return The Available sub fields for this contact
    73 		{
    86  */
    74 		QFile file("c:\\data\\SmfClientLogs.txt");
    87 QStringList SmfContact::subTypes( ) const
    75 	    if (!file.open(QIODevice::Append | QIODevice::Text))
    88 	{
    76 		         return;
    89 	QStringList list = d->m_details.uniqueKeys();
    77 	    QTextStream out(&file);
    90 	return list;
    78 	    out << log << "\n";
    91 	}
    79 	    file.close();
    92 
    80 
    93 /**
    81 		}
    94  * Method to convert an SmfContact to a QContact
    82 	/**
    95  * Changes made to the returned QContact will not be reflected 
    83 	 * Method for Externalization. Writes the SmfContact object to 
    96  * in its parent SmfContact object
    84 	 * the stream and returns a reference to the stream.
    97  * @param aContact QContact corresponding to SmfContact 
    85 	 * @param aDataStream Stream to be written
    98  */
    86 	 * @param aContact The SmfContact object to be externalized
    99 void SmfContact::convert( QContact &aContact ) const
    87 	 * @return reference to the written stream
   100 	{
    88 	 */
   101 // TODO:-
    89 	//TODO:-Need to revisit
   102 	Q_UNUSED(aContact);
    90 
   103 	}
    91 	QDataStream &operator<<( QDataStream &aDataStream, 
   104 
    92 			const SmfContact& aContact )
   105 /**
    93 		{
   106  * Method to get the value of a sub field for this contact
    94 		aContact.writeLog("smfContact::operator<<");
   107  * @param aSubType The sub field type 
    95 		QVariant var = aContact.value("Name");
   108  * @return The value of the sub field subType
    96 		QContactName cn = var.value<QContactName>();
   109  * @see subTypes()
    97 		aDataStream<<cn;
   110  */
    98 		return aDataStream;
   111 QVariant SmfContact::value( const QString& aSubType ) const
    99 		
   112 	{
   100 		}
   113 	if(d->m_details.contains(aSubType))
   101 
   114 		return d->m_details.value(aSubType);
   102 	/**
   115 	else
   103 	 * Method for Internalization. Reads a SmfContact object from 
   116 		return QString();
   104 	 * the stream and returns a reference to the stream.
   117 	}
   105 	 * @param aDataStream Stream to be read
   118 
   106 	 * @param aContact The SmfContact object to be internalized
   119 /**
   107 	 * @return reference to the stream
   120  * Method to set value for a subtype
   108 	 */
   121  * @param aSubType The subtype string
   109 	
   122  * @param value Thhe value to be set for the subtype
   110 	QDataStream &operator>>( QDataStream &aDataStream, 
   123  */
   111 			SmfContact& aContact )
   124 void SmfContact::setValue(const QString& aSubType,QVariant& value)
   112 		{
   125 	{
   113 		aContact.writeLog("smfContact::operator>>");
   126 	d->m_details.insert(aSubType,value);
   114 		//explicitely adding fields for the classes that don't provide 
   127 	}
   115 		//internalizatio/externalization :(
   128 
   116 		QContactName name;
   129 /**
   117 		//QString name;
   130  * Method for Externalization. Writes the SmfContact object to 
   118 		aDataStream>>name;
   131  * the stream and returns a reference to the stream.
   119 		QVariant var = QVariant::fromValue(name);
   132  * @param aDataStream Stream to be written
   120 		aContact.setValue("Name",var);
   133  * @param aContact The SmfContact object to be externalized
   121 		return aDataStream;
   134  * @return reference to the written stream
   122 		}
   135  */
   123 	QDataStream &operator<<( QDataStream &aDataStream, 
   136 QDataStream &operator<<( QDataStream &aDataStream, 
   124 			const QContactName &aContact )
   137 		const SmfContact& aContact )
   125 		{
   138 	{
   126 		//Qt mobility introduces API compatibility break
   139 	QContactAddress address = aContact.value("Address").value<QContactAddress>();
       
   140 	aDataStream<<address;
       
   141 	
       
   142 	QContactAnniversary anniver = aContact.value("Anniversary").value<QContactAnniversary>();
       
   143 	aDataStream<<anniver;
       
   144 	
       
   145 	QContactAvatar avatar = aContact.value("Avatar").value<QContactAvatar>();
       
   146 	aDataStream<<avatar;
       
   147 	
       
   148 	QContactBirthday bday = aContact.value("Birthday").value<QContactBirthday>();
       
   149 	aDataStream<<bday;
       
   150 	
       
   151 	QContactId contactId = aContact.value("ContactId").value<QContactId>();
       
   152 	aDataStream<<contactId;
       
   153 	
       
   154 	QContactEmailAddress email = aContact.value("EmailAddress").value<QContactEmailAddress>();
       
   155 	aDataStream<<email;
       
   156 	
       
   157 	QContactGender gender = aContact.value("Gender").value<QContactGender>();
       
   158 	aDataStream<<gender;
       
   159 	
       
   160 	QContactGeoLocation geoloc = aContact.value("Geolocation").value<QContactGeoLocation>();
       
   161 	aDataStream<<geoloc;
       
   162 	
       
   163 	QContactGuid guid = aContact.value("Guid").value<QContactGuid>();
       
   164 	aDataStream<<guid;
       
   165 	
       
   166 	QContactName name = aContact.value("Name").value<QContactName>();
       
   167 	aDataStream<<name;
       
   168 	
       
   169 	QContactNickname nickname = aContact.value("Nickname").value<QContactNickname>();
       
   170 	aDataStream<<nickname;
       
   171 	
       
   172 	QContactNote note = aContact.value("Note").value<QContactNote>();
       
   173 	aDataStream<<note;
       
   174 	
       
   175 	QContactOnlineAccount account = aContact.value("OnlineAccount").value<QContactOnlineAccount>();
       
   176 	aDataStream<<account;
       
   177 	
       
   178 	QContactOrganization org = aContact.value("Organization").value<QContactOrganization>();
       
   179 	aDataStream<<org;
       
   180 	
       
   181 	QContactPhoneNumber number = aContact.value("PhoneNumber").value<QContactPhoneNumber>();
       
   182 	aDataStream<<number;
       
   183 	
       
   184 	QContactPresence presence = aContact.value("Presence").value<QContactPresence>();
       
   185 	aDataStream<<presence;
       
   186 	
       
   187 	QContactThumbnail thumbnail = aContact.value("Thumbnail").value<QContactThumbnail>();
       
   188 	aDataStream<<thumbnail;
       
   189 	
       
   190 	QContactTimestamp time = aContact.value("Timestamp").value<QContactTimestamp>();
       
   191 	aDataStream<<time;
       
   192 	
       
   193 	QContactType type = aContact.value("Type").value<QContactType>();
       
   194 	aDataStream<<type;
       
   195 	
       
   196 	QContactUrl url = aContact.value("Url").value<QContactUrl>();
       
   197 	aDataStream<<url;
       
   198 	
       
   199 	return aDataStream;
       
   200 	}
       
   201 
       
   202 /**
       
   203  * Method for Internalization. Reads a SmfContact object from 
       
   204  * the stream and returns a reference to the stream.
       
   205  * @param aDataStream Stream to be read
       
   206  * @param aContact The SmfContact object to be internalized
       
   207  * @return reference to the stream
       
   208  */
       
   209 QDataStream &operator>>( QDataStream &aDataStream, 
       
   210 		SmfContact& aContact )
       
   211 	{
       
   212 	QContactAddress address;
       
   213 	aDataStream>>address;
       
   214 	QVariant var1 = QVariant::fromValue(address);
       
   215 	aContact.setValue("Address",var1);
       
   216 	
       
   217 	QContactAnniversary anniver;
       
   218 	aDataStream>>anniver;
       
   219 	QVariant var2 = QVariant::fromValue(anniver);
       
   220 	aContact.setValue("Anniversary",var2);
       
   221 	
       
   222 	QContactAvatar avatar;
       
   223 	aDataStream>>avatar;
       
   224 	QVariant var3 = QVariant::fromValue(avatar);
       
   225 	aContact.setValue("Avatar",var3);
       
   226 	
       
   227 	QContactBirthday bday;
       
   228 	aDataStream>>bday;
       
   229 	QVariant var4 = QVariant::fromValue(bday);
       
   230 	aContact.setValue("Birthday",var4);
       
   231 	
       
   232 	QContactId id;
       
   233 	aDataStream>>id;
       
   234 	QVariant var5 = QVariant::fromValue(id);
       
   235 	aContact.setValue("ContactId",var5);
       
   236 	
       
   237 	QContactEmailAddress email;
       
   238 	aDataStream>>email;
       
   239 	QVariant var6 = QVariant::fromValue(email);
       
   240 	aContact.setValue("EmailAddress",var6);
       
   241 	
       
   242 	QContactGender gender;
       
   243 	aDataStream>>gender;
       
   244 	QVariant var7 = QVariant::fromValue(gender);
       
   245 	aContact.setValue("Gender",var7);
       
   246 	
       
   247 	QContactGeoLocation geo;
       
   248 	aDataStream>>geo;
       
   249 	QVariant var8 = QVariant::fromValue(geo);
       
   250 	aContact.setValue("Geolocation",var8);
       
   251 	
       
   252 	QContactGuid guid;
       
   253 	aDataStream>>guid;
       
   254 	QVariant var9 = QVariant::fromValue(guid);
       
   255 	aContact.setValue("Guid",var9);
       
   256 	
       
   257 	QContactName name1;
       
   258 	aDataStream>>name1;
       
   259 	QVariant var10 = QVariant::fromValue(name1);
       
   260 	aContact.setValue("Name",var10);
       
   261 	
       
   262 	QContactNickname nickname;
       
   263 	aDataStream>>nickname;
       
   264 	QVariant var11 = QVariant::fromValue(nickname);
       
   265 	aContact.setValue("Nickname",var11);
       
   266 	
       
   267 	QContactNote note;
       
   268 	aDataStream>>note;
       
   269 	QVariant var12 = QVariant::fromValue(note);
       
   270 	aContact.setValue("Note",var12);
       
   271 	
       
   272 	QContactOnlineAccount account;
       
   273 	aDataStream>>account;
       
   274 	QVariant var13 = QVariant::fromValue(account);
       
   275 	aContact.setValue("OnlineAccount",var13);
       
   276 	
       
   277 	QContactOrganization org;
       
   278 	aDataStream>>org;
       
   279 	QVariant var14 = QVariant::fromValue(org);
       
   280 	aContact.setValue("Organization",var14);
       
   281 	
       
   282 	QContactPhoneNumber number;
       
   283 	aDataStream>>number;
       
   284 	QVariant var15 = QVariant::fromValue(number);
       
   285 	aContact.setValue("PhoneNumber",var15);
       
   286 	
       
   287 	QContactPresence presence;
       
   288 	aDataStream>>presence;
       
   289 	QVariant var16 = QVariant::fromValue(presence);
       
   290 	aContact.setValue("Presence",var16);
       
   291 	
       
   292 	QContactThumbnail thumbnail;
       
   293 	aDataStream>>thumbnail;
       
   294 	QVariant var17 = QVariant::fromValue(thumbnail);
       
   295 	aContact.setValue("Thumbnail",var17);
       
   296 	
       
   297 	QContactTimestamp time;
       
   298 	aDataStream>>time;
       
   299 	QVariant var18 = QVariant::fromValue(time);
       
   300 	aContact.setValue("Timestamp",var18);
       
   301 	
       
   302 	QContactType type;
       
   303 	aDataStream>>type;
       
   304 	QVariant var19 = QVariant::fromValue(type);
       
   305 	aContact.setValue("Type",var19);
       
   306 	
       
   307 	QContactUrl url;
       
   308 	aDataStream>>url;
       
   309 	QVariant var20 = QVariant::fromValue(url);
       
   310 	aContact.setValue("Url",var20);
       
   311 	
       
   312 	return aDataStream;
       
   313 	}
       
   314 
       
   315 
       
   316 
       
   317 
       
   318 /**
       
   319  * Serialization support for QtMobility::QContactAddress
       
   320  */
       
   321 QDataStream& operator<<( QDataStream &aDataStream, 
       
   322 		const QContactAddress &aAddress )
       
   323 	{
       
   324 	aDataStream<<aAddress.country();
       
   325 	aDataStream<<aAddress.locality();
       
   326 	aDataStream<<aAddress.postOfficeBox();
       
   327 	aDataStream<<aAddress.postcode();
       
   328 	aDataStream<<aAddress.region();
       
   329 	aDataStream<<aAddress.street();
       
   330 	aDataStream<<aAddress.subTypes();
       
   331 
       
   332 	return aDataStream;
       
   333 	}
       
   334 
       
   335 /**
       
   336  * Deserialization support for QtMobility::QContactAddress
       
   337  */
       
   338 QDataStream &operator>>( QDataStream &aDataStream, 
       
   339 		QContactAddress &aAddress )
       
   340 	{
       
   341 	QString str;
       
   342 	
       
   343 	// First one to be deserialized is country
       
   344 	aDataStream>>str;
       
   345 	aAddress.setCountry(str);
       
   346 
       
   347 	// Next one to be deserialized is locality
       
   348 	str.clear();
       
   349 	aDataStream>>str;
       
   350 	aAddress.setLocality(str);
       
   351 
       
   352 	// Next one to be deserialized is postOfficeBox
       
   353 	str.clear();
       
   354 	aDataStream>>str;
       
   355 	aAddress.setPostOfficeBox(str);
       
   356 	
       
   357 	// Next one to be deserialized is postCode
       
   358 	str.clear();
       
   359 	aDataStream>>str;
       
   360 	aAddress.setPostcode(str);
       
   361 	
       
   362 	// Next one to be deserialized is region
       
   363 	str.clear();
       
   364 	aDataStream>>str;
       
   365 	aAddress.setRegion(str);
       
   366 	
       
   367 	// Next one to be deserialized is street
       
   368 	str.clear();
       
   369 	aDataStream>>str;
       
   370 	aAddress.setStreet(str);
       
   371 	
       
   372 	// Next one to be deserialized is subtypes
       
   373 	QStringList list;
       
   374 	list.clear();
       
   375 	aDataStream>>list;
       
   376 	aAddress.setSubTypes(list);
       
   377 	
       
   378 	return aDataStream;
       
   379 	}
       
   380 
       
   381 
       
   382 /**
       
   383  * Serialization support for QtMobility::QContactAnniversary
       
   384  */
       
   385 QDataStream &operator<<( QDataStream &aDataStream, 
       
   386 		const QContactAnniversary &aAnniversary )
       
   387 	{
       
   388 	aDataStream<<aAnniversary.calendarId();
       
   389 	aDataStream<<aAnniversary.event();
       
   390 	aDataStream<<aAnniversary.originalDate();
       
   391 	aDataStream<<aAnniversary.subType();
       
   392 
       
   393 	return aDataStream;
       
   394 	}
       
   395 
       
   396 /**
       
   397  * Deserialization support for QtMobility::QContactAnniversary
       
   398  */
       
   399 QDataStream &operator>>( QDataStream &aDataStream, 
       
   400 		QContactAnniversary &aAnniversary)
       
   401 	{
       
   402 	QString str;
       
   403 	QDate date;
       
   404 	
       
   405 	// First one to be deserialized is calendarId
       
   406 	aDataStream>>str;
       
   407 	aAnniversary.setCalendarId(str);
       
   408 
       
   409 	// Next one to be deserialized is event
       
   410 	str.clear();
       
   411 	aDataStream>>str;
       
   412 	aAnniversary.setEvent(str);
       
   413 
       
   414 	// Next one to be deserialized is originalDate
       
   415 	aDataStream>>date;
       
   416 	aAnniversary.setOriginalDate(date);
       
   417 	
       
   418 	// Next one to be deserialized is subType
       
   419 	str.clear();
       
   420 	aDataStream>>str;
       
   421 	aAnniversary.setSubType(str);
       
   422 		
       
   423 	return aDataStream;
       
   424 	}
       
   425 
       
   426 
       
   427 /**
       
   428  * Serialization support for QtMobility::QContactAvatar
       
   429  */
       
   430 QDataStream &operator<<( QDataStream &aDataStream, 
       
   431 	const QContactAvatar &aAvatar )
       
   432 	{
       
   433 	//TODO:- QContactAvatar derives from QContactDetail,so internalization/externalization
       
   434 	//for the same should be provided
       
   435 	
       
   436 	//Qt mobility introduces API compatibility break
   127 #ifdef OLDER_QT_MOBILITY
   437 #ifdef OLDER_QT_MOBILITY
   128 		aDataStream<<aContact.first();
   438 	aDataStream<<aAvatar.avatar();
   129 		aDataStream<<aContact.last();
   439 
   130 #else
   440 #else
   131 		
   441 	aDataStream<<aAvatar.imageUrl();
   132 		aDataStream<<aContact.firstName();
   442 	aDataStream<<aAvatar.videoUrl();
   133 		aDataStream<<aContact.lastName();
       
   134 #endif
   443 #endif
   135 		return aDataStream;
   444 	
   136 		}
   445 	return aDataStream;
   137 
   446 	}
   138 	QDataStream &operator>>( QDataStream &aDataStream, 
   447 
   139 			QContactName &aContact )
   448 /**
   140 		{
   449  * Deserialization support for QtMobility::QContactAvatar
   141 		QString first;
   450  */
   142 		QString last;
   451 QDataStream &operator>>( QDataStream &aDataStream, 
   143 		aDataStream>>first;
   452 	QContactAvatar &aAvatar)
       
   453 	{
   144 #ifdef OLDER_QT_MOBILITY
   454 #ifdef OLDER_QT_MOBILITY
   145 		aContact.setFirst(first);
   455 	QString avatarPath;
       
   456 	aDataStream>>avatarPath;
       
   457 	aAvatar.setAvatar(avatarPath);
   146 #else
   458 #else
   147 		aContact.setFirstName(first);
   459 	QUrl url;
       
   460 	aDataStream>>url;
       
   461 	aAvatar.setImageUrl(url);
       
   462 	
       
   463 	url.clear();
       
   464 	aDataStream>>url;
       
   465 	aAvatar.setVideoUrl(url);
   148 #endif
   466 #endif
   149 
   467 	
   150 		aDataStream>>last;
   468 	return aDataStream;
       
   469 	}
       
   470 
       
   471 
       
   472 /**
       
   473  * Serialization support for QtMobility::QContactBirthday
       
   474  */
       
   475 QDataStream &operator<<( QDataStream &aDataStream, 
       
   476 	const QContactBirthday &aBirthday )
       
   477 	{
       
   478 	aDataStream<<aBirthday.date();
       
   479 	return aDataStream;
       
   480 	}
       
   481 
       
   482 /**
       
   483  * Deserialization support for QtMobility::QContactBirthday
       
   484  */
       
   485 QDataStream &operator>>( QDataStream &aDataStream, 
       
   486 		QContactBirthday &aBirthday)
       
   487 	{
       
   488 	QDate date;
       
   489 	aDataStream>>date;
       
   490 	aBirthday.setDate(date);
       
   491 
       
   492 	return aDataStream;
       
   493 	}
       
   494 
       
   495 
       
   496 /**
       
   497  * Serialization support for QtMobility::QContactId
       
   498  */
       
   499 QDataStream &operator<<( QDataStream &aDataStream, 
       
   500 	const QContactId &aContactId )
       
   501 	{
       
   502 	aDataStream<<aContactId.localId();
       
   503 	aDataStream<<aContactId.managerUri();
       
   504 
       
   505 	return aDataStream;
       
   506 	}
       
   507 
       
   508 /**
       
   509  * Deserialization support for QtMobility::QContactId
       
   510  */
       
   511 QDataStream &operator>>( QDataStream &aDataStream, 
       
   512 		QContactId &aContactId)
       
   513 	{
       
   514 	QContactLocalId localId;
       
   515 	QString str;
       
   516 	
       
   517 	// First one to be deserialized is localId
       
   518 	aDataStream>>localId;
       
   519 	aContactId.setLocalId(localId);
       
   520 
       
   521 	// Next one to be deserialized is managerUri
       
   522 	aDataStream>>str;
       
   523 	aContactId.setManagerUri(str);
       
   524 		
       
   525 	return aDataStream;
       
   526 	}
       
   527 
       
   528 
       
   529 /**
       
   530  * Serialization support for QtMobility::QContactEmailAddress
       
   531  */
       
   532 QDataStream &operator<<( QDataStream &aDataStream, 
       
   533 	const QContactEmailAddress &aEMail )
       
   534 	{
       
   535 	aDataStream<<aEMail.emailAddress();
       
   536 	return aDataStream;
       
   537 	}
       
   538 
       
   539 /**
       
   540  * Deserialization support for QtMobility::QContactEmailAddress
       
   541  */
       
   542 QDataStream &operator>>( QDataStream &aDataStream, 
       
   543 		QContactEmailAddress &aEMail)
       
   544 	{
       
   545 	QString str;
       
   546 	aDataStream>>str;
       
   547 	aEMail.setEmailAddress(str);
       
   548 		
       
   549 	return aDataStream;
       
   550 	}
       
   551 
       
   552 
       
   553 /**
       
   554  * Serialization support for QtMobility::QContactGender
       
   555  */
       
   556 QDataStream &operator<<( QDataStream &aDataStream, 
       
   557 	const QContactGender &aGender )
       
   558 	{
       
   559 	aDataStream<<aGender.gender();
       
   560 	return aDataStream;
       
   561 	}
       
   562 
       
   563 /**
       
   564  * Deserialization support for QtMobility::QContactGender
       
   565  */
       
   566 QDataStream &operator>>( QDataStream &aDataStream, 
       
   567 		QContactGender &aGender)
       
   568 	{
       
   569 	QString str;
       
   570 	aDataStream>>str;
       
   571 	aGender.setGender(str);
       
   572 		
       
   573 	return aDataStream;
       
   574 	}
       
   575 
       
   576 
       
   577 /**
       
   578  * Serialization support for QtMobility::QContactGeoLocation
       
   579  */
       
   580 QDataStream &operator<<( QDataStream &aDataStream, 
       
   581 	const QContactGeoLocation &aGeolocation )
       
   582 	{
       
   583 	aDataStream<<aGeolocation.accuracy();
       
   584 	aDataStream<<aGeolocation.altitude();
       
   585 	aDataStream<<aGeolocation.altitudeAccuracy();
       
   586 	aDataStream<<aGeolocation.heading();
       
   587 	aDataStream<<aGeolocation.label();
       
   588 	aDataStream<<aGeolocation.latitude();
       
   589 	aDataStream<<aGeolocation.longitude();
       
   590 	aDataStream<<aGeolocation.speed();
       
   591 	aDataStream<<aGeolocation.timestamp();
       
   592 	return aDataStream;
       
   593 	}
       
   594 
       
   595 /**
       
   596  * Deserialization support for QtMobility::QContactGeoLocation
       
   597  */
       
   598 QDataStream &operator>>( QDataStream &aDataStream, 
       
   599 		QContactGeoLocation &aGeolocation)
       
   600 	{
       
   601 	double val;
       
   602 	QString str;
       
   603 	QDateTime date;
       
   604 	
       
   605 	// First one to be deserialized is accuracy
       
   606 	val = 0;
       
   607 	aDataStream>>val;
       
   608 	aGeolocation.setAccuracy(val);
       
   609 
       
   610 	// Next one to be deserialized is altitude
       
   611 	val = 0;
       
   612 	aDataStream>>val;
       
   613 	aGeolocation.setAltitude(val);
       
   614 
       
   615 	// Next one to be deserialized is altitudeAccuracy
       
   616 	val = 0;
       
   617 	aDataStream>>val;
       
   618 	aGeolocation.setAltitudeAccuracy(val);
       
   619 	
       
   620 	// Next one to be deserialized is heading
       
   621 	val = 0;
       
   622 	aDataStream>>val;
       
   623 	aGeolocation.setHeading(val);
       
   624 	
       
   625 	// First one to be deserialized is label
       
   626 	aDataStream>>str;
       
   627 	aGeolocation.setLabel(str);
       
   628 
       
   629 	// Next one to be deserialized is latitude
       
   630 	val = 0;
       
   631 	aDataStream>>val;
       
   632 	aGeolocation.setLatitude(val);
       
   633 
       
   634 	// Next one to be deserialized is longitude
       
   635 	val = 0;
       
   636 	aDataStream>>val;
       
   637 	aGeolocation.setLongitude(val);
       
   638 	
       
   639 	// Next one to be deserialized is speed
       
   640 	val = 0;
       
   641 	aDataStream>>val;
       
   642 	aGeolocation.setSpeed(val);
       
   643 	
       
   644 	// Next one to be deserialized is timestamp
       
   645 	aDataStream>>date;
       
   646 	aGeolocation.setTimestamp(date);
       
   647 		
       
   648 	return aDataStream;
       
   649 	}
       
   650 
       
   651 /**
       
   652  * Serialization support for QtMobility::QContactGuid
       
   653  */
       
   654 QDataStream &operator<<( QDataStream &aDataStream, 
       
   655 	const QContactGuid &aGuid )
       
   656 	{
       
   657 	aDataStream<<aGuid.guid();
       
   658 	return aDataStream;
       
   659 	}
       
   660 
       
   661 /**
       
   662  * Deserialization support for QtMobility::QContactGuid
       
   663  */
       
   664 QDataStream &operator>>( QDataStream &aDataStream, 
       
   665 		QContactGuid &aGuid)
       
   666 	{
       
   667 	QString str;
       
   668 	aDataStream>>str;
       
   669 	aGuid.setGuid(str);
       
   670 	
       
   671 	return aDataStream;
       
   672 	}
       
   673 
       
   674 
       
   675 /**
       
   676  * Serialization support for QtMobility::QContactName
       
   677  */
       
   678 QDataStream &operator<<( QDataStream &aDataStream, 
       
   679 		const QContactName &aContact )
       
   680 	{
       
   681 	//Qt mobility introduces API compatibility break
   151 #ifdef OLDER_QT_MOBILITY
   682 #ifdef OLDER_QT_MOBILITY
   152 		aContact.setLast(last);
   683 	aDataStream<<aContact.first();
       
   684 	aDataStream<<aContact.last();
   153 #else
   685 #else
   154 		aContact.setLastName(last);
   686 	aDataStream<<aContact.customLabel();
       
   687 	aDataStream<<aContact.firstName();
       
   688 	aDataStream<<aContact.lastName();
       
   689 	aDataStream<<aContact.middleName();
       
   690 	aDataStream<<aContact.prefix();
       
   691 	aDataStream<<aContact.suffix();
   155 #endif
   692 #endif
   156 		return aDataStream;
   693 	
   157 		}
   694 	return aDataStream;
       
   695 	}
       
   696 
       
   697 /**
       
   698  * Deserialization support for QtMobility::QContactName
       
   699  */
       
   700 QDataStream &operator>>( QDataStream &aDataStream, 
       
   701 		QContactName &aContact )
       
   702 	{
       
   703 	QString str;
       
   704 	
       
   705 	// First one to be deserialized is customlabel
       
   706 	str.clear();
       
   707 	aDataStream>>str;
       
   708 	aContact.setCustomLabel(str);
       
   709 	
       
   710 	// Next one to be deserialized is firstname
       
   711 	str.clear();
       
   712 	aDataStream>>str;
       
   713 #ifdef OLDER_QT_MOBILITY
       
   714 	aContact.setFirst(str);
       
   715 #else
       
   716 	aContact.setFirstName(str);
       
   717 #endif
       
   718 
       
   719 	// Next one to be deserialized is lastName
       
   720 	str.clear();
       
   721 	aDataStream>>str;
       
   722 #ifdef OLDER_QT_MOBILITY
       
   723 	aContact.setLast(str);
       
   724 #else
       
   725 	aContact.setLastName(str);
       
   726 #endif
       
   727 	
       
   728 
       
   729 	
       
   730 	// Next one to be deserialized is middlename
       
   731 	str.clear();
       
   732 	aDataStream>>str;
       
   733 	aContact.setMiddleName(str);
       
   734 	
       
   735 	// Next one to be deserialized is prefix
       
   736 	str.clear();
       
   737 	aDataStream>>str;
       
   738 	aContact.setPrefix(str);
       
   739 	
       
   740 	// Next one to be deserialized is suffix
       
   741 	str.clear();
       
   742 	aDataStream>>str;
       
   743 	aContact.setSuffix(str);
       
   744 	
       
   745 	return aDataStream;
       
   746 	}
       
   747 
       
   748 
       
   749 /**
       
   750  * Serialization support for QtMobility::QContactNickname
       
   751  */
       
   752 QDataStream &operator<<( QDataStream &aDataStream, 
       
   753 	const QContactNickname &aNickname )
       
   754 	{
       
   755 	aDataStream<<aNickname.nickname();
       
   756 	return aDataStream;
       
   757 	}
       
   758 
       
   759 /**
       
   760  * Deserialization support for QtMobility::QContactNickname
       
   761  */
       
   762 QDataStream &operator>>( QDataStream &aDataStream, 
       
   763 		QContactNickname &aNickname)
       
   764 	{
       
   765 	QString str;
       
   766 	aDataStream>>str;
       
   767 	aNickname.setNickname(str);
       
   768 		
       
   769 	return aDataStream;
       
   770 	}
       
   771 
       
   772 
       
   773 /**
       
   774  * Serialization support for QtMobility::QContactNote
       
   775  */
       
   776 QDataStream &operator<<( QDataStream &aDataStream, 
       
   777 	const QContactNote &aNote )
       
   778 	{
       
   779 	aDataStream<<aNote.note();
       
   780 	return aDataStream;
       
   781 	}
       
   782 
       
   783 /**
       
   784  * Deserialization support for QtMobility::QContactNote
       
   785  */
       
   786 QDataStream &operator>>( QDataStream &aDataStream, 
       
   787 		QContactNote &aNote)
       
   788 	{
       
   789 	QString str;
       
   790 	aDataStream>>str;
       
   791 	aNote.setNote(str);
       
   792 		
       
   793 	return aDataStream;
       
   794 	}
       
   795 
       
   796 
       
   797 /**
       
   798  * Serialization support for QtMobility::QContactOnlineAccount
       
   799  */
       
   800 QDataStream &operator<<( QDataStream &aDataStream, 
       
   801 	const QContactOnlineAccount &aOnlineAccount )
       
   802 	{
       
   803 	aDataStream<<aOnlineAccount.accountUri();
       
   804 	aDataStream<<aOnlineAccount.capabilities();
       
   805 	aDataStream<<aOnlineAccount.serviceProvider();
       
   806 	aDataStream<<aOnlineAccount.subTypes();
       
   807 
       
   808 	return aDataStream;
       
   809 	}
       
   810 
       
   811 /**
       
   812  * Deserialization support for QtMobility::QContactOnlineAccount
       
   813  */
       
   814 QDataStream &operator>>( QDataStream &aDataStream, 
       
   815 		QContactOnlineAccount &aOnlineAccount)
       
   816 	{
       
   817 	QString str;
       
   818 	QStringList list;
       
   819 	
       
   820 	// First one to be deserialized is accountUri
       
   821 	aDataStream>>str;
       
   822 	aOnlineAccount.setAccountUri(str);
       
   823 
       
   824 	// Next one to be deserialized is capabilities
       
   825 	aDataStream>>list;
       
   826 	aOnlineAccount.setCapabilities(list);
       
   827 
       
   828 	// Next one to be deserialized is serviceProvider
       
   829 	str.clear();
       
   830 	aDataStream>>str;
       
   831 	aOnlineAccount.setServiceProvider(str);
       
   832 	
       
   833 	// Next one to be deserialized is subTypes
       
   834 	list.clear();
       
   835 	aDataStream>>list;
       
   836 	aOnlineAccount.setSubTypes(list);
       
   837 		
       
   838 	return aDataStream;
       
   839 	}
       
   840 
       
   841 
       
   842 /**
       
   843  * Serialization support for QtMobility::QContactOrganization
       
   844  */
       
   845 QDataStream &operator<<( QDataStream &aDataStream, 
       
   846 	const QContactOrganization &aOrganization )
       
   847 	{
       
   848 	aDataStream<<aOrganization.assistantName();
       
   849 	aDataStream<<aOrganization.department();
       
   850 	aDataStream<<aOrganization.location();
       
   851 	aDataStream<<aOrganization.logoUrl();
       
   852 	aDataStream<<aOrganization.name();
       
   853 	aDataStream<<aOrganization.role();
       
   854 	aDataStream<<aOrganization.title();
       
   855 
       
   856 	return aDataStream;
       
   857 	}
       
   858 
       
   859 /**
       
   860  * Deserialization support for QtMobility::QContactOrganization
       
   861  */
       
   862 QDataStream &operator>>( QDataStream &aDataStream, 
       
   863 		QContactOrganization &aOrganization )
       
   864 	{
       
   865 	QString str;
       
   866 	QStringList list;
       
   867 	QUrl url;
       
   868 	
       
   869 	// First one to be deserialized is assistantName
       
   870 	aDataStream>>str;
       
   871 	aOrganization.setAssistantName(str);
       
   872 
       
   873 	// Next one to be deserialized is department
       
   874 	aDataStream>>list;
       
   875 	aOrganization.setDepartment(list);
       
   876 
       
   877 	// Next one to be deserialized is location
       
   878 	str.clear();
       
   879 	aDataStream>>str;
       
   880 	aOrganization.setLocation(str);
       
   881 	
       
   882 	// Next one to be deserialized is logoUrl
       
   883 	aDataStream>>url;
       
   884 	aOrganization.setLogoUrl(url);
       
   885 	
       
   886 	// Next one to be deserialized is name
       
   887 	str.clear();
       
   888 	aDataStream>>str;
       
   889 	aOrganization.setName(str);
       
   890 
       
   891 	// Next one to be deserialized is role
       
   892 	str.clear();
       
   893 	aDataStream>>str;
       
   894 	aOrganization.setRole(str);
       
   895 	
       
   896 	// Next one to be deserialized is title
       
   897 	str.clear();
       
   898 	aDataStream>>str;
       
   899 	aOrganization.setTitle(str);
       
   900 		
       
   901 	return aDataStream;
       
   902 	}
       
   903 
       
   904 
       
   905 /**
       
   906  * Serialization support for QtMobility::QContactPhoneNumber
       
   907  */
       
   908 QDataStream &operator<<( QDataStream &aDataStream, 
       
   909 	const QContactPhoneNumber &aPhoneNumber )
       
   910 	{
       
   911 	aDataStream<<aPhoneNumber.number();
       
   912 	aDataStream<<aPhoneNumber.subTypes();
       
   913 
       
   914 	return aDataStream;
       
   915 	}
       
   916 
       
   917 /**
       
   918  * Deserialization support for QtMobility::QContactPhoneNumber
       
   919  */
       
   920 QDataStream &operator>>( QDataStream &aDataStream, 
       
   921 		QContactPhoneNumber &aPhoneNumber )
       
   922 	{
       
   923 	QString str;
       
   924 	QStringList list;
       
   925 	
       
   926 	// First one to be deserialized is number
       
   927 	aDataStream>>str;
       
   928 	aPhoneNumber.setNumber(str);
       
   929 	
       
   930 	// Next one to be deserialized is subTypes
       
   931 	aDataStream>>list;
       
   932 	aPhoneNumber.setSubTypes(list);
       
   933 		
       
   934 	return aDataStream;
       
   935 	}
       
   936 
       
   937 
       
   938 /**
       
   939  * Serialization support for QtMobility::QContactPresence
       
   940  */
       
   941 QDataStream &operator<<( QDataStream &aDataStream, 
       
   942 	const QContactPresence &aPresence )
       
   943 	{
       
   944 	aDataStream<<aPresence.customMessage();
       
   945 	aDataStream<<aPresence.nickname();
       
   946 	aDataStream<<aPresence.presenceState();
       
   947 	aDataStream<<aPresence.presenceStateImageUrl();
       
   948 	aDataStream<<aPresence.presenceStateText();
       
   949 	aDataStream<<aPresence.timestamp();
       
   950 
       
   951 	return aDataStream;
       
   952 	}
       
   953 
       
   954 /**
       
   955  * Deserialization support for QtMobility::QContactPresence
       
   956  */
       
   957 QDataStream &operator>>( QDataStream &aDataStream, 
       
   958 		QContactPresence &aPresence )
       
   959 	{
       
   960 	QString str;
       
   961 	QUrl url;
       
   962 	QDateTime date;
       
   963 	
       
   964 	// First one to be deserialized is customMessage
       
   965 	aDataStream>>str;
       
   966 	aPresence.setCustomMessage(str);
       
   967 	
       
   968 	// Next one to be deserialized is nickname
       
   969 	str.clear();
       
   970 	aDataStream>>str;
       
   971 	aPresence.setNickname(str);
       
   972 	
       
   973 	// Next one to be deserialized is presenceState
       
   974 	int val;
       
   975 	aDataStream>>val;
       
   976 	QContactPresence::PresenceState state = (QContactPresence::PresenceState)val;
       
   977 	aPresence.setPresenceState(state);
       
   978 	
       
   979 	// Next one to be deserialized is presenceStateImageUrl
       
   980 	aDataStream>>url;
       
   981 	aPresence.setPresenceStateImageUrl(url);
       
   982 	
       
   983 	// Next one to be deserialized is presenceStateText
       
   984 	str.clear();
       
   985 	aDataStream>>str;
       
   986 	aPresence.setPresenceStateText(str);
       
   987 	
       
   988 	// Next one to be deserialized is timestamp
       
   989 	aDataStream>>date;
       
   990 	aPresence.setTimestamp(date);
       
   991 		
       
   992 	return aDataStream;
       
   993 	}
       
   994 
       
   995 
       
   996 /**
       
   997  * Serialization support for QtMobility::QContactThumbnail
       
   998  */
       
   999 QDataStream &operator<<( QDataStream &aDataStream, 
       
  1000 	const QContactThumbnail &aThumbnail )
       
  1001 	{
       
  1002 	aDataStream<<aThumbnail.thumbnail();
       
  1003 
       
  1004 	return aDataStream;
       
  1005 	}
       
  1006 
       
  1007 /**
       
  1008  * Deserialization support for QtMobility::QContactThumbnail
       
  1009  */
       
  1010 QDataStream &operator>>( QDataStream &aDataStream, 
       
  1011 		QContactThumbnail &aThumbnail )
       
  1012 	{
       
  1013 	QImage image;
       
  1014 	aDataStream>>image;
       
  1015 	aThumbnail.setThumbnail(image);
       
  1016 		
       
  1017 	return aDataStream;
       
  1018 	}
       
  1019 
       
  1020 
       
  1021 /**
       
  1022  * Serialization support for QtMobility::QContactTimestamp
       
  1023  */
       
  1024 QDataStream &operator<<( QDataStream &aDataStream, 
       
  1025 	const QContactTimestamp &aTimestamp )
       
  1026 	{
       
  1027 	aDataStream<<aTimestamp.created();
       
  1028 	aDataStream<<aTimestamp.lastModified();
       
  1029 
       
  1030 	return aDataStream;
       
  1031 	}
       
  1032 
       
  1033 /**
       
  1034  * Deserialization support for QtMobility::QContactTimestamp
       
  1035  */
       
  1036 QDataStream &operator>>( QDataStream &aDataStream, 
       
  1037 		QContactTimestamp &aTimestamp )
       
  1038 	{
       
  1039 	QDateTime date1, date2;
       
  1040 	
       
  1041 	// First one to be deserialized is created
       
  1042 	aDataStream>>date1;
       
  1043 	aTimestamp.setCreated(date1);
       
  1044 	
       
  1045 	// Next one to be deserialized is lastModified
       
  1046 	aDataStream>>date2;
       
  1047 	aTimestamp.setLastModified(date2);
       
  1048 		
       
  1049 	return aDataStream;
       
  1050 	}
       
  1051 
       
  1052 
       
  1053 /**
       
  1054  * Serialization support for QtMobility::QContactType
       
  1055  */
       
  1056 QDataStream &operator<<( QDataStream &aDataStream, 
       
  1057 	const QContactType &aType )
       
  1058 	{
       
  1059 	aDataStream<<aType.type();
       
  1060 	return aDataStream;
       
  1061 	}
       
  1062 
       
  1063 /**
       
  1064  * Deserialization support for QtMobility::QContactType
       
  1065  */
       
  1066 QDataStream &operator>>( QDataStream &aDataStream, 
       
  1067 		QContactType &aType )
       
  1068 	{
       
  1069 	QString str;
       
  1070 	aDataStream>>str;
       
  1071 	aType.setType(str);
       
  1072 	
       
  1073 	return aDataStream;
       
  1074 	}
       
  1075 
       
  1076 
       
  1077 /**
       
  1078  * Serialization support for QtMobility::QContactUrl
       
  1079  */
       
  1080 QDataStream &operator<<( QDataStream &aDataStream, 
       
  1081 	const QContactUrl &aUrl )
       
  1082 	{
       
  1083 	aDataStream<<aUrl.subType();
       
  1084 	aDataStream<<aUrl.url();
       
  1085 
       
  1086 	return aDataStream;
       
  1087 	}
       
  1088 
       
  1089 /**
       
  1090  * Deserialization support for QtMobility::QContactUrl
       
  1091  */
       
  1092 QDataStream &operator>>( QDataStream &aDataStream, 
       
  1093 		QContactUrl &aUrl)
       
  1094 	{
       
  1095 	QString str;
       
  1096 	
       
  1097 	// First one to be deserialized is subType
       
  1098 	aDataStream>>str;
       
  1099 	aUrl.setSubType(str);
       
  1100 	
       
  1101 	// Next one to be deserialized is url
       
  1102 	str.clear();
       
  1103 	aDataStream>>str;
       
  1104 	aUrl.setUrl(str);
       
  1105 		
       
  1106 	return aDataStream;
       
  1107 	}
       
  1108