Changed the common classes for location, events. Changed APIs for paged results. Added exporting to QContacts.
authorcgandhi <chandradeep.gandhi@sasken.com>
Tue, 06 Apr 2010 16:35:37 +0530
changeset 2 86af6c333601
parent 1 4b1e636e8a71
child 3 0446eb7b28aa
Changed the common classes for location, events. Changed APIs for paged results. Added exporting to QContacts. Fixed following bugs 2381 and 2382. Added documentation Doxyfile. Modified example_usage.h to show similar usage.
example/clientapi/Doxyfile
example/clientapi/example_usage.cpp
example/clientapi/smf/inc/common/SmfClientGlobal.h
example/clientapi/smf/inc/common/smfcomment/smfcomment.h
example/clientapi/smf/inc/common/smfcomment/smfcomment_p.h
example/clientapi/smf/inc/common/smfcontacts/smfcontact.h
example/clientapi/smf/inc/common/smfcontacts/smfcontact_p.h
example/clientapi/smf/inc/common/smfcontacts/smfgroup.h
example/clientapi/smf/inc/common/smfcontacts/smfgroup_p.h
example/clientapi/smf/inc/common/smfcontacts/smfpost.h
example/clientapi/smf/inc/common/smfcontacts/smfpost_p.h
example/clientapi/smf/inc/common/smfdes.h
example/clientapi/smf/inc/common/smfevent/smfevent.h
example/clientapi/smf/inc/common/smfevent/smfevent_p.h
example/clientapi/smf/inc/common/smfglobal.h
example/clientapi/smf/inc/common/smfmusic/smfalbum.h
example/clientapi/smf/inc/common/smfmusic/smfalbum_p.h
example/clientapi/smf/inc/common/smfmusic/smfartists.h
example/clientapi/smf/inc/common/smfmusic/smfartists_p.h
example/clientapi/smf/inc/common/smfmusic/smfevent.h
example/clientapi/smf/inc/common/smfmusic/smflyrics.h
example/clientapi/smf/inc/common/smfmusic/smflyrics_p.h
example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint.h
example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint_p.h
example/clientapi/smf/inc/common/smfmusic/smfmusicprofile.h
example/clientapi/smf/inc/common/smfmusic/smfmusicprofile_p.h
example/clientapi/smf/inc/common/smfmusic/smfmusicrating.h
example/clientapi/smf/inc/common/smfmusic/smfmusicrating_p.h
example/clientapi/smf/inc/common/smfmusic/smfplaylist.h
example/clientapi/smf/inc/common/smfmusic/smfplaylist_p.h
example/clientapi/smf/inc/common/smfmusic/smfsubtitle.h
example/clientapi/smf/inc/common/smfmusic/smfsubtitle_p.h
example/clientapi/smf/inc/common/smfmusic/smfsubtitlesearchfilter.h
example/clientapi/smf/inc/common/smfmusic/smftrackinfo.h
example/clientapi/smf/inc/common/smfmusic/smftrackinfo_p.h
example/clientapi/smf/inc/common/smfmusic/smfvenue.h
example/clientapi/smf/inc/common/smfpictures/smfcomment.h
example/clientapi/smf/inc/common/smfpictures/smfpicture.h
example/clientapi/smf/inc/common/smfpictures/smfpicture_p.h
example/clientapi/smf/inc/common/smfplace/smfplace.h
example/clientapi/smf/inc/common/smfplace/smfplace_p.h
example/clientapi/smf/inc/smfclient/smfclient.h
example/clientapi/smf/inc/smfclient/smfcontactfetcher.h
example/clientapi/smf/inc/smfclient/smfgallery.h
example/clientapi/smf/inc/smfclient/smfmusic.h
example/clientapi/smf/inc/smfclient/smfpostprovider.h
example/clientapi/smf/inc/smfclient/smfprovider.h
example/clientapi/smf/inc/smfplugins/base/smfpluginbase.h
example/clientapi/smf/inc/smfplugins/base/smfproviderbase.h
example/clientapi/smf/inc/smfplugins/base/smfproviderbase_p.h
example/clientapi/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h
example/clientapi/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h
example/clientapi/smf/inc/smfplugins/smfprovider/smfproviderbase.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/Doxyfile	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,279 @@
+# Doxyfile 1.5.5
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = SMF
+PROJECT_NUMBER         = 
+OUTPUT_DIRECTORY       = doc
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+TYPEDEF_HIDES_STRUCT   = NO
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = NO
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = smf example_usage.cpp
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.vhd \
+                         *.vhdl
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = YES
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = YES
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
--- a/example/clientapi/example_usage.cpp	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/example_usage.cpp	Tue Apr 06 16:35:37 2010 +0530
@@ -1,57 +1,127 @@
-#include <smf/smfprovider.h>
-#include <smf/smfgallery.h>
-#include <smf/smfcontact.h>
-#include <smf/smfpostprovider.h>
-#include <smf/smffcontactfetcher.h>
-#include <smf/smfmusic.h>
+#include "smfglobal.h"
+#include "smfclient.h"
+#include "smfprovider.h"
+#include "smfgallery.h"
+#include "smfcontact.h"
+#include "smfpostprovider.h"
+#include "smfcontactfetcher.h"
+#include "smfmusic.h"
+#include "smfpicture.h"
+#include "smftrackinfo.h"
+#include "smfmusicprofile.h"
+#include "smflyrics.h"
+#include <qalgorithms.h>
+#include "qtcontacts.h"
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+using namespace QtMobility;
 
+class MyAppView //: public QAbstractItemView
+	{
+public:
+	void add(QImage pic);
+	void add(SmfTrackInfo trackInfo);
+	void add(QContact qc);
+	void setPicture(QImage image);
+	void setTitle(QString cap);	
+	void setIcon(QImage image);
+	void setDescription(QString desc);
+	void setProvider(SmfProvider p);
+	void setLyricsData(SmfLyrics l);
+	};
+
+
+class MyApplication :public QObject
+	{
+	Q_OBJECT
+	
+public slots:
+	void displayGallery();
+	void showPicsSlot(SmfPictureList* pics, QString err);
+	void uploadPicture(QImage* picture, QList<SmfGallery> galleries);
+	void uploaded(bool success);
+
+	void displayFriends();
+	void showlist(SmfContactList* friendsList);
+	void postUpdate();
+	void showPosts(SmfPostList* posts, QString err);
+
+	void getMusic(SmfTrackInfo currTrack);
+	void showTrackSearch(SmfTrackInfoList* songs);
+	void showStore(SmfProviderList* stores);
+	void updateCurrentPlaying(QList<SmfMusicSearch> musicServices, SmfTrackInfo currTrack);
+	void displayLyrics(SmfTrackInfo currTrack);
+	void showLyrics(SmfLyricsList* list);
+
+private:
+	MyAppView* m_view;
+	SmfGallery* m_smfgl;
+	SmfContactFetcher* m_smfcf;
+	SmfMusicService* m_smfms;
+	QList<SmfContact> m_myfrndz;
+	};
 /** 1. Display a gallery on the screen for some remote service.
  * assume m_view is some gallery view object in the application.*/
 void MyApplication::displayGallery()
 	{
 	// Some common interface for finding implementations.
-	QList<SmfGallery> galleries = Smf::GetServices("org.symbian.smf.gallery\0.2");
+	QList<SmfProvider>* galleries = SmfClient::GetServices("org.symbian.smf.gallery\0.2");
 
 	// We will use the first one now
-	SmfGallery myGallery = galleries[0];
+	SmfProvider smfp = galleries->value(0);
+	SmfGallery* myGallery = new SmfGallery(&smfp);
 
 	// Adjust our view to show where these pictures came from
-	m_view.setIcon(myGallery.serviceIcon());
-	m_view.setProvder(myGallery.serviceName());
-	m_view.setDescription(myGallery.description());
+	QImage imge = smfp.serviceIcon();
+	QString desc = smfp.description();
+	QString name = smfp.serviceName();
+	m_view->setIcon(imge);
+	m_view->setProvider(smfp);
+	m_view->setDescription(desc);
 
 	/**
 	 * Asynchrnous request to fetch the pictures.
 	 * The picturesAvailable() signal is emitted 
 	 * with SmfPictureList once the pictures have arrived.
 	 */
-	myGallery.pictures();
-	QObject::connect(myGallery,SIGNAL(picturesAvailable(SmfPictureList*, QString, int)),this,SLOT(showPicsSlot(SmfPictureList*, QString)));
+	myGallery->pictures();
+	connect(myGallery,SIGNAL(picturesAvailable(SmfPictureList*, QString, SmfResultPage )),
+			SLOT(showPicsSlot(SmfPictureList*, QString)));
+	
+	m_smfgl = myGallery;
 	}
-}
+
 void MyApplication::showPicsSlot(SmfPictureList* pics, QString err)
 	{
 	//check err string if there is any error
-
+	if(err.compare("Err")) return;
 	//if no error
-	foreach(SmfPicture* pic, pics) {
-		m_view.add(pic); // do something with the picture in this gallery
+	foreach(SmfPicture pic, *pics) {
+		m_view->add(pic.picture() ); // do something with the picture in this gallery
 	}
 	}
 
 /** 2. Upload a picture captured by the user to some selection of galeries.*/
-void MyApplication::uploadPicture(QImage picture, QList<SmfGallery> galleries)
+void MyApplication::uploadPicture(QImage* picture, QList<SmfGallery> galleries)
 	{
 	/**
 	 * When uploading is finished we can check the success of the uploading
 	 */	
-	QObject::connect(myGallery,SIGNAL(uploadFinished(bool)),this,SLOT(uploaded(bool)));
+	QObject::connect(m_smfcf,SIGNAL(uploadFinished(bool)),SLOT(uploaded(bool)));
+	SmfPicture*  smfPic = new SmfPicture(*picture);
 	// The list could be from a selection of galleries chosen by the user,
 	// think multiple TweetDeck accounts?
-	foreach(SmfGallery gallery, galleries) {
-		gallery.upload(picture);
+	foreach(SmfGallery gallery, galleries)
+		{
+		gallery.upload(smfPic);
+		}
 	}
-	}
+
+/**
+ * Slot to catch the uploading finished event
+ */
 void MyApplication::uploaded(bool success)
 	{
 	if(!success)
@@ -68,13 +138,17 @@
 void MyApplication::displayFriends()
 	{
 	// Some common interface for finding implementations.
-	QList<SmfContactFetcher> contactFetcherList = Smf::GetServices("org.symbian.smf.contact.fetcher\0.2");
-	//Request friend list,
-	//The friendsListAvailable() signal
+	QList<SmfProvider>* contactFetcherList = SmfClient::GetServices("org.symbian.smf.contact.fetcher\0.2");
+	SmfProvider smfp = contactFetcherList->value(0);
+	SmfContactFetcher* smfcf = new SmfContactFetcher(&smfp);
+	
+	//Request friend list, the friendsListAvailable() signal
 	//is emitted with SmfContactList once data is arrived.
-	QObject::Connect(contactFetcherList[0],SIGNAL(friendsListAvailable(SmfContactList*, QString, int)),
-			this,SLOT(showlist(SmfContactList*));
-	fetcher.friends();
+	QObject::connect(smfcf,SIGNAL(friendsListAvailable(SmfContactList*, QString, SmfResultPage )),
+			SLOT(showlist(SmfContactList*)));
+	smfcf->friends();
+	
+	m_smfcf = smfcf;
 	}
 
 void MyApplication::showlist(SmfContactList* friendsList)
@@ -82,15 +156,17 @@
 
 	// Adjust our view to show where these pictures came from
 	//display service name description and the logo
-	m_view.setIcon( myFetcher.serviceIcon() );
-	m_view.setProvider( myFetcher.serviceName() );
-	m_view.setDescription( myFetcher.description() );
+	m_view->setIcon( (m_smfcf->getProvider())->serviceIcon() );
+	m_view->setDescription( (m_smfcf->getProvider())->description() );
 
 	//now display the images
-	foreach(SmfContact* contact, friendsList) {
-		QImage pic = contact.value("Avatar");
-		m_view.setPicture(pic);
-		m_view.setTitle(contact.value("Name"));
+	foreach(SmfContact contact, *friendsList) {
+		QVariant data = contact.value("Avatar"); 
+		QImage pic = data.value<QImage>();
+		QContact qc;
+		contact.convert(qc);
+		m_view->add(qc);
+		m_myfrndz.append(contact);
 	}
 	}
 /**
@@ -99,66 +175,76 @@
 void MyApplication::postUpdate()
 	{
 	// Some common interface for finding implementations.
-	QList<SmfPostProvider> postServices = Smf::GetServices("org.symbian.smf.contact.posts\0.2");
+	QList<SmfProvider>* postServices = SmfClient::GetServices("org.symbian.smf.contact.posts\0.2");
 
 	//let us use the first one
-	SmfPostProvider myPostServer = postServices[ 0 ];
+	QString servName = postServices->value(0).serviceName();
+	if(!servName.compare("Facebook.com")) return;
+	SmfProvider smfp = postServices->value(0);
+	SmfPostProvider* myPostServer = new SmfPostProvider(&smfp);
 
 	//Adjust our view to show where these posts came from (e.g. tweets from twitter)
 	//display service name description and the logo
-	m_view.setIcon( myPostServer.serviceIcon() );
-	m_view.setProvider( myPostServer.serviceName() );
-	m_view.setDescription( myPostServer.description() );
+	m_view->setIcon((myPostServer->getProvider())->serviceIcon() );
+	m_view->setProvider(myPostServer->getProvider());
+	m_view->setDescription((myPostServer->getProvider())->description() );
 
-	SmfPost reply = new SmfPost(sampleString,samplmage, sampleUrl);
+	SmfPost reply("this is a text post", this);
 	//post my udpate to be visible to all, connect to updatePostFinished()
 	// signal of SmfPostProvider to track the success
-	myPostServer.updatePost(reply);
+	SmfContact frnd(m_myfrndz.value(0));
+	myPostServer->postDirected(reply,frnd);
 
 	//Asynchronously get all posts to me in my profle (e.g. twits from all friends)
 	//connect to postsAvailable to show the post
-	postServices.getPosts();
+	myPostServer->posts();
 
-	QObject::Connect(myPostServer,SIGNAL(postsAvailable(SmfPostList*, QString, int)),this,SLOT(showPosts(SmfPostList*, QString)));
+	QObject::connect(myPostServer,
+			SIGNAL(postsAvailable(SmfPostList*, QString, SmfResultPage )),
+			SLOT(showPosts(SmfPostList*, QString)));
 	}
-void MyApplication::showPosts(SmfPostList* posts, QString err)
+void MyApplication::showPosts(SmfPostList* posts, QString /*err*/)
 	{
 	//Show the first post  
-	m_view.setPostData(posts->at(0));
+	SmfPost post = posts->at(0);
+	m_view->setDescription( post.toPlainText() );
 	}
 /**
  * 5. This is an example of getting song recommendations from a social netowrking sites
  */
-void MyApplication::getMusic()
+void MyApplication::getMusic(SmfTrackInfo currTrack)
 	{
 	// Some common interface for finding implementations.
-	QList<SmfMusicSearch> musicServices = Smf::GetServices("org.symbian.smf.music\0.2");
+	QList<SmfProvider>* smfProList = SmfClient::GetServices("org.symbian.smf.music\0.2");
+	SmfProvider smfp = smfProList->value(0);
+	SmfMusicSearch* mServer = new SmfMusicSearch(&smfp);
 
-	//let us use the first one
-	SmfMusicSearch mServer = musicServices.at(0);
-	QObject::Connect(mServer,SIGNAL(trackSearchAvailable(SmfTrackInfoList*, QString,int)),this,SLOT(showTrackSearch(SmfTrackInfoList*)));
-	QObject::Connect(mServer,SIGNAL(storeSearchAvailable(SmfProviderList*, QString,int)),this,SLOT(showStoreSearch(SmfProviderList*)));
+	QObject::connect(mServer,SIGNAL(trackSearchAvailable(SmfTrackInfoList*, QString,SmfResultPage )),this,SLOT(showTrackSearch(SmfTrackInfoList*)));
+	QObject::connect(mServer,SIGNAL(storeSearchAvailable(SmfProviderList*, QString,SmfResultPage )),this,SLOT(showStoreSearch(SmfProviderList*)));
 	//search songs similar to currently playing,
 	//connect to trackSearchAvailable signal to get the result
-	mServer.recommendations(currTrack);
+	mServer->recommendations(currTrack);
 	//display to the user
-	m_view.setIcon( mServer.serviceIcon() );
-	m_view.setProvider( mServer.serviceName() );
-	m_view.setDescription( mServer.description() );
+	m_view->setIcon( mServer->getProvider()->serviceIcon() );
+	m_view->setProvider( mServer->getProvider());
+	m_view->setDescription( mServer->getProvider()->description() );
 
 
 
 	}
 void MyApplication::showTrackSearch(SmfTrackInfoList* songs)
 	{
-	foreach(SmfTrackInfo* track, songs){
-		m_view.add(track);
+	foreach(SmfTrackInfo track, *songs){
+		m_view->add(track);
 	}
+	QList<SmfProvider>* smfProList = SmfClient::GetServices("org.symbian.smf.client.music.search\0.2");
+	SmfProvider smfp = smfProList->value(0);
+	SmfMusicSearch* mServer = new SmfMusicSearch(&smfp);
 	//allow user to select a track and get purchase links
 	//connect to showStoreSearch signal to display the stores for that track
-	mServer.stores(selectedTrack);
+	mServer->stores(songs->value(0));
 	}
-void MyApplication::showStoreSearch(SmfProviderList* stores)
+void MyApplication::showStore(SmfProviderList* /*stores*/)
 	{
 	//show stores
 	}
@@ -175,18 +261,21 @@
 
 void MyApplication::displayLyrics(SmfTrackInfo currTrack)
 	{
+
 	// Some common interface for finding implementations.
-	SmfLyricsService lyricsService = Smf::GetServices("org.symbian.smf.music.lyrics\0.2","lyricsfly.com");
-	QObject::connect(lyricsService,SIGNAL(lyricsAvailable(SmfLyricsList*, QString, int)),this,SLOT(showLyrics(SmfLyricsList*));
+	QList<SmfProvider>* smfProList = SmfClient::GetServices("org.symbian.smf.music.lyrics\0.2","lyricsfly.com");
+	SmfProvider smfp = smfProList->value(0);
+	SmfLyricsService* lyricsService = new SmfLyricsService(&smfp);
+	QObject::connect(lyricsService,SIGNAL(lyricsAvailable(SmfLyricsList*, QString, SmfResultPage )),this,SLOT(showLyrics(SmfLyricsList*)));
 
 	//Request to get the lyrics
 	//lyricsAvailable() signal of SmfLyricsService is emitted when lyrics is available
-	lyricsService.lyrics(currTrack);
+	lyricsService->lyrics(currTrack);
 
 	}
 void MyApplication::showLyrics(SmfLyricsList* list)
 	{
 	//now display the latest edited lyrics
-	qSort(list->begin(),list->end(),caseCompareTimeMoreThan);
-	m_view.setLyricsData(list->at(0));
+	//qSort(list->begin(),list->end(),caseInsensitiveLessThan);
+	m_view->setLyricsData(list->at(0));
 	}
--- a/example/clientapi/smf/inc/common/SmfClientGlobal.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/SmfClientGlobal.h	Tue Apr 06 16:35:37 2010 +0530
@@ -16,18 +16,21 @@
 *
 */
 
-#ifndef SMFCLIENTDEFS_H_
-#define SMFCLIENTDEFS_H_
+#ifndef SMFCLIENTGLOBAL_H_
+#define SMFCLIENTGLOBAL_H_
 
- #include <QtCore/QtGlobal>
+#include <QtCore/QtGlobal>
+
 
- #ifdef SMFCLIENT_LIBRARY
- #  define SMFCLIENT_EXPORT Q_DECL_EXPORT
- #else
- #  define SMFCLIENT_EXPORT Q_DECL_IMPORT
- #endif
+#ifdef SMFCLIENT_LIBRARY
+#  define SMFCLIENT_EXPORT Q_DECL_EXPORT
+#else
+#  define SMFCLIENT_EXPORT Q_DECL_IMPORT
+#endif
+
 /**
- * To be designed later
- */
+* To be designed later
+*/
 #define SMF_GETSERVICES(INTERFACE,INTERFACESTRING) ;
-#endif /* SMFCLIENTDEFS_H_ */
+
+#endif /* SMFCLIENTGLOBAL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcomment/smfcomment.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The comment class represents a comment (on a picture or a music track etc)
+ *
+ */
+
+#ifndef SMFCOMMENT_H_
+#define SMFCOMMENT_H_
+
+#include <QDateTime>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfCommentPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The comment class represents a comment (on a picture or a music track etc)
+ */
+class SMFCLIENT_EXPORT SmfComment : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object 
+	 */
+	SmfComment( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfComment( const SmfComment &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfComment( );
+	
+	/**
+	 * Method to get the comment text
+	 * @return The comment text
+	 */
+	QString text( ) const;
+	
+	/**
+	 * Method to get the comment time stamp
+	 * @return The comment time stamp value
+	 */
+	QDateTime timeStamp( ) const;
+	
+	/**
+	 * Method to get the id of the comment
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the comment text
+	 * @param aText The comment text to be set
+	 */
+	void setText( const QString &aText );
+	
+private:
+	QSharedDataPointer<SmfCommentPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfComment &aComment );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfComment &aComment );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfComment object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aComment The SmfComment object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfComment &aComment );
+
+/**
+ * Method for Internalization. Reads a SmfComment object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aComment The SmfComment object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfComment &aComment);
+
+#endif /* SMFCOMMENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcomment/smfcomment_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfComment class
+ *
+ */
+
+#ifndef SMFCOMMENT_P_H_
+#define SMFCOMMENT_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfCommentPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfCommentPrivate( ) { m_text.clear(); m_commentId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfCommentPrivate( const SmfCommentPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_text ( aOther.m_text ), 
+		m_timeStamp ( aOther.m_timeStamp ),
+		m_commentId ( aOther.m_commentId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfCommentPrivate( );
+  
+	QString m_text;			// comment text
+	QDateTime m_timeStamp;	// comment time stamp
+	QString m_commentId;
+	
+};
+
+#endif /* SMFCOMMENT_P_H_ */
--- a/example/clientapi/smf/inc/common/smfcontacts/smfcontact.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfcontact.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,147 +1,135 @@
-/**************************************************************************************************
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-* Manasij Roy
-* Description:
-* Interface spefication for profile of a contact in a social networking site
-*
-/*************************************************************************************************/
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The contact class represents a social contact
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
 
-#ifndef SMFPROFILE_H
-#define SMFPROFILE_H
+#ifndef SMFCONTACT_H_
+#define SMFCONTACT_H_
 
-#include <QObject>
-
-//From Qt mobility project
 #include "qtcontacts.h"
-#include "../common/SmfClientGlobal.h"
-#include "smfprovider.h"
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+using namespace QtMobility;
+
+class SmfContactPrivate;
+
 /**
- * Interface for a contact from a service provider. This class
- * provides basic functionality to allow applications to obtain details of a
- * contact (self or friends) in a social networking service.
+ * @ingroup smf_common_group
+ * The contact class represents a social contact
  * 
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- * Note this class has dependencies on QtMobility project
+ * Note: This class has dependencies on QtMobility project
  */
 class SMFCLIENT_EXPORT SmfContact : public QObject
-{
-  Q_OBJECT
+	{
+	Q_OBJECT
 
 public:
-  /** 
-   * Constructs SmfContact with base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-  SmfContact(SmfProvider* baseProvider = 0);
-  ~SmfContact();
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfContact( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfContact( const SmfContact &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfContact( );
+	
+public slots:
+	/**
+	 * Method to get the available sub fields for contacts.
+	 * The following are the available sub types of a contact
+	 *   QtMobility::QContactAddress		Address;
+	 *   QtMobility::QContactAnniversary	Anniversary;
+	 *   QtMobility::QContactAvatar			Avatar;
+	 *   QtMobility::QContactBirthday		Birthday;
+	 *   QtMobility::QContactId				ContactId;
+	 *   QtMobility::QContactEmailAddress	EmailAddress;
+	 *   QtMobility::QContactGender			Gender;
+	 *   QtMobility::QContactGeolocation	Geolocation;
+	 *   QtMobility::QContactGuid			Guid;
+	 *   QtMobility::QContactName			Name;
+	 *   QtMobility::QContactNickname		Nickname;
+	 *   QtMobility::QContactNote			Note;
+	 *   QtMobility::QContactOnlineAccount	OnlineAccount;
+	 *   QtMobility::QContactOrganization	Organization;
+	 *   QtMobility::QContactPhoneNumber	PhoneNumber;
+	 *   QtMobility::QContactTimestamp		Timestamp;
+	 *   QtMobility::QContactType			Type;
+	 *   QtMobility::QContactUrl			Url;
+	 * @return The Available sub fields for this contact
+	 */
+	QStringList subTypes( ) const;
+	
+	/**
+	 * Method to convert an SmfContact to a QContact
+	 * Changes made to the returned QContact will not be reflected 
+	 * in its parent SmfContact object
+	 * @param aContact QContact corresponding to SmfContact 
+	 */
+	void convert( QContact &aContact ) const;
+	
+	/**
+	 * Method to get the value of a sub field for this contact
+	 * @param aSubType The sub field type 
+	 * @return The value of the sub field subType
+	 * @see subTypes()
+	 */
+	QVariant value( const QString& aSubType ) const;
+	
+private:
+	QSharedDataPointer<SmfContactPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfContact &aContact );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfContact &aContact );
+	
+	};
 
 
-  /**
-   * Returns the available sub fields for contacts.
-    * The following subtypes are available,-
-    * QString userIdInProvider;
-    * QtMobility::QContactAddress Adress;
-    * QtMobility::QContactAnniversary Anniversary;
-    * QtMobility::QContactAvatar  Avatar;
-    * QtMobility::QContactBirthday Birthday;
-    * QtMobility::QContactEmailAddress EmailAddress;
-    * QtMobility::QContactGender Gender;
-    * QtMobility::QContactGeolocation Geolocation;
-    * QtMobility::QContactGuid Guid;
-    * QtMobility::QContactName Name;
-    * QtMobility::QContactNickname Nickname;
-    * QtMobility::QContactNote Note;
-    * QtMobility::QContactOnlineAccount OnlineAccount;
-    * QtMobility::QContactOrganization  Organization;
-    * QtMobility::QContactPhoneNumber PhoneNumber;
-    * QtMobility::QContactTimestamp Timestamp;
-    * QtMobility::QContactType Type;
-    * QtMobility::QContactUrl  Url;
-   */
-  virtual QStringList subTypes() const;
-  
-  //APIs to get base provider info (SmfProvider)
-  
-  /**
-   * Gets the base provider info, note setting the provider is not permitted here
-   */
-  virtual SmfProvider* getProvider() = 0;
-  
-public slots:
+/**
+ * Method for Externalization. Writes the SmfContact object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aContact The SmfContact object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfContact &aContact );
 
 /**
- * Gets value of the sub field for any contact.
- * @param  subType sub field type 
- * @param info value of the sub field subType
- * @see subTypes()
- * The following subtypes are available,-
- * QString userIdInProvider;
- * QtMobility::QContactAddress Adress;
- * QtMobility::QContactAnniversary Anniversary;
- * QtMobility::QContactAvatar  Avatar;
- * QtMobility::QContactBirthday Birthday;
- * QtMobility::QContactEmailAddress EmailAddress;
- * QtMobility::QContactGender Gender;
- * QtMobility::QContactGeolocation Geolocation;
- * QtMobility::QContactGuid Guid;
- * QtMobility::QContactName Name;
- * QtMobility::QContactNickname Nickname;
- * QtMobility::QContactNote Note;
- * QtMobility::QContactOnlineAccount OnlineAccount;
- * QtMobility::QContactOrganization  Organization;
- * QtMobility::QContactPhoneNumber PhoneNumber;
- * QtMobility::QContactTimestamp Timestamp;
- * QtMobility::QContactType Type;
- * QtMobility::QContactUrl  Url;
+ * Method for Internalization. Reads a SmfContact object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aContact The SmfContact object to be internalized
+ * @return reference to the stream
  */
-  virtual void value(const QString& subType,const QVariant& info); //for any contact
-  
-  /**
-   * Sets the value of the sub field for self contact
-   * @param  key sub field type 
-   * @param value value to be set for  sub field key
-   * @return success of the set
-   * @see subTypes()
-   */
-  virtual bool setValue( const QString & key, const QVariant & value );//for self contact only
-	 
-  
-signals:
-/**
- * Emitted when value of self contact changes.
- * @param key the key which is changed
- */
-  void detailsUpdated(const QString& key); //for setvalue on self contact
-  
-private:
-  /**
-   * Conatact details
-   */
-  QVariantMap m_details;
-	QString m_caption;
-	 /**
-	 * Externalization
-	 */
-};
-	/**
-	 * Externalization
-	 */
-	QDataStream &operator<<(QDataStream &, const SmfContact&);
-	/**
-	 * Internalization
-	 */
-QDataStream &operator>>(QDataStream &, SmfContact&);
-SMF_GETSERVICES(SmfContact, "org.symbian.smf.client.contact")
-#endif // SMFPROFILE_H
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfContact &aContact );
+
+#endif /* SMFCONTACT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfcontact_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfContact class
+ *
+ */
+
+#ifndef SMFCONTACT_P_H_
+#define SMFCONTACT_P_H_
+
+#include <QSharedData>
+
+using namespace QtMobility;
+
+class SmfContactPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfContactPrivate( ) { m_details.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfContactPrivate( const SmfContactPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_details ( aOther.m_details )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfContactPrivate( );
+  
+	QVariantMap	m_details;// contact details
+	
+};
+
+#endif /* SMFCONTACT_P_H_ */
--- a/example/clientapi/smf/inc/common/smfcontacts/smfgroup.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfgroup.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,63 +1,107 @@
 /**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-* Manasij Roy
-* Description:
-* Interface spefication for smf service provider
-*
-*/
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The group class represents an instance of a group as per SN site terminolgy
+ *
+ */
 
 #ifndef SMFGROUP_H_
 #define SMFGROUP_H_
 
-#include "SmfClientGlobal.h"
-class SmfContact;
-//List of SmfContacts
-typedef QList<SmfContact> SmfContactList;
+#include <smfcontact.h>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfGroupPrivate;
+
+
 /**
- * class for a group in social network 
+ * @ingroup smf_common_group
+ * The group class represents an instance of a group as per SN site terminolgy
  */
 class SMFCLIENT_EXPORT SmfGroup : public QObject
 	{
 	Q_OBJECT
 public:
+	/**
+	 * Constructor with default argument
+	 * @param list The list of members in the group
+	 */
+	SmfGroup( QList<SmfContact>* list = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfGroup( const SmfGroup &aOther );
 	
 	/**
-	 * Constructs a group with list of contacts
+	 * Destructor
 	 */
-	SmfGroup(SmfContactList* list=0);
+	~SmfGroup( );
+	
+public slots:
 	/**
-	 *Returns list of members in the group
-	 *@return list of members 
+	 * Method to get the list of members in the group
+	 * @return The list of members in the group
 	 */
-	SmfContactList* members()
-		{
-		return m_members;
-		}
+	QList<SmfContact> members( ) const;
+	
+	/**
+	 * Method to get the name of the group
+	 * @return The name of the group
+	 */
+	QString name( ) const;
 	
 	/**
-	 * Sets the group members
-	 * @param members list of members to be added to the group 
+	 * Method to get the id of the group
+	 * @return The ID value 
 	 */
-	void setMembers(SmfContactList& members);
+	QString id( ) const;
+	
 private:
-	SmfContactList* m_members;
+	QSharedDataPointer<SmfGroupPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfGroup &aGroup );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfGroup &aGroup );
+	
 	};
+
+
 /**
- * Externalization
+ * Method for Externalization. Writes the SmfGroup object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aGroup The SmfGroup object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator<<(QDataStream &, const SmfGroup &);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfGroup &aGroup );
+
 /**
- * Internalization
+ * Method for Internalization. Reads a SmfGroup object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aGroup The SmfGroup object to be internalized
+ * @return reference to the stream
  */
-QDataStream &operator>>(QDataStream &, SmfGroup &);
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfGroup &aGroup);
+
 #endif /* SMFGROUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfgroup_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfGroup class
+ *
+ */
+
+#ifndef SMFGROUP_P_H_
+#define SMFGROUP_P_H_
+
+#include <smfcontact.h>
+#include <QSharedData>
+
+class SmfGroupPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfGroupPrivate( ) { m_members = NULL; m_groupName.clear(); m_groupId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfGroupPrivate( const SmfGroupPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_members ( aOther.m_members ), 
+		m_groupName ( aOther.m_groupName ),
+		m_groupId ( aOther.m_groupId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfGroupPrivate( );
+  
+	QList<SmfContact> *m_members;	// members in the group
+	QString m_groupName;
+	QString m_groupId;
+	// Other details to be added
+};
+
+
+#endif /* SMFGROUP_P_H_ */
--- a/example/clientapi/smf/inc/common/smfcontacts/smfpost.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfpost.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,75 +1,153 @@
 /**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-* Manasij Roy
-* Description:
-* Interface spefication for sfm service provider
-*
-*/
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The post class represents an instance of a post to a SN site
+ *
+ */
 
 #ifndef SMFPOST_H_
 #define SMFPOST_H_
-#include "SmfClientGlobal.h"
+
+#include <QImage>
+#include <QUrl>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <QTextDocument>
+#include <smfclientglobal.h>
+
+class SmfPostPrivate;
+
+
 /**
- * class for post, later may be we need to add media. 
- * Post consists of a title and description
+ * @ingroup smf_common_group
+ * The post class represents an instance of a post to a SN site
  */
-
-class SMFCLIENT_EXPORT SmfPost : public QObject
+class SMFCLIENT_EXPORT SmfPost : public QTextDocument
 	{
 	Q_OBJECT
 public:
 	/**
-	 * Constructs a post 
+	 * Constructor with default argument
+	 * @param text Text
+	 * @param aParent The parent object
+	 */
+	SmfPost( QString text,QObject *aParent = 0 );
+	
+	/**
+	 * Constructor
+	 * @param aText The post's text
+	 * @param aImage The post's image
+	 * @param aUrl The post's url
 	 */
-	SmfPost(QObject* provider=0);
+	SmfPost( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl );
+
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPost( const SmfPost &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPost( );
 	
 	/**
-	 * Constructs a post with text,image and url
+	 * Method to get the title of the post
+	 * @return The post's title
 	 */
-	SmfPost(QString text,QPixmap image, QString url);
-	~SmfPost();
+	QString title( ) const;
+	
+	/**
+	 * Method to get the description of the post
+	 * @return The post's description
+	 */
+	QString description( ) const;
 	
 	/**
-	 * Gets post title
+	 * Method to get the image of the post
+	 * @return The post's image
 	 */
-	QString* getTitle();
+	QImage image( ) const;
 	
 	/**
-	 * Gets post text
+	 * Method to get the url of the post
+	 * @return The post's url
 	 */
-	QString* getDescription();
+	QUrl url( ) const;
+	
+	/**
+	 * Method to get the id of the post
+	 * @return The ID value 
+	 */
+	QString id( ) const;
 	
 	/**
-	 * Sets post title
+	 * Method to set the title of the post
+	 * @param aTitle The post's new title
 	 */
-	void setTitle(QString* title);
+	void setTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set the description of the post
+	 * @param aDesc The post's new description
+	 */
+	void setDescription( const QString &aDesc );
+	
+	/**
+	 * Method to set the image of the post
+	 * @param aPic The post's image
+	 */
+	void setImage( const QImage& aPic );
 	
 	/**
-	 * Sets post text
+	 * Method to set the url of the post
+	 * @param aUrl The post's url
 	 */
-	void setDescription(QString* desc);
+	void setUrl( QUrl& aUrl );
+	
+private:
+	QSharedDataPointer<SmfPostPrivate> d;
 
-private:
-	QString m_text;
-	QPixmap m_image;
-	QString m_url;
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPost &aPost );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPost &aPost );
+	
 	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfPost&);
+
+
 /**
- * Internalization
+ * Method for Externalization. Writes the SmfPost object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPost The SmfPost object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator>>(QDataStream &, SmfPost&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPost &aPost );
+
+/**
+ * Method for Internalization. Reads a SmfPost object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPost The SmfPost object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPost &aPost);
+
 #endif /* SMFPOST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfpost_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPost class
+ *
+ */
+
+#ifndef SMFPOST_P_H_
+#define SMFPOST_P_H_
+
+#include <QSharedData>
+
+class SmfPostPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPostPrivate( ) { m_title.clear(); m_desc.clear(); m_url.clear(); m_postId.clear(); }
+	
+	/**
+	 * Constructor
+	 */
+	SmfPostPrivate( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl ) 
+		{
+		m_title = aTitle; 
+		m_desc = aDesc;
+		m_image = aImage;
+		m_url = aUrl;
+		m_postId.clear();
+		}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPostPrivate( const SmfPostPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_title ( aOther.m_title ), 
+		m_desc ( aOther.m_desc ),
+		m_image ( aOther.m_image ),
+		m_url ( aOther.m_url ),
+		m_postId ( aOther.m_postId )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPostPrivate( );
+  
+	QString m_title;	// title
+	QString m_desc;		// description
+	QImage m_image;		// image
+	QUrl m_url;			// url
+	QString m_postId;	// post's unique Id
+	
+};
+
+#endif /* SMFPOST_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfdes.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Intro Page
+ *
+ * @ref smf_high_level_design
+ */
+
+/**
+ * @mainpage SMF (Social Mobile Framework Interfaces)
+ * @defgroup smf_high_level_design SMF high level design
+ * 
+ * Social Mobile Framework is a application level framework which allows Qt Applications
+ * use the common web APIs to perform social web activities. 
+ * 
+ * Product name is "SMF"
+ * 
+ * For details please refer to http://developer.symbian.org/wiki/index.php/Social_Mobile_Framework
+ * 
+ * @section smf_interfaces SMF Interfaces
+ * 
+ * There are two sets of interfaces - 
+ * 		@subsection smf_client_interfaces Client Interfaces
+ * 				- Client Applications (e.g. Media Player, Contacts, Game) uses these APIs to access SMF. see @ref smf_client_group 
+ * 
+ * 		@subsection smf_plugin_interfaces Plugin Interfaces
+ * 				- Service Providers (e.g. Facebook, Flickr, last.fm) implements these APIs to provide service to SMF - see @ref smf_plugin_group
+ *  
+ * Currently, @ref smf_client_interfaces and @ref smf_plugin_interfaces are defined for remote contacts, remote
+ * image gallery and remote music services. There are common classes defined for holding data accross clients
+ * and plugins, present in inc\common, see - @ref smf_common_group 
+ *
+ *	
+ *		@section smf_client_usage Client Usage Example
+ *		- This shows how to use the SMF client APIs in applications, e.g. Client can define suitable Models using lists returned by these APIs
+ *				- how to fetch a list of contacts from a remote server e.g. Facebook, see @ref MyApplication::displayFriends() 	
+ *				- how to get a @ref QContact from a SmfContacts see @ref MyApplication::showlist()
+ *				- how to get a list of images from a remote gallery e.g. Flickr.com, see @ref MyApplication::displayGallery()
+ *				- how to post privately to a contact see @ref MyApplication::postUpdate()
+ *				- how to tell others about the music you are currently listen to, see @ref MyApplication::updateCurrentPlaying()    
+ *		
+ *		
+ *		@section smf_dependency Dependency
+ *		SMF uses QtMobility for mainly contacts information, see QtMobility project.    
+   */
+/**
+ * @defgroup smf_common_group Common Data Classes 
+ */
+/**
+ * @defgroup smf_client_group Client Classes 
+ */
+/**
+ * @defgroup smf_plugin_group Plugin Classes 
+ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfevent/smfevent.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#ifndef SMFEVENT_H_
+#define SMFEVENT_H_
+
+#include <smfplace.h>
+#include <smfartists.h>
+#include <QStringList>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfEventPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The event class represents an event
+ */
+class SMFCLIENT_EXPORT SmfEvent : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfEvent( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfEvent( const SmfEvent &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfEvent( );
+	
+	/**
+	 * Method to get the event name
+	 * @return The event name
+	 */
+	QString title( ) const;
+	
+	/**
+	 * Method to get the event date and time
+	 * @return The date and time of the event
+	 */
+	QDateTime eventDateTime( ) const;
+	
+	/**
+	 * Method to get the event duration
+	 * @return The duration of the event
+	 */
+	QTime duration( ) const;
+	
+	/**
+	 * Method to get the artist names
+	 * @return The list of artists in the event
+	 */
+	SmfArtists artists( ) const;
+	
+	/**
+	 * Method to get the venue of the event
+	 * @return The venue of the event
+	 */
+	SmfPlace venue( ) const;
+	
+	/**
+	 * Method to get the URL for getting tickets for the event
+	 * @return The Url for getting ticket for the event
+	 */
+	QUrl ticketUrl( ) const;
+	
+	/**
+	 * Method to get the id of the event
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the event name
+	 * @param aName The new event name
+	 */
+	void setTitle( const QString &aName );
+	
+	/**
+	 * Method to set the event date and time
+	 * @param aDateTime The new date and time of the event
+	 * 
+	 */
+	void setEventDateTime( const QDateTime &aDateTime );
+	
+	/**
+	 * Method to set the event duration
+	 * @param aDuration The new duration of the event
+	 * 
+	 */
+	void setDuration( const QTime &aDuration );
+	
+	/**
+	 * Method to set the artist
+	 * @param aArtists The new artists in the event
+	 */
+	void setArtists( const SmfArtists &aArtists );
+	
+	/**
+	 * Method to set the venue name
+	 * @param aVenue The new venue of the event
+	 */
+	void setVenue( const SmfPlace &aVenue );
+	
+	/**
+	 * Method to set the URL for getting tickets for the event
+	 * @param aUrl The new Url for getting ticket for the event
+	 */
+	void setTicketUrl( const QUrl &aUrl );
+	
+private:
+	QSharedDataPointer<SmfEventPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfEvent &aEvent );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfEvent &aEvent );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfEvent object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aEvent The SmfEvent object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfEvent &aEvent );
+
+/**
+ * Method for Internalization. Reads a SmfEvent object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aEvent The SmfEvent object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfEvent &aEvent);
+
+#endif /* SMFEVENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfevent/smfevent_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfEvent class
+ *
+ */
+
+#ifndef SMFEVENT_P_H_
+#define SMFEVENT_P_H_
+
+
+#include <smfplace.h>
+#include <smfartists.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfEventPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfEventPrivate( ) { 
+		m_name.clear(); 
+		m_url.clear();
+		m_eventId.clear();
+		
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfEventPrivate( const SmfEventPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ), 
+		m_dateTime ( aOther.m_dateTime ),
+		m_duration ( aOther.m_duration ),
+		m_artists ( aOther.m_artists ),
+		m_venue ( aOther.m_venue ),
+		m_url ( aOther.m_url ),
+		m_eventId ( aOther.m_eventId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfEventPrivate( );
+  
+	QString		m_name;			// event name
+	QDateTime 	m_dateTime;		// event date and time
+	QTime		m_duration;		// event duration
+	SmfArtists m_artists;		// event artist names
+	SmfPlace 	m_venue;		// venue of the event
+	QUrl 		m_url;			// ticket url
+	QString 	m_eventId;
+	
+};
+
+#endif /* SMFEVENT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfglobal.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,275 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The smfglobal.h files contains all global data common to Smf framework
+ *
+ */
+
+#ifndef SMFGLOBAL_H_
+#define SMFGLOBAL_H_
+
+#include <QBuffer>
+#include <QNetworkRequest>
+#include <QNetworkAccessManager>
+
+/**
+ * Exact definition to be decided later
+ */
+#define SMF_SERVICE_NAME(INTERFACE,INTERFACENAME)
+
+/**
+ * Indicates first page for a web query
+ */
+const int SMF_FIRST_PAGE=0;
+
+/**
+ * Default value for per page item for web queries
+ */
+const int SMF_ITEMS_PER_PAGE=10;
+
+
+/**
+ * Enum declaration for Network status information
+ */
+enum SmfNetworkStatus
+	{
+	SmfNetworkConnectedHome = 0,
+	SmfNetworkConnectedRoaming,	// value = 1
+	SmfNetworkStateNotKnown,	// value = 2
+	SmfNetworkConnected,		// value = 3
+	SmfNetworkNotConnected		// value = 4
+	};
+
+/**
+ * Enum declaration for result of transport initialize operation
+ */
+enum SmfTransportInitializeResult
+	{
+	SmfTransportInitNetworkNotAvailable = 0,
+	SmfTransportInitRoamingNetworkUsageNotEnabled,	// value = 1
+	SmfTransportInitNoError							// value = 2
+	};
+
+/**
+ * The enumeration used to indicate result of transport to the plugins
+ */
+enum SmfTransportResult
+	{
+	SmfTransportOpNoError = 0,
+	SmfTransportOpConnectionRefusedError,
+	SmfTransportOpRemoteHostClosedError,
+	SmfTransportOpHostNotFoundError,
+	SmfTransportOpTimeoutError,
+	SmfTransportOpOperationCanceledError,
+	SmfTransportOpSslHandshakeFailedError,
+	SmfTransportOpProxyConnectionRefusedError,
+	SmfTransportOpProxyConnectionClosedError,
+	SmfTransportOpProxyNotFoundError,
+	SmfTransportOpProxyTimeoutError,
+	SmfTransportOpProxyAuthenticationRequiredError,
+	SmfTransportOpContentAccessDenied,
+	SmfTransportOpContentOperationNotPermittedError,
+	SmfTransportOpContentNotFoundError,
+	SmfTransportOpAuthenticationRequiredError,
+	SmfTransportOpContentReSendError,
+	SmfTransportOpProtocolUnknownError,
+	SmfTransportOpProtocolInvalidOperationError,
+	SmfTransportOpUnknownNetworkError,
+	SmfTransportOpUnknownProxyError,
+	SmfTransportOpUnknownContentError,
+	SmfTransportOpProtocolFailure,
+	SmfTransportOpUnknownError,
+	SmfTransportOpIAPChanged,
+	SmfTransportOpCancelled
+	};
+
+/**
+ * The enumeration used to indicate result of plugin manager operations
+ */
+enum SmfPluginManagerResult
+	{
+	SmfPluginNoError = 0,
+	SmfPluginNotFound,
+	SmfPluginNotLoaded,
+	SmfPluginLoaded,
+	SmfPluginLoadError,
+	SmfPluginAuthorised,
+	SmfPluginNotAuthorised,
+	SmfPluginUnknownService,
+	SmfPluginRequestSendingFailed,
+	SmfPluginSOPCheckFailed,
+	SmfPluginServiceError,
+	SmfPluginUnknownError
+	};
+
+
+/**
+ * The enumeration used to denote errors reported by plugin
+ * Smf can't continue without handling these errors
+ */
+enum SmfPluginError
+	{
+	SmfPluginErrNone = 0, 
+	SmfPluginErrTooManyRequest,
+	SmfPluginErrRequestQuotaExceeded,
+	SmfPluginErrInvalidRequest,
+	SmfPluginErrUserNotLoggedIn,
+	SmfPluginErrAuthenticationExpired,
+	SmfPluginErrPermissionDenied,
+	SmfPluginErrInvalidApplication,
+	SmfPluginErrServiceUnavailable,
+	SmfPluginErrServiceTemporaryUnavailable,
+	SmfPluginErrFormatNotSupported, 
+	SmfPluginErrDataSizeExceeded  
+	};
+
+/**
+ * The enumeration used to track the plugin methods return type
+ */
+enum SmfPluginRetType
+	{
+	SmfSendRequestAgain = 0,
+	SmfRequestComplete,
+	SmfRequestError
+	};
+
+
+/**
+ * The enumeration used to indicate the type of network operation done
+ */
+enum SmfRequestOperation
+	{
+	SmfContactGetFriends = 0,
+	SmfContactGetFollowers,
+	SmfContactSearch,
+	SmfContactGerGroups,
+	SmfContactSearchInGroup,
+	SmfContactGetPosts,
+	SmfContactUpdatePost,
+	SmfContactUpdatePostDirected,
+	SmfContactPostAppearence,
+	SmfMusicGetLyrics,
+	SmfMusicGetSubtitle,
+	SmfMusicGetEventsOnLoc,
+	SmfMusicGetVenueOnLoc,
+	SmfMusicGetEventsOnVenue,
+	SmfMusicPostEvents,
+	SmfMusicGetRecommendations,
+	SmfMusicGetTracks,
+	SmfMusicGetTrackInfo,
+	SmfMusicGetStores,
+	SmfMusicPostCurrentPlaying,
+	SmfMusicGetUserInfo,
+	SmfMusicSearchUser,
+	SmfMusicGetPlaylists,
+	SmfMusicGetPlaylistsOfUser,
+	SmfMusicAddToPlaylist,
+	SmfMusicPostCurrentPlayingPlaylist,
+	SmfPictureGetPictures,
+	SmfPictureDescription,
+	SmfPictureUpload,
+	SmfPictureMultiUpload,
+	SmfPicturePostComment
+	
+	};
+
+
+/**
+ * The structure used to hold the request created by the plugins
+ */
+struct SmfPluginRequestData
+	{
+	/**
+	 * Indicates the type of operation performed, like getting Friends 
+	 * list, upload image etc
+	 */
+	SmfRequestOperation iRequestType;
+	
+	/**
+	 * The QNetworkRequest that has to be filled up by the plugins
+	 */
+	QNetworkRequest iNetworkRequest;
+	
+	/**
+	 * The data to be posted in case of HTTP POST operation
+	 */
+	QBuffer *iPostData;
+	
+	/**
+	 * The type of HTTP transaction, like GET, POST etc
+	 */
+	QNetworkAccessManager::Operation iHttpOperationType;
+	
+	};
+
+/**
+ * The structure used to hold the request created by the plugins
+ */
+struct SmfResultPage
+	{
+	/**
+	 * The total number of items
+	 */
+	uint iTotalItems;
+	
+	/**
+	 * The number of items per page
+	 */
+	uint iItemsPerPage;
+	
+	/**
+	 * The total number of pages
+	 */
+	uint iTotalPages;
+	
+	/**
+	 * The current fetched page number
+	 */
+	uint iPageNum;
+	};
+
+/**
+ * The structure used to track the data usage of each plugins
+ */
+struct SmfPluginDataUsage
+	{
+	/**
+	 * Application that called the plugin
+	 */
+	QString iAppName;
+	
+	/**
+	 * Interface implemented by the plugin
+	 */
+	QString iInterfaceName;
+	
+	/**
+	 * The service provider
+	 */
+	QString iServiceProviderName;
+	
+	/**
+	 * number of bytes sent for this plugin
+	 */
+	uint iBytesSent;
+	
+	/**
+	 * number of bytes received for this plugin
+	 */
+	uint iBytesReceived;
+	
+	};
+
+#endif /* SMFGLOBAL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfalbum.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfAlbum class represents a music album
+ *
+ */
+#ifndef SMFALBUM_H_
+#define SMFALBUM_H_
+
+#include <QImage>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfAlbumPrivate;
+class SmfArtists;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfAlbum class represents a music album
+ */
+class SMFCLIENT_EXPORT SmfAlbum : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfAlbum( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfAlbum( const SmfAlbum &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfAlbum( );
+	
+	/**
+	 * Method to get the album name
+	 * @return The album name
+	 */
+	QString name( ) const;
+	
+	/**
+	 * Method to get the album's image
+	 * @return The album's image
+	 */
+	QImage image( ) const;
+	
+	/**
+	 * Method to get the artist names
+	 * @return The list of artists in the album
+	 */
+	SmfArtists artists( ) const;
+	
+	/**
+	 * Method to get the id of the album
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+private:
+	QSharedDataPointer<SmfAlbumPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfAlbum &aAlbum );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfAlbum &aAlbum );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfAlbum object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aAlbum The SmfAlbum object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfAlbum &aAlbum );
+
+/**
+ * Method for Internalization. Reads a SmfAlbum object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aAlbum The SmfAlbum object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfAlbum &aAlbum);
+
+
+#endif /* SMFALBUM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfalbum_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfAlbum class
+ *
+ */
+
+#ifndef SMFALBUM_P_H_
+#define SMFALBUM_P_H_
+
+#include <smfartists.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfAlbumPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfAlbumPrivate( ) { 
+		m_name.clear(); 
+		m_albumId.clear();
+		
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfAlbumPrivate( const SmfAlbumPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ), 
+		m_image ( aOther.m_image ),
+		m_artists ( aOther.m_artists ),
+		m_albumId ( m_albumId.m_eventId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfAlbumPrivate( );
+  
+	QString		m_name;		// album name
+	QImage 		m_image;	// album image
+	SmfArtists m_artists;	// album's artists
+	QString 	m_albumId;
+	
+};
+
+#endif /* SMFALBUM_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfartists.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfArtists class represents the artists in a track or an album
+ *
+ */
+
+#ifndef SMFARTISTS_H_
+#define SMFARTISTS_H_
+
+#include <QImage>
+#include <QUrl>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfArtistsPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfArtists class represents the artists in a track or an album
+ */
+class SMFCLIENT_EXPORT SmfArtists : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfArtists( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfArtists( const SmfArtists &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfArtists( );
+	
+	/**
+	 * Method to get the artists names
+	 * @return The list of artists
+	 */
+	QStringList names( ) const;
+	
+	/**
+	 * Method to get the image of the artists
+	 * @return The image of te artists
+	 */
+	QImage image( ) const;
+	
+	/**
+	 * Method to get the url of the artists
+	 * @return The url of the artists
+	 */
+	QUrl url( ) const;
+		
+private:
+	QSharedDataPointer<SmfArtistsPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfArtists &aArtists );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfArtists &aArtists );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfArtists object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aArtists The SmfArtists object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfArtists &aArtists );
+
+/**
+ * Method for Internalization. Reads a SmfArtists object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aArtists The SmfArtists object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfArtists &aArtists);
+
+
+#endif /* SMFARTISTS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfartists_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfArtists class
+ *
+ */
+
+#ifndef SMFARTISTS_P_H_
+#define SMFARTISTS_P_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QSharedData>
+
+class SmfArtistsPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfArtistsPrivate( ) { 
+		m_names.clear(); 
+		m_url.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfArtistsPrivate( const SmfArtistsPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_names ( aOther.m_names ), 
+		m_image ( aOther.m_image ),
+		m_url ( aOther.m_url ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfArtistsPrivate( );
+  
+	QStringList	m_names;	// artist names
+	QImage 		m_image;	// image
+	QUrl 		m_url;		// url
+};
+
+
+#endif /* SMFARTISTS_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfevent.h	Thu Mar 25 14:44:08 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/**
- * @file	smfevent.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
- * 
- * @section DESCRIPTION
- *
- * The event class represents a music event
- */
-
-#ifndef SMFEVENT_H_
-#define SMFEVENT_H_
-
-#include <smfvenue.h>
-#include <QStringList>
-#include <qdatastream.h>
-#include "SmfClientGlobal.h"
-/**
- * The event class represents a music event
- */
-class SMFCLIENT_EXPORT SmfEvent : public QObject
-	{
-	Q_OBJECT
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfEvent( QObject *aParent = 0 );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfEvent( );
-	
-	/**
-	 * Method to get the event name
-	 * @param aName The event name
-	 */
-	void getTitle( QString &aName );
-	
-	/**
-	 * Method to get the event date and time
-	 */
-	void getEventDateTime( QDateTime &aDateTime );
-	
-	/**
-	 * Method to get the artist names
-	 * @param aArtist The list of artists in the event
-	 */
-	void getArtists( QStringList &aArtist );
-	
-	/**
-	 * Method to get the venue of the event
-	 * @param aVenue The venue of the event
-	 */
-	void getVenue( SmfVenue &aVenue );
-	
-	/**
-	 * Method to get the URL for getting tickets for the event
-	 * @param aUrl The Url for getting ticket for the event
-	 */
-	void getTicketUrl( QUrl &aUrl );
-	
-	/**
-	 * Method to get the id of the event
-	 * @param aId The ID value 
-	 */
-	void getId( QString &aId );
-	
-	/**
-	 * Method to set the event name
-	 * @param aName The new event name
-	 */
-	void setTitle( const QString& aName );
-	
-	/**
-	 * Method to set the event date and time
-	 * @param aDateTime The new date and time of the event
-	 * 
-	 */
-	void setEventDateTime( const QDateTime& aDateTime );
-	
-	/**
-	 * Method to set the artist names
-	 * @param aArtist The new list of artists in the event
-	 */
-	void setArtists( const QStringList& aArtist );
-	
-	/**
-	 * Method to set the venue name
-	 * @param aVenue The new venue of the event
-	 */
-	void setVenue( const SmfVenue& aVenue );
-	
-	/**
-	 * Method to set the URL for getting tickets for the event
-	 * @param aUrl The new Url for getting ticket for the event
-	 */
-	void setTicketUrl( const QUrl &aUrl );
-
-private:
-	QStringList m_name;			// event name
-	QDateTime 	m_dateTime;		// event date and time
-	QStringList m_artistName;	// event artist names
-	SmfVenue 	m_venue;		// venue of the event
-	QUrl 		m_url;			// ticket url
-	QString 	m_eventId;
-	
-	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfEvent&);
-/**
- * Internalization
- */
-QDataStream &operator>>(QDataStream &, SmfEvent&);
-
-#endif /* SMFEVENT_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smflyrics.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smflyrics.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,30 +1,34 @@
 /**
- * @file	smflyrics.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The SmfLyrics class represents an instance of a music track's lyrics
  *
- * The lyrics class represents an instance of a music track's lyrics
  */
 
 #ifndef SMFLYRICS_H_
 #define SMFLYRICS_H_
 
-#include <QObject>
 #include <qdatastream.h>
 #include <QDateTime>
-#include "SmfClientGlobal.h"
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfLyricsPrivate;
+
 /**
+ * @ingroup smf_common_group
  * The lyrics class represents an instance of a music track's lyrics
  */
 class SMFCLIENT_EXPORT SmfLyrics : public QObject
@@ -38,61 +42,70 @@
 	SmfLyrics( QObject *aParent = 0 );
 	
 	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfLyrics( const SmfLyrics &aOther );
+	
+	/**
 	 * Destructor
 	 */
 	~SmfLyrics( );
-
+	
 	/**
 	 * Method to get the lyrics
-	 * @param aLyrics The lyrics content
+	 * @return The lyrics data
 	 */
-	void getLyrics( QByteArray &aLyrics );
+	QByteArray lyrics( ) const;
 	
 	/**
 	 * Method to get the language
-	 * @param aLanguage The language
-	 */
-	void getLanguage( QString &aLanguage );
-	
-	/**
-	 * Method to get the frame rate
-	 * @return the frame rate
+	 * @return The language
 	 */
-	double getFrameRate( );
-	
-	/**
-	 * Method to get the duration
-	 * @return the duration
-	 */
-	double getDuration( );
+	QString language( ) const;
 	
 	/**
 	 * Method to get the release year
-	 * @param aRelYear The release year
+	 * @return The release year
 	 */
-	void getReleaseYear( QDateTime &aRelYear );
+	QDateTime releaseYear( ) const;
 	
 	/**
 	 * Method to get the id of the lyrics
-	 * @param aId The ID value 
+	 * @return The ID value 
 	 */
-	void getId( QString &aId );
-
+	QString id( ) const;
+	
 private:
-	QByteArray m_lyrics;	// lyrics data
-	QString m_language;		// language
-	double m_frameRate;		// frame rate
-	double m_duration;		// duration
-	QDateTime m_releaseYr;	// release year
-	QString m_lyricsId;		// lyrics id
+	QSharedDataPointer<SmfLyricsPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfLyrics &aLyrics );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfLyrics &aLyrics );
 	
 	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfLyrics&);
+
+
 /**
- * Internalization
+ * Method for Externalization. Writes the SmfLyrics object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aLyrics The SmfLyrics object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator>>(QDataStream &, SmfLyrics&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfLyrics &aLyrics );
+
+/**
+ * Method for Internalization. Reads a SmfLyrics object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aLyrics The SmfLyrics object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfLyrics &aLyrics);
+
 #endif /* SMFLYRICS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smflyrics_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfLyrics class
+ *
+ */
+
+#ifndef SMFLYRICS_P_H_
+#define SMFLYRICS_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfLyricsPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfLyricsPrivate( ) { 
+		m_lyrics.clear();
+		m_language.clear();
+		m_lyricsId.clear(); 
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfLyricsPrivate( const SmfLyricsPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_lyrics ( aOther.m_lyrics ),
+		m_language ( aOther.m_language ),
+		m_releaseYr ( aOther.m_releaseYr ),
+		m_lyricsId ( aOther.m_lyricsId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLyricsPrivate( );
+  
+	QByteArray m_lyrics;	// lyrics data
+	QString m_language;		// language
+	QDateTime m_releaseYr;	// release year
+	QString m_lyricsId;		// lyrics id
+	
+};
+
+#endif /* SMFLYRICS_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,31 +1,36 @@
 /**
- * @file	smfmusicfingerprint.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The SmfMusicFingerPrint class represents a music finger print used in searches
  *
- * The musicfingerprint class represents a music finger print used in searches
  */
 
 #ifndef SMFMUSICFINGERPRINT_H_
 #define SMFMUSICFINGERPRINT_H_
 
-#include <QObject>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfMusicFingerPrintPrivate;
 
 /**
+ * @ingroup smf_common_group
  * The musicfingerprint class represents a music finger print used in searches
  */
-class SmfMusicFingerPrint : public QObject
+class SMFCLIENT_EXPORT SmfMusicFingerPrint : public QObject
 	{
 	Q_OBJECT
 public:
@@ -39,13 +44,42 @@
 	 */
 	~SmfMusicFingerPrint( );
 	
+	/**
+	 * GEt the music finger print data
+	 * @return The music finger print data
+	 */
+	QByteArray musicFingerPrint ( ) const;
+	
+private:
+	QSharedDataPointer<SmfMusicFingerPrintPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicFingerPrint &aMFP );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicFingerPrint &aMFP );
+	
 	};
+
+
 /**
-* Externalization
-*/
-friend QDataStream &operator<<(QDataStream &, const SmfMusicFingerPrint&);
+ * Method for Externalization. Writes the SmfMusicFingerPrint object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMFP The SmfMusicFingerPrint object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicFingerPrint &aMFP );
+
 /**
- * Internalization
+ * Method for Internalization. Reads a SmfMusicFingerPrint object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMFP The SmfMusicFingerPrint object to be internalized
+ * @return reference to the stream
  */
-friend QDataStream &operator>>(QDataStream &, SmfMusicFingerPrint&);
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicFingerPrint &aMFP);
+
 #endif /* SMFMUSICFINGERPRINT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicFingerPrint class
+ *
+ */
+
+#ifndef SMFMUSICFINGERPRINT_P_H_
+#define SMFMUSICFINGERPRINT_P_H_
+
+#include <QSharedData>
+
+class SmfMusicFingerPrintPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicFingerPrintPrivate( );
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicFingerPrintPrivate( const SmfMusicFingerPrintPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_fingerPrintData ( aOther.m_fingerPrintData )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicFingerPrintPrivate( );
+  
+	QByteArray m_fingerPrintData;
+	
+};
+
+
+#endif /* SMFMUSICFINGERPRINT_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfmusicprofile.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicprofile.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,86 +1,124 @@
 /**
- * @file	smfmusicprofile.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The music profile class represents a user's profile in music site
  *
- * The music profile class represents a user's profile in music site
  */
 
 #ifndef SMFMUSICPROFILE_H_
 #define SMFMUSICPROFILE_H_
 
+#include <smftrackinfo.h>
+#include <smfevent.h>
 #include <qdatastream.h>
-#include "SmfClientGlobal.h"
+#include <QSharedData>
+#include <smfclientglobal.h>
 
-#include "smfcontact.h"
-class SmfTrackInfo;
-class SmfEventsList;
-typedef QList<SmfTrackInfo> SmfTrackInfoList; 
-/**
- * User profile containing music usage and interest info, extends SmfContact.
- * Consists of,-
- * 1. Conatct info
- * 2. Music usage info as SmfTrackInfoList
- * 3. Interest info as SmfTrackInfoList
- * 4. Events SmfEventsList
- */
-class SMFCLIENT_EXPORT SmfMusicProfile : public SmfContact
-	{
-	  Q_OBJECT
+class SmfMusicProfilePrivate;
 
-	public:
-	  // Seeing as this is a plug-in implementation, these will realistically
-	  // be generated by SMF factory of some kind
-	  SmfMusicProfile(QObject* parent = 0);
-	  ~SmfMusicProfile();
-	  
-	  /**
-	   * Gets the music usage info of the user as list of SmfTrackInfo
-	   */
-	  SmfTrackInfoList* getMusicUsageInfo();
-	  
-	  /**
-	   * Gets the music interest info of the user as list of SmfTrackInfo
-	   */
-	  SmfTrackInfoList* getInterestInfo();
-	  
-	  /**
-	   * Gets the user events as list of SmfEvents
-	   */
-	  SmfEventsList* getUserEvents();
-	  
-	  /**
-	   * Sets the music usage info of the user as list of SmfTrackInfo
-	   */
-	  void setMusicUsageInfo(SmfTrackInfoList* usage);
-	  
-	  /**
-	   * Gets the music interest info of the user as list of SmfTrackInfo
-	   */
-	  void setInterestInfo(SmfTrackInfoList* interest);
+/**
+ * @ingroup smf_common_group
+ * The music profile class represents a user's profile in music site
+ */
+class SMFCLIENT_EXPORT SmfMusicProfile : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicProfile( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfMusicProfile( const SmfMusicProfile &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicProfile( );
+	
+	/**
+	 * Method to get the user's used tracks
+	 * @return The users track list
+	 */
+	QList<SmfTrackInfo> musicUsageInfo( ) const;
+	
+	/**
+	 * Method to get the user's interested tracks
+	 * @return The users interested track list
+	 */
+	QList<SmfTrackInfo> interestInfo( ) const;
+	
+	/**
+	 * Method to get the user events as list of SmfEvents
+	 * @return The list of events
+	 */
+	QList<SmfEvent> userEvents( ) const;
+	
+	/**
+	 * Method to get the id of the music profile
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the user's used tracks
+	 * @param aUsage The users new track list
+	 */
+	void setMusicUsageInfo( const QList<SmfTrackInfo>& aUsage );
+	
+	/**
+	 * Method to set the user's interested tracks
+	 * @param aInterest The users new interested track list
+	 */
+	void setInterestInfo( const QList<SmfTrackInfo>& aInterest );
 
-	private:
-	  SmfTrackInfoList* usage;
-	  SmfTrackInfoList* interest;
-	  
+private:
+	QSharedDataPointer<SmfMusicProfilePrivate> d;
+
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicProfile &aProfile );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicProfile &aProfile );
+	
 	};
+
+
 /**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfMusicProfile&);
+ * Method for Externalization. Writes the SmfMusicProfile object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aProfile The SmfMusicProfile object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicProfile &aProfile );
+
 /**
- * Internalization
+ * Method for Internalization. Reads a SmfMusicProfile object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aProfile The SmfMusicProfile object to be internalized
+ * @return reference to the stream
  */
-QDataStream &operator>>(QDataStream &, SmfMusicProfile&);
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicProfile &aProfile);
+
 #endif /* SMFMUSICPROFILE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicprofile_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicProfile class
+ *
+ */
+
+#ifndef SMFMUSICPROFILE_P_H_
+#define SMFMUSICPROFILE_P_H_
+
+
+#include <smftrackinfo.h>
+#include <smfevent.h>
+#include <QSharedData>
+
+class SmfMusicProfilePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicProfilePrivate( ) { 
+		m_usage.clear(); 
+		m_interest.clear();
+		m_events.clear();
+		m_profileId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicProfilePrivate( const SmfMusicProfilePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_usage ( aOther.m_usage ), 
+		m_interest ( aOther.m_interest ),
+		m_events ( aOther.m_events ),
+		m_profileId ( aOther.m_profileId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicProfilePrivate( );
+  
+	QList<SmfTrackInfo> m_usage;	// usage tracks
+	QList<SmfTrackInfo> m_interest;// interested tracks
+	QList<SmfEvent> m_events;		// events list
+	QString m_profileId;
+	
+};
+
+#endif /* SMFMUSICPROFILE_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfmusicrating.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicrating.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,82 +1,121 @@
 /**
- * @file	smfmusicrating.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The music rating class represents an instance of rating 
+ * about a music track
  *
- * The music rating class represents an instance of rating 
- * about a music track 
  */
 
 #ifndef SMFMUSICRATING_H_
 #define SMFMUSICRATING_H_
 
 #include <QObject>
-#include "SmfClientGlobal.h"
+#include <QSharedData>
+#include <smfclientglobal.h>
+
 class SmfTrackInfo;
+class SmfMusicRatingPrivate;
+
 /**
- * Rating value, services should define their own scale
+ * Indicates range of values to represent ratings,
+ * SP should normalize their rating value to this scale
  */
-class SMFCLIENT_EXPORT SmfMusicRating : QObject
+const int SMF_MAX_RATING = 10;
+const int SMF_MIN_RATING = 0;
+
+/**
+ * @ingroup smf_common_group
+ * The music rating class represents an instance of rating 
+ * about a music track 
+ */
+class SMFCLIENT_EXPORT SmfMusicRating : public QObject
 	{
 	Q_OBJECT
-	
 public:
 	/**
-	 * Constructs the rating for the given track
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 * (parent should be of type SmfTrackInfo)
 	 */
-	SmfMusicRating(SmfTrackInfo* track);
-	/**
-	 * Gets the rating
-	 */
-	int getRating();
+	SmfMusicRating(SmfTrackInfo *aParent = 0);
 	
 	/**
-	 * Gets the max for the rating scale
+	 * Copy Constructor
+	 * @param aOther The reference object
 	 */
-	int getMax();
+	SmfMusicRating( const SmfMusicRating &aOther );
+	
+	/**
+	 * Overloaded = operator 
+	 * @param aOther The reference object
+	 */
+	SmfMusicRating operator=( const SmfMusicRating &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicRating( );
 	
 	/**
-	 * Gets the min for the rating scale
-	 */
-	int getMin();
-	
-	/**
-	 * Gets the rating
+	 * Method to get the rating
+	 * @return The rating value
 	 */
-	void setRating(int rating);
-	
+	int rating( ) const;
+
 	/**
-	 * Sets the max for the rating scale
+	 * Method to get the max rating
+	 * @return The max rating value
 	 */
-	void setMax(int max);
+	int maxRating( ) const;
 	
 	/**
-	 * Sets the min for the rating scale
+	 * Method to get the min rating
+	 * @return The min rating value
 	 */
-	void setMin(int min);
+	int minRating( ) const;
+	
+private:
+	QSharedDataPointer<SmfMusicRatingPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicRating &aMusicRating );
 
-private:
-	int m_rating;
-	int m_max;
-	int m_min;
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicRating &aMusicRating );
+	
 	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfMusicRating&);
+
+
 /**
- * Internalization
+ * Method for Externalization. Writes the SmfMusicRating object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMusicRating The SmfMusicRating object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator>>(QDataStream &, SmfMusicRating&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicRating &aMusicRating );
+
+/**
+ * Method for Internalization. Reads a SmfMusicRating object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMusicRating The SmfMusicRating object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicRating &aMusicRating);
+
 #endif /* SMFMUSICRATING_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicrating_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicRating class
+ *
+ */
+
+#ifndef SMFMUSICRATING_P_H_
+#define SMFMUSICRATING_P_H_
+
+#include <QSharedData>
+
+class SmfMusicRatingPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicRatingPrivate( int aMax, int aMin ) { 
+		m_rating = 0;
+		m_max = aMax;
+		m_min = aMin;
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicRatingPrivate( const SmfMusicRatingPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_rating ( aOther.m_rating ),
+		m_max ( aOther.m_max ),
+		m_min ( aOther.m_min )  { }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicRatingPrivate( );
+  
+	int m_rating;	// rating
+	int m_max;		// max rating
+	int m_min;		// min rating
+	
+};
+
+#endif /* SMFMUSICRATING_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfplaylist.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smfplaylist.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,20 @@
 /**
- * @file	smfplaylist.h
- * @author  Nalina Hariharan,Manasij Roy Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The playlist class represents an instance of a playlist
  *
- * The playlist class represents an instance of a playlist
  */
 
 #ifndef SMFPLAYLIST_H_
@@ -22,11 +22,16 @@
 
 #include <smftrackinfo.h>
 #include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfPlaylistPrivate;
 
 /**
+ * @ingroup smf_common_group
  * The playlist class represents an instance of a playlist
  */
-class SmfPlaylist : public QObject
+class SMFCLIENT_EXPORT SmfPlaylist : public QObject
 	{
 	Q_OBJECT
 public:
@@ -37,33 +42,39 @@
 	SmfPlaylist( QObject *aParent = 0 );
 	
 	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPlaylist( const SmfPlaylist &aOther );
+	
+	/**
 	 * Destructor
 	 */
 	~SmfPlaylist( );
 	
 	/**
 	 * Method to get the list of tracks in the playlist
-	 * @param aList The list of tracks in the playlist
+	 * @return The list of tracks in the playlist
 	 */
-	void getTrackList( QList<SmfTrackInfo>& aList );
+	QList<SmfTrackInfo> trackList( ) const;
 	
 	/**
 	 * Method to get the playlist title
-	 * @param aTitle The title of the playlist
+	 * @return The title of the playlist
 	 */
-	void getPlayListTitle( QString &aTitle );
+	QString playListTitle( ) const;
 	
 	/**
 	 * Method to get the creation date of the playlist
-	 * @param aDate The date and time of creation of the playlist
+	 * @return The date and time of creation of the playlist
 	 */
-	void getCreationDate( QDateTime &aDate );
+	QDateTime creationDate( ) const;
 	
 	/**
 	 * Method to get the id of the playlist
-	 * @param aId The ID value 
+	 * @return The ID value 
 	 */
-	void getId( QString &aId );
+	QString id( ) const;
 	
 	/**
 	 * Method to set the list of tracks in the playlist
@@ -84,19 +95,35 @@
 	void setCreationDate( const QDateTime &aDate );
 	
 private:
-	QList<SmfTrackInfo> m_trackList;	// list of tracks
-	QString m_title;				// playlist name
-	QDateTime m_creationDate;		// creation date
-	QString m_playlistId;
+	QSharedDataPointer<SmfPlaylistPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPlaylist &aPlaylist );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPlaylist &aPlaylist );
 	
 	};
- /**
-  * Externalization
-  */
- QDataStream &operator<<(QDataStream &, const SmfPlaylist &);
- /**
-  * Internalization
-  */
- QDataStream &operator>>(QDataStream &, SmfPlaylist &);
- 
+
+
+/**
+ * Method for Externalization. Writes the SmfPlaylist object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlaylist The SmfPlaylist object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPlaylist &aPlaylist );
+
+/**
+ * Method for Internalization. Reads a SmfPlaylist object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlaylist The SmfPlaylist object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPlaylist &aPlaylist);
+
 #endif /* SMFPLAYLIST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfplaylist_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPlaylist class
+ *
+ */
+
+#ifndef SMFPLAYLIST_P_H_
+#define SMFPLAYLIST_P_H_
+
+#include <smftrackinfo.h>
+#include <QSharedData>
+
+class SmfPlaylistPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPlaylistPrivate( ) { 
+		m_trackList.clear(); 
+		m_title.clear();
+		m_playlistId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPlaylistPrivate( const SmfPlaylistPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_trackList ( aOther.m_trackList ), 
+		m_title ( aOther.m_title ),
+		m_creationDate ( aOther.m_creationDate ),
+		m_playlistId ( aOther.m_playlistId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlaylistPrivate( );
+  
+	QList<SmfTrackInfo> m_trackList;// list of tracks
+	QString m_title;				// playlist name
+	QDateTime m_creationDate;		// creation date
+	QString m_playlistId;
+	
+};
+
+#endif /* SMFPLAYLIST_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfsubtitle.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smfsubtitle.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,20 @@
 /**
- * @file	smfsubtitle.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The subtitle class represents information about a track's subtitle
  *
- * The subtitle class represents information about a track's subtitle
  */
 
 #ifndef SMFSUBTITLE_H_
@@ -23,8 +23,24 @@
 #include <QObject>
 #include <qdatastream.h>
 #include <QDateTime>
-#include "SmfClientGlobal.h"
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+enum SmfSubtitleSearchFilterFields
+	{
+	SubtitleLanguage = 0,
+	SubtitleFrameRate,		// value = 1
+	SubtitleDuration,		// value = 2
+	SubtitleReleaseYear,	// value = 3
+	SubtitleAll = SubtitleLanguage | SubtitleFrameRate | 
+			SubtitleDuration | SubtitleReleaseYear
+	};
+typedef QMap<SmfSubtitleSearchFilterFields,QString> SmfSubtitleSearchFilter;
+
+class SmfSubtitlePrivate;
+
 /**
+ * @ingroup smf_common_group
  * The subtitle class represents information about a track's subtitle
  */
 class SMFCLIENT_EXPORT SmfSubtitle : public QObject
@@ -38,61 +54,82 @@
 	SmfSubtitle( QObject *aParent = 0 );
 	
 	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfSubtitle( const SmfSubtitle &aOther );
+	
+	/**
 	 * Destructor
 	 */
 	~SmfSubtitle( );
 	
-
 	/**
 	 * Method to get the subtitle as a bytearray
-	 * @param aSubTitle The subtitle content
+	 * @return The subtitle content
 	 */
-	void getSubtitle( QByteArray &aSubTitle );
+	QByteArray subtitle( ) const;
 	
 	/**
 	 * Method to get the language
-	 * @param aLanguage The language
+	 * @return The language
 	 */
-	void getLanguage( QString &aLanguage );
+	QString language( ) const;
 	
 	/**
 	 * Method to get the frame rate
 	 * @return the frame rate
 	 */
-	double getFrameRate( );
+	double frameRate( ) const;
 	
 	/**
 	 * Method to get the duration
 	 * @return the duration
 	 */
-	double getDuration( );
+	double duration( ) const;
 	
 	/**
 	 * Method to get the release year
-	 * @param aRelYear The release year
+	 * @return The release year
 	 */
-	void getReleaseYear( QDateTime &aRelYear );
+	QDateTime releaseYear( ) const;
 	
 	/**
 	 * Method to get the id of the subtitle
-	 * @param aId The ID value 
+	 * @return The ID value 
 	 */
-	void getId( QString &aId );
+	QString id( ) const;
 	
 private:
-	QByteArray m_subtitle;	// subtitle data
-	QString m_language;		// language
-	double m_frameRate;		// frame rate
-	double m_duration;		// duration
-	QDateTime m_releaseYr;	// release year
-	QString m_subtitleId;	// subtitle id
+	QSharedDataPointer<SmfSubtitlePrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfSubtitle &aSubtitle );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfSubtitle &aSubtitle );
+	
 	};
+
+
 /**
- * Externalization
+ * Method for Externalization. Writes the SmfSubtitle object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aSubtitle The SmfSubtitle object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator<<(QDataStream &, const SmfSubtitle&);
-	/**
-	 * Internalization
-	 */
-QDataStream &operator>>(QDataStream &, SmfSubtitle&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfSubtitle &aSubtitle );
+
+/**
+ * Method for Internalization. Reads a SmfSubtitle object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aSubtitle The SmfSubtitle object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfSubtitle &aSubtitle);
+
 #endif /* SMFSUBTITLE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfsubtitle_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfSubtitle class
+ *
+ */
+
+#ifndef SMFSUBTITLE_P_H_
+#define SMFSUBTITLE_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfSubtitlePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfSubtitlePrivate( ) { 
+		m_language.clear();
+		m_frameRate = 0;
+		m_duration = 0;
+		m_subtitleId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfSubtitlePrivate( const SmfSubtitlePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_subtitle ( aOther.m_subtitle ), 
+		m_language ( aOther.m_language ),
+		m_frameRate ( aOther.m_frameRate ),
+		m_duration ( aOther.m_duration ),
+		m_releaseYr ( aOther.m_releaseYr ),
+		m_subtitleId ( aOther.m_subtitleId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfSubtitlePrivate( );
+  
+	QByteArray m_subtitle;	// subtitle data
+	QString m_language;		// language
+	double m_frameRate;		// frame rate
+	double m_duration;		// duration
+	QDateTime m_releaseYr;	// release year
+	QString m_subtitleId;	// subtitle id
+	
+};
+
+#endif /* SMFSUBTITLE_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfsubtitlesearchfilter.h	Thu Mar 25 14:44:08 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/**
- * @file	smfsubtitlesearchfilter.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
- * 
- * @section DESCRIPTION
- *
- * The subtitle search filter class represents the filter options 
- * for searching tracks
- */
-
-#ifndef SMFSUBTITLESEARCHFILTER_H_
-#define SMFSUBTITLESEARCHFILTER_H_
-
-#include <QDateTime>
-#include "SmfClientGlobal.h"
-/**
- * The subtitle search filter class represents the filter options 
- * for searching tracks
- */
-class SMFCLIENT_EXPORT SmfSubtitleSearchFilter : public QObject
-	{
-	Q_OBJECT
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfSubtitleSearchFilter( QObject *aParent = 0 );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfSubtitleSearchFilter( );
-	
-	/**
-	 * Method to get the language
-	 * @param aLang The language
-	 */
-	void getLanguage( QString &aLang );
-	
-	/**
-	 * Method to get the frame rate
-	 * @return The frame rate
-	 */
-	double getFrameRate( );
-	
-	/**
-	 * Method to get the duration
-	 * @param aTime The duration
-	 */
-	void getDuration( QTime &aTime );
-	
-	/**
-	 * Method to get the release year
-	 * @param aDateTime The release year
-	 */
-	void getReleaseYear( QDateTime &aDateTime );
-
-	/**
-	 * Method to set the language
-	 * @param aLang The new language
-	 */
-	void setLanguage( const QString& aLang );
-	
-	/**
-	 * Method to set the frame rate
-	 * @param aFr The new frame rate
-	 */
-	void setFrameRate( const double aFr );
-	
-	/**
-	 * Method to set the duration
-	 * @param aDuration The new duration
-	 */
-	void setDuration( const QTime& aDuration );
-	
-	/**
-	 * Method to set the release year
-	 * @param aDateTime The new release year
-	 */
-	void setReleaseYear( const QDateTime &aDateTime );
-	
-private:
-	QString m_language;		// language
-	double m_frameRate;		// frame rate
-	QTime m_duration;		// duration
-	QDateTime m_releaseYr;	// release year
-	};
-
-#endif /* SMFSUBTITLESEARCHFILTER_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smftrackinfo.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfmusic/smftrackinfo.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,20 @@
 /**
- * @file	smftrackinfo.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The track info class represents information about a music track
  *
- * The track info class represents information about a music track
  */
 
 #ifndef SMFTRACKINFO_H_
@@ -23,138 +23,184 @@
 #include <QTime>
 #include <qdatastream.h>
 #include <smfmusicrating.h>
-#include "SmfClientGlobal.h"
+#include <smfartists.h>
+#include <smfalbum.h>
+#include <QStringList>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfTrackInfoPrivate;
+
 /**
- * Music track info as track id,title, album, artist, genre,
- * tag, director,release year, rating, comment info 
+ * @ingroup smf_common_group
+ * The track info class represents information about a music track
  */
 class SMFCLIENT_EXPORT SmfTrackInfo : public QObject
 	{
 	Q_OBJECT
 public:
-	 /**
-	  * Constructs track info 
-	  */
-	SmfTrackInfo(QObject* parent=0);
 	/**
-	 * Gets track id
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 * (parent should be of type SmfMusicServicePlugin)
 	 */
-	void getId(QString& id);
+	SmfTrackInfo(QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfTrackInfo( const SmfTrackInfo &aOther );
 	
 	/**
-	 * Gets title of the track
+	 * Destructor
 	 */
-	void getTitle(QString& title);
+	~SmfTrackInfo( );
+	
+	/**
+	 * Method to get the id of the track
+	 * @return The ID value 
+	 */
+	QString id( ) const;
 	
 	/**
-	 * Gets album name
+	 * Method to get the track title
+	 * @return The title of the track
 	 */
-	void getAlbum(QString& album);
+	QString title( ) const;
 	
 	/**
-	 * Gets track artist
+	 * Method to get the track album
+	 * @return The album of the track
 	 */
-	void getArtist(QString& artist);
-	
-	/**
-	 * Gets track genre
-	 */
-	void getGenre(QString& genre);
+	SmfAlbum album( ) const;
 	
 	/**
-	 * Gets track tag
+	 * Method to get the track's artists
+	 * @return The artists of the track
 	 */
-	void getTag(QString& tag);
+	SmfArtists artists( ) const;
 	
 	/**
-	 * Gets director name
+	 * Method to get the genre of the track
+	 * @return The genre of the track
 	 */
-	void getDirector(QString& director);
+	QString genre( ) const;
 	
 	/**
-	 * Gets release year
+	 * Method to get the track's tag
+	 * @return The tag of the track
 	 */
-	void getYear(QString& year);
+	QStringList tags( ) const;
 	
 	/**
-	 * Gets track rating 
+	 * Method to get the release year of the track
+	 * @return The release year of the track
 	 */
-	void getRating(SmfMusicRating& rating);
+	QDateTime year( ) const;
 	
 	/**
-	 * Gets comments
+	 * Method to get the track's rating
+	 * @return The rating of the track
 	 */
-	void getComment(QStringList& comment);
-	
+	SmfMusicRating rating( ) const;
 	
 	/**
-	 * Sets id
+	 * Method to get the comments on the track
+	 * @return The comments on the track
 	 */
-	void setId(QString& id);
+	QStringList comments( ) const;
+	
+	/**
+	 * Method to get the track's duration
+	 * @return The duration of the track
+	 */
+	QTime duration( ) const;
 	
 	/**
-	 * Sets title
+	 * Method to set the track title
+	 * @param aTitle The new title of the track
 	 */
-	void setTitle(QString& title);
+	void setTitle( const QString &aTitle );
 	
 	/**
-	 * Sets album name
+	 * Method to set the track album
+	 * @param aAlbum The new album of the track
 	 */
-	void setAlbum(QString& album);
+	void setAlbum( const SmfAlbum &aAlbum );
+	
+	/**
+	 * Method to set the track's artists
+	 * @param aArtists The new artists of the track
+	 */
+	void setArtists( const SmfArtists &aArtists );
 	
 	/**
-	 * Sets artist name
+	 * Method to set the genre of the track
+	 * @param aGenre The new genre of the track
 	 */
-	void setArtist(QString& artist);
+	void setGenre( const QString &aGenre );
 	
 	/**
-	 * Sets genre
+	 * Method to set the track's tag
+	 * @param aTag The tag of the track
 	 */
-	void setGenre(QString& genre);
+	void setTags( const QStringList &aTag );
 	
 	/**
-	 * Sets tag
+	 * Method to set the release year of the track
+	 * @param aYear The new release year of the track
 	 */
-	void setTag(QString& tag);
+	void setYear( const QDateTime &aYear );
 	
 	/**
-	 * Sets director name
+	 * Method to set the track's rating
+	 * @param aRating The new rating of the track
 	 */
-	void setDirector(QString& director);
+	void setRating( const SmfMusicRating &aRating );
 	
 	/**
-	 * Sets release year
+	 * Method to set the comments on the track
+	 * @param aComment The new comment of the track
 	 */
-	void setYear(QString& year);
+	void setComment( const QString &aComment );
 	
 	/**
-	 * Sets rating
+	 * Method to set the duration of the track
+	 * @param aDuration The new duration of the track
 	 */
-	void setRating(SmfMusicRating& rating);
-	
-	/**
-	 * Sets comment
-	 */
-	void setComment(QStringList& comment);
+	void setDuration( const QTime &aDuration );
 
 private:
-	QString m_id;
-	QString m_title;
-	QString m_albumTitle;
-	QString m_artistName;
-	QString m_genre;
-	QString m_tag;
-	QString m_director;
-	QString m_year;
-	SmfMusicRating m_rating;
-	QString m_comment;
+	QSharedDataPointer<SmfTrackInfoPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfTrackInfo &aTrackInfo );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfTrackInfo &aTrackInfo );
+	
 	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfTrackInfo&);
+
+
 /**
- * Internalization
+ * Method for Externalization. Writes the SmfTrackInfo object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aTrackInfo The SmfTrackInfo object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator>>(QDataStream &, SmfTrackInfo&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfTrackInfo &aTrackInfo );
+
+/**
+ * Method for Internalization. Reads a SmfTrackInfo object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aTrackInfo The SmfTrackInfo object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfTrackInfo &aTrackInfo);
+
 #endif /* SMFTRACKINFO_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smftrackinfo_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfTrackInfo class
+ *
+ */
+
+#ifndef SMFTRACKINFO_P_H_
+#define SMFTRACKINFO_P_H_
+
+#include <QTime>
+#include <smfmusicrating.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfTrackInfoPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfTrackInfoPrivate( int aMaxRating, int aMinRating ) : m_rating(aMaxRating, aMinRating) 
+		{ 
+		m_trackId.clear();
+		m_title.clear();
+		m_albumTitle.clear();
+		m_artistName.clear();
+		m_genre.clear();
+		m_tag.clear();
+		m_comment.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfTrackInfoPrivate( const SmfTrackInfoPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_trackId ( aOther.m_trackId ),
+		m_title ( aOther.m_title ),
+		m_albumTitle ( aOther.m_albumTitle ),
+		m_artistName ( aOther.m_artistName ),
+		m_genre ( aOther.m_genre ),
+		m_tag ( aOther.m_tag ),
+		m_year ( aOther.m_year ),
+		m_rating ( aOther.m_rating ),
+		m_comment ( aOther.m_comment ),
+		m_duration ( aOther.m_duration ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfTrackInfoPrivate( );
+  
+	QString m_trackId;		// track id
+	QString m_title;		// title
+	QString m_albumTitle;	// album name
+	QString m_artistName;	// artist name
+	QString m_genre;		// genre information
+	QStringList m_tag;			// tag information
+	QDateTime m_year;			// release year
+	SmfMusicRating m_rating;// rating
+	QStringList m_comment;		// comments
+	QTime m_duration;		// duration
+	
+};
+
+#endif /* SMFTRACKINFO_P_H_ */
--- a/example/clientapi/smf/inc/common/smfmusic/smfvenue.h	Thu Mar 25 14:44:08 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/**
- * @file	smfvenue.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
- * 
- * @section DESCRIPTION
- *
- * The venue class represents a venue and its related information
- * 
- * Note: This class has dependencies on QtMobility project
- */
-
-#ifndef SMFVENUE_H_
-#define SMFVENUE_H_
-
-#include <QUrl>
-#include <qgeopositioninfo.h> // Qt mobility class
-#include <qdatastream.h>
-#include "SmfClientGlobal.h"
-
-/**
- * Popular venues.
- * Consists of venue name, city, street, pin, country,url and geo info.
- */
-class SMFCLIENT_EXPORT SmfVenue : QObject
-	{
-	Q_OBJECT
-	
-public:
-	
-	/**
-	 * Gets the venue name
-	 */
-	QString getName();
-	
-	/**
-	 * Sets the venue name
-	 */
-	void setName(QString& name);
-	
-	/**
-	 * Gets the city name
-	 */
-	QString getCity();
-	
-	/**
-	 * Sets the city name
-	 */
-	void setCity(QString& name);
-	
-	/**
-	 * Gets the Street name
-	 */
-	QString getStreet();
-	
-	/**
-	 * Sets the Street name
-	 */
-	void setStreet(QString& name);
-	
-	/**
-	 * Gets the Pin
-	 */
-	QString getPin();
-	
-	/**
-	 * Sets the Pin
-	 */
-	void setPin(QString& name);
-	
-	/**
-	 * Gets the Country name
-	 */
-	QString getCountry();
-	
-	/**
-	 * Sets the Country name
-	 */
-	void setCountry(QString& name);
-	
-	/**
-	 * Gets the geo info
-	 */
-	QtMobility::QGeoPositionInfo getGeo();
-	
-	/**
-	 * Sets the geo info
-	 */
-	void setGeo(QtMobility::QGeoPositionInfo& geo);
-	
-	/**
-	 * Gets the url
-	 */
-	QUrl getUrl();
-	
-	/**
-	 * Sets the url
-	 */
-	void setUrl(QUrl& url);
-
-	
-private:
-	QString m_name;
-	QString m_city;
-	QString m_street;
-	QString m_pin;
-	QString m_country;
-	QtMobility::QGeoPositionInfo m_geo;
-	QUrl m_url;
-	};
-
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfVenue&);
-/**
- * Internalization
- */
-QDataStream &operator>>(QDataStream &, SmfVenue&);
-#endif /* SMFVENUE_H_ */
--- a/example/clientapi/smf/inc/common/smfpictures/smfcomment.h	Thu Mar 25 14:44:08 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/**
- * @file	smfcomment.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
- * 
- * @section DESCRIPTION
- *
- * The comment class represents a comment on a picture or a music track
- */
-
-#ifndef SMFCOMMENT_H_
-#define SMFCOMMENT_H_
-
-#include <QDateTime>
-#include <qdatastream.h>
-#include "SmfClientGlobal.h"
-/**
- * The comment class represents a comment on a picture or a music track
- */
-class SMFCLIENT_EXPORT SmfComment : public QObject
-	{
-	Q_OBJECT
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object 
-	 */
-	SmfComment( QObject *aParent = 0 );
-	/**
-	 * Destructor
-	 */
-	~SmfComment( );
-	
-
-	/**
-	 * Method to get the comment text
-	 * @param aText The comment text
-	 */
-	void getText( QString &aText );
-	
-	/**
-	 * Method to get the comment time stamp
-	 * @param aTimeStamp The comment time stamp value
-	 */
-	void getTimeStamp( QDateTime &aTimeStamp );
-	
-	/**
-	 * Method to get the id of the comment
-	 * @param aId The ID value 
-	 */
-	void getId( QString &aId );
-	
-	/**
-	 * Method to set the comment text
-	 * @param aText The comment text to be set
-	 */
-	void setText( const QString &aText );
-	
-	/**
-	 * Method to set the comment time stamp
-	 * @param aTimeStamp The comment time stamp value to be set
-	 */
-	void setTimeStamp( const QDateTime &aTimeStamp );
-	
-private:
-	QString m_text;			// comment text
-	QDateTime m_timeStamp;	// comment time stamp
-	QString m_commetnId;
-	
-	};
-/**
- * Externalization
- */
-QDataStream &operator<<(QDataStream &, const SmfComment &);
-/**
- * Internalization
- */
-QDataStream &operator>>(QDataStream &, SmfComment &);
-#endif /* SMFCOMMENT_H_ */
--- a/example/clientapi/smf/inc/common/smfpictures/smfpicture.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/common/smfpictures/smfpicture.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,20 @@
 /**
- * @file	smfpicture.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
  * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
  * 
- * @section DESCRIPTION
+ * Description:
+ * The picture class represents an instance of a picture
  *
- * The picture class represents an instance of a picture
  */
 
 #ifndef SMFPICTURE_H_
@@ -24,7 +24,11 @@
 #include <QStringList>
 #include <QUrl>
 #include <qdatastream.h>
-#include "SmfClientGlobal.h"
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfPicturePrivate;
+
 /**
  * SmfPictureVisibility enumeration
  */
@@ -36,7 +40,9 @@
 	SMFVisibilityGroup,
 	SMFVisibilityPublic
 	};
+
 /**
+ * @ingroup smf_common_group
  * The picture class represents an instance of a picture
  */
 class SMFCLIENT_EXPORT SmfPicture : public QObject
@@ -50,71 +56,81 @@
 	SmfPicture( QObject *aParent = 0 );
 	
 	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPicture( const SmfPicture &aOther );
+	
+	/**
+	 * CConstructs SmfPicture from QImage
+	 * @param aOther The QImage
+	 */
+	SmfPicture( const QImage &image );
+	
+	/**
 	 * Destructor
 	 */
 	~SmfPicture( );
 	
-	
 	/**
 	 * Method to get the id of the picture
-	 * @param aId The ID value 
+	 * @return The ID value 
 	 */
-	void getId( QString &aId );
+	QString id( ) const;
 	
 	/**
 	 * Method to get a picture owner
-	 * @param aOwner The owner of the picture
+	 * @return The owner of the picture
 	 */
-	void getOwner( QString &aOwner );
+	QString owner( ) const;
 	
 	/**
 	 * Method to get a picture title
-	 * @param aTitle The title of the picture
+	 * @return The title of the picture
 	 */
-	void getTitle( QString &aTitle );
+	QString title( ) const;
 	
 	/**
 	 * Method to get a picture description
-	 * @param aDescription The description of the picture
+	 * @return The description of the picture
 	 */
-	void getDescription( QString &aDescription );
+	QString description( ) const;
 	
 	/**
 	 * Method to get a visibility of a picture for public
-	 * @param aVisibility The visibility mode of 
-	 * this picture for others
+	 * @return The visibility mode of this picture for others
 	 */
-	void getVisibility( SmfPictureVisibility &aVisibility );
+	SmfPictureVisibility visibility( ) const;
 	
 	/**
 	 * Method to get the date of posting the picture
-	 * @param aPostedOn The posted date of the picture
+	 * @return The posted date of the picture
 	 */
-	void getPostedDate( QDateTime &aPostedOn );
+	QDateTime postedDate( ) const;
 	
 	/**
 	 * Method to get the comments for the picture
-	 * @param aComments The comments for the picture
+	 * @return The comments for the picture
 	 */
-	void getComments( QStringList &aComments );
+	QStringList comments( ) const;
 	
 	/**
 	 * Method to get the tags for the picture
-	 * @param aTags The tags for the picture
+	 * @return The tags for the picture
 	 */
-	void getTags( QStringList &aTags );
+	QStringList tags( ) const;
 	
 	/**
 	 * Method to get the url of the picture
-	 * @param aUrl The url of the picture
+	 * @return The url of the picture
 	 */
-	void getUrl( QUrl &aUrl );
+	QUrl url( ) const;
 	
 	/**
-	 * Method to get the picture data as a byte array
-	 * @param aData The picture as a byte array
+	 * Method to get the picture data as QImage
+	 * @return The picture as QImage
 	 */
-	void getPicture( QByteArray &aData );
+	QImage picture( ) const;
 		
 	/**
 	 * Method to set a picture owner
@@ -142,51 +158,53 @@
 	void setVisibility( const SmfPictureVisibility &aVisibility );
 	
 	/**
-	 * Method to set the date of posting the picture
-	 * @param aPostedOn The posted date of the picture
-	 */
-	void setPostedDate( const QDateTime &aPostedOn );
-	
-	/**
-	 * Method to set the comments for the picture
+	 * Method to add comment on the picture
 	 * @param aComment The comment for the picture
 	 */
-	void setComment( const QString &aComment );
+	void addComment( const QString &aComment );
 	
 	/**
-	 * Method to set the tags for the picture
+	 * Method to add tags for the picture
 	 * @param aTag The tag for the picture
 	 */
-	void setTag( const QString &aTag );
+	void addTags( const QStringList &aTags );
 	
 	/**
-	 * Method to set the picture data as a byte array
-	 * @param aData The picture as a byte array
+	 * Method to set the picture data as QImage
+	 * @param aData The picture as QImage
 	 */
-	void setPicture( const QByteArray &aData );
+	void setPicture( const QImage &aData );
 	
 private:
-	QString m_photoid;		// unique ID of the picture, service provider specific
-	QString m_owner;	// owner of the picture
-	QString m_title;	// picture title
-	QString m_descrition;// description
-	bool m_ispublic;// visibility for public, Set to 0 for no, 1 for yes.
-	bool m_isfriend;// visilibility for friends Set to 0 for no, 1 for yes.
-	bool m_isfamily;// visilibility for family Set to 0 for no, 1 for yes.
-	QDateTime m_postedon;// date posted
-	QStringList m_comments;// comments
-	QStringList m_tags;	// tags
-	QUrl m_url;			// url
-	QByteArray* m_picture;	// picture data as bytearray
-	QString m_caption;	// caption
+	QSharedDataPointer<SmfPicturePrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPicture &aPic );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPicture &aPic );
 	
 	};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfPicture&);
+
+
 /**
- * Internalization
+ * Method for Externalization. Writes the SmfPicture object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPic The SmfPicture object to be externalized
+ * @return reference to the written stream
  */
-QDataStream &operator>>(QDataStream &, SmfPicture&);
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPicture &aPic );
+
+/**
+ * Method for Internalization. Reads a SmfPicture object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPic The SmfPicture object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPicture &aPic);
+
 #endif /* SMFPICTURE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfpictures/smfpicture_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPicture class
+ *
+ */
+
+#ifndef SMFPICTURE_P_H_
+#define SMFPICTURE_P_H_
+
+
+#include <QDateTime>
+#include <QStringList>
+#include <QUrl>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+class SmfPicturePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPicturePrivate( ) { 
+		m_photoId.clear();
+		m_owner.clear();
+		m_title.clear();
+		m_description.clear();
+		m_comments.clear();
+		m_tags.clear();
+		m_url.clear();
+		m_caption.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPicturePrivate( const SmfPicturePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_photoId ( aOther.m_photoId ),
+		m_owner ( aOther.m_owner ),
+		m_title ( aOther.m_title ),
+		m_description ( aOther.m_description ),
+		m_picVisibility ( aOther.m_picVisibility ),
+		m_postedOn ( aOther.m_postedOn ),
+		m_comments ( aOther.m_comments ),
+		m_tags ( aOther.m_tags ),
+		m_url ( aOther.m_url ),
+		m_picture ( aOther.m_picture ),
+		m_caption ( aOther.m_caption ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPicturePrivate( );
+  
+	QString m_photoId;		// unique ID of the picture, service provider specific
+	QString m_owner;	// owner of the picture
+	QString m_title;	// picture title
+	QString m_description;// description
+	SmfPictureVisibility m_picVisibility; // picture visibility
+	QDateTime m_postedOn;// date posted
+	QStringList m_comments;// comments
+	QStringList m_tags;	// tags
+	QUrl m_url;			// url
+	QImage m_picture;	// picture data as bytearray
+	QString m_caption;	// caption
+	
+};
+
+#endif /* SMFPICTURE_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfplace/smfplace.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfPlace class represents a place and its related information
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+#ifndef SMFPLACE_H_
+#define SMFPLACE_H_
+
+#include <QUrl>
+#include <qgeopositioninfo.h> // Qt mobility class
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+
+using namespace QtMobility; // Qt mobility - namespace
+
+typedef enum 
+{
+	SearchByStreet = 0x00,
+	SearchByLocality,
+	SearchByPostOffice,
+	SearchByTown,
+	SearchByRegion,
+	SearchByState,
+	SearchByCountry
+}SmfLocationSearchBoundary;
+
+class SmfPlacePrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfPlace class represents a place and its related information.
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+class SMFCLIENT_EXPORT SmfPlace : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPlace( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPlace( const SmfPlace &aOther );
+	
+	/**
+	 * Overloaded = operator 
+	 * @param aOther The reference object
+	 */
+	SmfPlace operator=( const SmfPlace &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlace( );
+	
+	/**
+	 * Method to get the place name
+	 * @return The place name
+	 */
+	QString name( ) const;
+	
+	/**
+	 * Method to get the city of place
+	 * @return The city of the place
+	 */
+	QString city( ) const;
+	
+	/**
+	 * Method to get the street information of place
+	 * @return The street information of the place
+	 */
+	QString street( ) const;
+	
+	/**
+	 * Method to get the zip code of place
+	 * @return The zip code of place
+	 */
+	QString zipCode( ) const;
+	
+	/**
+	 * Method to get the country of place
+	 * @return The country of place
+	 */
+	QString country( ) const;
+	
+	/**
+	 * Method to get the Geo Position information (like information gathered 
+	 * on a global position, direction and velocity at a particular point 
+	 * in time) of the place.
+	 * @return The Geo Position information of place
+	 */
+	QtMobility::QGeoPositionInfo geoPositionInfo( ) const;
+	
+	/**
+	 * Method to get the url indicating the place
+	 * @return The url indicating the place
+	 */
+	QUrl url( ) const;
+	
+	/**
+	 * Method to get the id of the place
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the place name
+	 * @param aPlace The new place name
+	 */
+	void setName( const QString& aPlace );
+	
+	/**
+	 * Method to set the city of  place
+	 * @param aCity The new city of the place
+	 */
+	void setCity( const QString& aCity );
+	
+	/**
+	 * Method to set the street information of place
+	 * @param aStreet The new street information of the place
+	 */
+	void setStreet( const QString& aStreet );
+	
+	/**
+	 * Method to set the zip code of place
+	 * @param aZipCode The new zip code of place
+	 */
+	void setZipCode( const QString& aZipCode );
+	
+	/**
+	 * Method to set the country of place
+	 * @param aCountry The new country of place
+	 */
+	void setCountry( const QString& aCountry );
+	
+	/**
+	 * Method to set the Geo Postion information (like information gathered 
+	 * on a global position, direction and velocity at a particular point 
+	 * in time) of the place.
+	 * @param aGeoPosInfo The new Geo Position information of place
+	 */
+	void setGeoPositionInfo( const QtMobility::QGeoPositionInfo& aGeoPosInfo );
+	
+	/**
+	 * Method to set the url indicating the place
+	 * @param aUrl The new url indicating the place
+	 */
+	void setUrl( const QUrl& aUrl );
+	
+private:
+	QSharedDataPointer<SmfPlacePrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPlace &aPlace );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPlace &aPlace );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfPlace object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlace The SmfPlace object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPlace &aPlace );
+
+/**
+ * Method for Internalization. Reads a SmfPlace object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlace The SmfPlace object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPlace &aPlace);
+
+#endif /* SMFPLACE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfplace/smfplace_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPlace class
+ *
+ */
+
+#ifndef SMFPLACE_P_H_
+#define SMFPLACE_P_H_
+
+#include <QUrl>
+#include <qgeopositioninfo.h> // Qt mobility class
+#include <QSharedData>
+
+using namespace QtMobility; // Qt mobility - namespace
+
+class SmfPlacePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPlacePrivate( ) { 
+		m_name.clear();
+		m_city.clear();
+		m_street.clear();
+		m_zipcode.clear();
+		m_country.clear();
+		m_url.clear();
+		m_placeId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPlacePrivate( const SmfPlacePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ),
+		m_city ( aOther.m_city ),
+		m_street ( aOther.m_street ),
+		m_zipcode ( aOther.m_zipcode ),
+		m_country ( aOther.m_country ),
+		m_geo ( aOther.m_geo ),
+		m_url ( aOther.m_url ),
+		m_placeId ( aOther.m_placeId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlacePrivate( );
+  
+	QString m_name;						// place name
+	QString m_city;						// city of place
+	QString m_street;					// street of place
+	QString m_zipcode;					// zip code of place
+	QString m_country;					// country of place
+	QtMobility::QGeoPositionInfo m_geo;	// place geo position information
+	QUrl m_url;							// url indicating the place
+	QString m_placeId;					// place id
+	
+};
+
+#endif /* SMFPLACE_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfclient.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#ifndef SMFCLIENT_H
+#define SMFCLIENT_H
+
+#include <QObject>
+#include <QImage>
+#include <QUrl>
+
+#include "../common/SmfClientGlobal.h"
+
+class SmfProvider;
+
+/**
+ * @ingroup smf_client_group 
+ * Interface for a base service provider. Other service provider classes contains 
+ * implementation of this base class so that each has access to service provider 
+ * information.
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ */
+class SMFCLIENT_EXPORT SmfClient
+{
+  /*Q_OBJECT*/
+
+public:
+
+  /**
+   * @param name of the service 
+   * @return service provider list
+   */
+  static QList<SmfProvider>* GetServices(const QString& serviceName); 
+  static QList<SmfProvider>* GetServices(const QString& serviceName, const QString& providerName);
+  static QList<SmfProvider>* GetServices(const QString& serviceName, const SmfProvider& provider);  
+};
+
+
+#endif // SMFCLIENT_H
--- a/example/clientapi/smf/inc/smfclient/smfcontactfetcher.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfclient/smfcontactfetcher.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,36 +1,39 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for list of contacts from a site
-*
-*/
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
 
 #ifndef SMFCONTACTHETCHER_H
 #define SMFCONTACTHETCHER_H
 
 #include <QObject>
+#include "smfglobal.h"
 #include "smfprovider.h"
 #include "smfcontact.h"
-
+#include "smfplace.h"
 class SmfProvider; //base-class for service provider
 class SmfContact; //class for Contact in a social network
 class SmfGroup; //class for a group in social network
-class SmfContactList;
+typedef QList<SmfContact>  SmfContactList;
 
 //List of SmfGroup
 typedef QList<SmfGroup> SmfGroupList;
 /**
+ * @ingroup smf_client_group 
  * Interface to search for contacts/connections from a service provider. This class
  * provides basic functionality to allow applications to obtain list of
  * contacts or friends in a social networking service.
@@ -54,61 +57,88 @@
    * @param parent base provider info
    * @param contact Used for searching friends of the given contact
    * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind 
+   * be generated by SMF factory of some kind
    */
-  SmfContactFetcher(SmfProvider* baseProvider = 0, SmfContact* contact = 0);
+  SmfContactFetcher(SmfProvider* baseProvider);
+  SmfContactFetcher(SmfProvider* baseProvider, SmfContact* contact);
   ~SmfContactFetcher();
 
 public:
   /**
    * Get the friend listing asynchronously. The friendsListAvailable() signal
-   * is emitted with SmfContactList once data is arrived. 
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void friends() = 0; // list of contact objects
-  
+  bool friends(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
   /**
    * Get the list of followers asynchronously. The followersListAvailable() signal
-   * is emitted with SmfContactList once data is arrived. 
+   * is emitted with SmfContactList once data is arrived. Please note that some
+   * service may not support followers/fans - FALSE is returned if not supported.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void followers() = 0; // list of contact objects
-  
+  bool followers(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE); // list of contact objects
+
   /**
    * Searches for a contact The searchContactFinished() signal
-   * is emitted with SmfContactList once data is arrived.
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void search(SmfContact* contact) = 0; // list of contact objects
-  
+  void search(SmfContact* contact,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
+
+  /**
+   * Searches for a contacts (friends) who are near the user.
+   * Signal searchNearFinished() is emitted with SmfContactList once data is arrived.
+   * Proximity defines accuracy level
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+   bool searchNear(SmfPlace* location,SmfLocationSearchBoundary proximity,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
+
+
   /**
    * Get the list of groups. The groupListAvailable() signal
-   * is emitted with SmfGroupList once data is arrived. 
+   * is emitted with SmfGroupList once data is arrived. False might be returned
+   * if this service doesn't support any mode of grouping (very rare).
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void groups() = 0; // list of group objects
-  
+   bool groups(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of group objects
+
   /**
-   * Searches for Smf Contacts in an Smf group
+   * Searches for Smf Contacts in an Smf group.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    * @param  group The group to be searcged in
-   * The nextDataPageAvailable() signal
-   * of SmfProvider is emitted with SmfContactList once data is arrived.
    */
-  virtual void searchInGroup(SmfGroup group) = 0; // list of contact objects
+   bool searchInGroup(SmfGroup group,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
+
 
- 
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
-
+   SmfProvider* getProvider() ;
 
 public slots:
 
-Q_SIGNALS:
+signals:
 
 	/**
 	 * This signal is emitted when a request to get friends is completed.
@@ -116,10 +146,10 @@
 	 * In that case this signal is emitted multiple times.
 	 *  @param list list of friends
 	 *  @param error error string
-	 *  @param pageNumber Page number
+	 *  @param resultPage Page number info
 	 *  @see friends()
 	 */
-	void friendsListAvailable(SmfContactList* list, QString error, int pageNumber=0); 
+	void friendsListAvailable(SmfContactList* list, QString error, SmfResultPage resultPage);
 
 	/**
 	 * This signal is emitted when a request to get followers is completed
@@ -127,45 +157,56 @@
 	 *  In that case this signal is emitted multiple times.
 	 *  @param list list of followers
 	 *  @param error error string
-	 *  @param pageNumber Page number
+	 *  @param resultPage Page number info
 	 *  @see followers()
 	 */
-	void followersListAvailable(SmfContactList* list, QString error, int pageNumber=0); 
-	
+	void followersListAvailable(SmfContactList* list, QString error, SmfResultPage resultPage);
+
 	/**
 	 * This signal is emitted when a request to get groups is completed
 	 * Note if number of groups is large, then it can download the list page by page
 	 *  In that case this signal is emitted multiple times.
 	 *  @param list list of groups
 	 *  @param error error string
-	 *  @param pageNumber Page number
+	 *  @param resultPage Page number info
 	 *  @see groups()
 	 */
-	void groupListAvailable(SmfGroupList* list, QString error, int pageNumber=0);
-	
+	void groupListAvailable(SmfGroupList* list, QString error, SmfResultPage resultPage);
+
 	/**
 	 * Emitted when search for a contact is finished.
 	 * Note if number of contacts in the search is large, then it can download the list page by page
 	 * In that case this signal is emitted multiple times.
 	 * @param list List of filtered contacts
-	 * @param pageNumber Page number
+	 * @param resultPage Page number info
 	 * @see search()
 	 */
-	void searchContactFinished(SmfContactList* list,QString error, int pageNumber=0);
-	
+	void searchContactFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
+
+
+	/**
+	 * Emitted when search for contacts who are near a geographic location, is finished.
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list List of filtered contacts
+	 * @param resultPage Page number info
+	 * @see search()
+	 */
+	void searchNearFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
+
 	/**
 	 * Emitted when search for a contact in a group is finished
 	 * Note if number of contacts in the search is large, then it can download the list page by page
 	 * In that case this signal is emitted multiple times.
 	 * @param list list of filtered contacts
-	 * @param pageNumber Page number
+	 * @param resultPage Page number info
 	 * @see searchInGroup()
 	 */
-	void searchInGroupFinished(SmfContactList* list,QString error, int pageNumber=0);
+	void searchInGroupFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
 
 private:
   SmfProvider* m_baseProvider;
 };
 
-SMF_GETSERVICES(SmfContactFetcher, "org.symbian.smf.client.contact.fetcher\0.2")
+SMF_SERVICE_NAME(SmfContactFetcher, "org.symbian.smf.client.contact.fetcher\0.2")
 #endif // SMFCONTACTHETCHER_H
--- a/example/clientapi/smf/inc/smfclient/smfgallery.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfclient/smfgallery.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,31 +1,31 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for a remote picture gallery
-*
-*/
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
 
 #ifndef SMFGALLERY_H
 #define SMFGALLERY_H
 
-
+#include "smfglobal.h"
 #include "smfprovider.h"
 #include "../common/SmfClientGlobal.h"
 class SmfProvider;
+class SmfComment; //user id, string, and url
 class SmfPicture;
-class SmfGalleryModel;
-class SmfComment; //user id, string, and url
 
 
 #include <QObject>
@@ -34,6 +34,7 @@
 //List of SmfPicture
 typedef QList<SmfPicture> SmfPictureList;
 /**
+ * @ingroup smf_client_group 
  * Interface to a remote gallery service. This class
  * provides some basic gallery functionality to allow applications
  * to interact with a picture gallery in a social network.
@@ -65,30 +66,24 @@
   /**
    * Get the picture listing asynchronously.
    * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void pictures() = 0; 
-  
-  /**
-   * Returns model
-   */
-  virtual SmfGalleryModel model() = 0; // maybe we can make a QItemModel-derived model?
-  
+  void pictures(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
   /**
    * Returns a user title/caption for the picture
    */
-  virtual QString description() = 0; // A user title or caption, maybe?
-  
+  QString description(SmfPicture& picture); // A user title or caption, maybe?
+
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+   SmfProvider* getProvider() ;
 
 public slots:
 	/**
@@ -96,22 +91,22 @@
 	 * uploadFinished() signal is emitted with the success value of the upload
 	 * @param image the image to be uploaded
 	 */
-  virtual void upload(SmfPicture* image) = 0;
-  
+   void upload(SmfPicture* image) ;
+
 	/**
 	 * Upload an list image.Implemented as slot to connect to UI controls more easily
 	 * uploadFinished() signal is emitted with the success value of the upload
 	 * @param images the list image to be uploaded
 	 */
-  virtual void upload(SmfPictureList* images) = 0;
-  
+   void upload(SmfPictureList* images) ;
+
   /**
    * Posts a comment for an image. uploadFinished() signal is emitted
    * with success of the post once comment is posted.
    * @param image Image to comment on
    * @param comment Comment to post
    */
-  virtual void postComment(SmfPicture image, SmfComment comment) = 0;
+   void postComment(SmfPicture image, SmfComment comment) ;
 
 signals:
 	/*
@@ -121,20 +116,20 @@
 	 * through pictures().
 	 * @param pics Picture list
 	 * @param error Error string
-	 * @param pageNumber Page number
+	 * @param resultPage Page number info
 	 */
-	void picturesAvailable(SmfPictureList* pics, QString error, int pageNumber=0);
-  
+	void picturesAvailable(SmfPictureList* pics, QString error, SmfResultPage resultPage);
+
   /**
    * Notification of the success of the uploading of image/comment
-   * @param success The success of the post
+   * @param error The upload success result of each individual pictures
    */
-  void uploadFinished(bool success);
+  void uploadFinished(QList<bool> error);
 private:
   SmfProvider* m_baseProvider;
 };
 
-SMF_GETSERVICES(SmfGallery, "org.symbian.smf.client.gallery\0.2")
+SMF_SERVICE_NAME(SmfGallery, "org.symbian.smf.client.gallery\0.2")
 
 #endif // SMFGALLERY_H
 
--- a/example/clientapi/smf/inc/smfclient/smfmusic.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfclient/smfmusic.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,21 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-* 
-* Description:
-* Interface spefication for music related services
-*
-*/
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
 
 #ifndef SMFMUSIC_H
 #define SMMUSIC_H
@@ -24,9 +25,10 @@
 #include <qmobilityglobal.h>
 #include <qgeopositioninfo.h>
 
+#include "smfglobal.h"
 #include "smfprovider.h"
 #include "smfcontact.h"
-
+#include "smfevent.h"
 
 class SmfProvider; //basic Smf service Provider info
 class SmfContact; // Smf contact
@@ -35,8 +37,7 @@
 class SmfTrackInfo; //id, title, album, artist, genre, tag, director,release year, rating, comment info
 class SmfMusicFingerPrint; //generation is not in scope of smf
 class SmfVenue;
-class SmfMusicModel;
-class SmfEvents;
+class SmfEvent;
 class SmfPlaylist;
 class SmfLyricsService;
 class SmfLyrics;
@@ -45,13 +46,14 @@
 
 typedef QList<SmfMusicProfile> SmfMusicProfileList;
 typedef QList<SmfTrackInfo> SmfTrackInfoList;
-typedef QList<SmfEvents> SmfEventsList;
+typedef QList<SmfEvent> SmfEventsList;
 typedef QList<SmfProvider> SmfProviderList;
 typedef QList<SmfPlaylist> SmfPlaylistList;
 typedef QList<SmfVenue> SmfVenueList;
 typedef QList<SmfLyrics> SmfLyricsList;
 typedef QList<SmfSubtitle> SmfSubtitleList;
 /**
+ * @ingroup smf_client_group
   * Basic music service ("org.symbian.smf.client.music.service")
   */
 class SMFCLIENT_EXPORT SmfMusicService : public QObject
@@ -69,35 +71,28 @@
   ~SmfMusicService();
 
 public:
-  
+
   /**
    * Gets self profile information asynchronously.
    * userInfoAvailable() signal is emitted with SmfMusicProfile when the info is arrived
    */
-  virtual void userinfo() = 0; 
-  
+  void userinfo() ;
+
   /**
    * Asynchronously searches information about other service users for a particular venue
-   * serachInfoAvailable() signal is emitted with SmfMusicProfileList when the info is arrived
+   * searchInfoAvailable() signal is emitted with SmfMusicProfileList when the info is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void searchUser(SmfVenue venue) = 0; 
-  
-  /**
-   * Returns the model
-   */
-  virtual SmfMusicModel model() = 0; // maybe we can make a QItemModel-derived model?
+  void searchUser(SmfVenue venue,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
 
-  //APIs to get/set base provider info (SmfProvider)
-  
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+  SmfProvider* getProvider() ;
+
 
 signals:
 	/**
@@ -105,10 +100,12 @@
 	 * @param profile The self profile
 	 */
 	void userInfoAvailable(SmfMusicProfile* profile, QString error);
+
+	void searchInfoAvailable(SmfMusicProfileList& profileList, QString error,SmfResultPage resultPage);
 private:
   SmfProvider* m_baseProvider;
 };
-SMF_GETSERVICES(SmfMusicService, "org.symbian.smf.client.music.service\0.2")
+SMF_SERVICE_NAME(SmfMusicService, "org.symbian.smf.client.music.service\0.2")
 
 
 /**
@@ -130,49 +127,57 @@
 
 public:
   // Get the track listing - might be made asynchrnous later
-  
+
   /**
    * Searches for music recommendations similar to a particulartrack asynchronously.
    * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
    * once its arrived.
-   * @param track The track for which similar recommendations need to be fetched.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param track The track for which similar recommendations need to be fetched.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void recommendations(SmfTrackInfo track) = 0; // basic list of track objects
-  
+  void recommendations(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of track objects
+
   /**
    * Searches for tracks similar to a given track asynchronously.
    * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
    * once its arrived.
-   * @param track The search criteria, similar tracks are searched
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param track The search criteria, similar tracks are searched
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void tracks(SmfTrackInfo track) = 0; // basic list of track objects
-  
+  void tracks(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of track objects
+
   /**
    * Searches for a track having similar finger print asynchronously.
    * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
    * once its arrived.
-   * @param signature The search criteria,signature to be searched for
+   * @param signature The search criteria,signature to be searched for
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void trackInfo(SmfMusicFingerPrint signature) = 0; // search by fingerprint object
-  
+  void trackInfo(SmfMusicFingerPrint signature,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // search by fingerprint object
+
   /**
    * Search information about where to buy this song from asynchronously.
    * The signal storeSearchAvailable() is emitted with SmfProviderList once its arrived.
-   * @param track The search criteria for stores
+   * @param track The search criteria for stores
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void stores(SmfTrackInfo track) = 0; 
-  
+  void stores(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
+
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+  SmfProvider* getProvider()  ;
+
 
 public slots:
 
@@ -181,30 +186,30 @@
 	 * Success can be checked by checking the signal postFinished()
 	 * @param track Track to post
 	 */
-  virtual void postCurrentPlaying(SmfTrackInfo track) = 0;
-  //virtual int postRating(SmfTrackInfo track, SmfMusicRating rate) = 0;
-  //virtual int postComments(SmfTrackInfo track, SmfComment comment) = 0;
+  void postCurrentPlaying(SmfTrackInfo track)  ;
+  //int postRating(SmfTrackInfo track, SmfMusicRating rate)  ;
+  //int postComments(SmfTrackInfo track, SmfComment comment)  ;
 
 signals:
 	/**
 	 * Emitted when the search result for a track is available.
 	 * Note if number of tacks in the search is large, then it can download the list page by page.
 	 * In that case this signal is emitted multiple times.
-	 * @param result The search result
+	 * @param resultPage Page number info
 	 */
-	void trackSearchAvailable(SmfTrackInfoList* result, QString error, int pageNumber=0);
-	
+	void trackSearchAvailable(SmfTrackInfoList* result, QString error,SmfResultPage resultPage);
+
 	/**
 	 *  Emitted when the search result for a store is available.
 	 *  Note if number of tacks in the search is large, then it can download the list page by page.
 	 *  In that case this signal is emitted multiple times.
-	 *  @param result The search result
+	 *  @param resultPage Page number info
 	 */
-	void storeSearchAvailable(SmfProviderList* result, QString error, int pageNumber=0);
+	void storeSearchAvailable(SmfProviderList* result, QString error, SmfResultPage resultPage);
 private:
   SmfProvider* m_baseProvider;
 };
-SMF_GETSERVICES(SmfMusicSearch, "org.symbian.smf.client.music.search\0.2")
+SMF_SERVICE_NAME(SmfMusicSearch, "org.symbian.smf.client.music.search\0.2")
 
 
 /**
@@ -213,41 +218,41 @@
 class SMFCLIENT_EXPORT SmfPlaylist : public QObject
 	{
 	Q_OBJECT
-	
+
 public:
 	SmfPlaylist();
 	~SmfPlaylist();
-	
+
 	/**
 	 * Gets tracks in the playlist
 	 */
 	SmfTrackInfoList* getTrackList();
-	
+
 	/**
 	 * Gets playlist title
 	 */
 	QString getPlayListTitle();
-	
+
 	/**
 	 * Gets the creation date
 	 */
 	QDateTime getCreationDate();
-	
+
 	/**
 	 * Sets tracks in the playlist
 	 */
 	void setTrackList(SmfTrackInfoList* trackList);
-	
+
 	/**
 	 * Sets playlist title
 	 */
 	void setPlayListTitle(QString title);
-	
+
 	/**
 	 * Sets creation date
 	 */
 	void setCreationDate(QDateTime time);
-	
+
 private:
 	SmfTrackInfoList* m_trackList;
 	QString m_title;
@@ -284,33 +289,37 @@
   ~SmfPlaylistService();
 
 public:
-  
+
   /**
    * Gets the list playlists for the logged-in user asynchronously.
-   * The signal playlistsListAvailable() signal is emitted with 
-   * SmfPlaylistList once its arrived 
+   * The signal playlistsListAvailable() signal is emitted with
+   * SmfPlaylistList once its arrived .
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void playlists() = 0; // basic list of playlist objects 
-  
+  void playlists(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of playlist objects
+
   /**
    * Gets the list playlists for the given user asynchronously.
-   * The signal playlistsListAvailable() signal is emitted with 
+   * The signal playlistsListAvailable() signal is emitted with
    * SmfPlaylistList once its arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
    * @param user User for which to get the playlists
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void playlistsOf(SmfMusicProfile* user) = 0; 
+  void playlistsOf(SmfMusicProfile* user,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
 
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+  SmfProvider* getProvider()  ;
+
 
 public slots:
 
@@ -320,23 +329,24 @@
 	 * @param plst The playlist to be added in
 	 * @param tracks The list of tracks to uploaded
 	 */
-  virtual int addToPlaylist(SmfPlaylist plst, SmfTrackInfoList* tracks) = 0;
-  
+  int addToPlaylist(SmfPlaylist plst, SmfTrackInfoList* tracks)  ;
+
 	/**
 	 * Upload currently playing playlist . Signal
 	 * playlistUpdated() can be checked for success value
 	 * @param plst The playlist to be uploaded
 	 */
-  virtual int postCurrentPlayingPlaylist(SmfPlaylist plst) = 0;
+  int postCurrentPlayingPlaylist(SmfPlaylist plst)  ;
 
 
 signals:
 	/**
 	 * Notification of availability of list of playlists requested.
 	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
+	 * In that case this signal is emitted multiple times.
+	 * @param resultPage Page number info
 	 */
-	void playlistsListAvailable(SmfPlaylistList*, QString error, int pageNumber=0);
+	void playlistsListAvailable(SmfPlaylistList*, QString error, SmfResultPage resultPage);
 	/**
 	 * Signals remote updation of playlist with success value
 	 */
@@ -344,7 +354,7 @@
 private:
   SmfProvider* m_baseProvider;
 };
-SMF_GETSERVICES(SmfPlaylistService, "org.symbian.smf.client.music.playlist\0.2")
+SMF_SERVICE_NAME(SmfPlaylistService, "org.symbian.smf.client.music.playlist\0.2")
 
 
 /**
@@ -364,37 +374,45 @@
   ~SmfMusicEvents();
 
 public:
-  
+
   /**
    * Gets list of events in a particular location asynchronously.
-   * eventsAvailable() signal is emitted with SmfEventsList once its arrived
+   * eventsAvailable() signal is emitted with SmfEventsList once its arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void events(QtMobility::QContactGeolocation location) = 0;
-  
+  void events(QtMobility::QContactGeolocation location,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
+
   /**
    * Gets list of venues of a particular location asynchronously.
-   * venuesAvailable() signal is emitted with SmfVenueList once its arrived.
+   * venuesAvailable() signal is emitted with SmfVenueList once its arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void venues(QtMobility::QContactGeolocation location) = 0; // basic list of venue objects
-  
+  void venues(QtMobility::QContactGeolocation location,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of venue objects
+
   /**
    * Gets list of events in a particular venue asynchronously.
-   * eventsAvailable() signal is emitted with SmfEventsList once its arrived
+   * eventsAvailable() signal is emitted with SmfEventsList once its arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void events(SmfVenue venue) = 0; // basic list of events objects
-  
+  void events(SmfVenue venue,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of events objects
+
 
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+  SmfProvider* getProvider()  ;
+
 
 public slots:
 
@@ -403,32 +421,34 @@
 	 * eventsUpdated() signal can be checked for success value.
 	 * @param SmfEventsList List of events to be posted
 	 */
-	 virtual void postEvents(SmfEventsList events); 
+	 void postEvents(SmfEventsList events);
 
 signals:
-	
+
 	/**
 	 * Notification of the success of request to post an event
 	 */
 	void eventsUpdated(bool success);
-	
+
 	/**
 	 * Notification on arrival of event lists
 	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
+	 * In that case this signal is emitted multiple times.
+	 * @param resultPage Page number info
 	 */
-	void eventsAvailable(SmfEventsList* list, QString error, int pageNumber=0);
-	
+	void eventsAvailable(SmfEventsList* list, QString error, SmfResultPage resultPage);
+
 	/**
 	 *  Notification on arrival of venues lists
 	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
+	 * In that case this signal is emitted multiple times.
+	 * @param resultPage Page number info
 	 */
-	void venuesAvailable(SmfVenueList* list, QString error, int pageNumber=0);
+	void venuesAvailable(SmfVenueList* list, QString error, SmfResultPage resultPage);
 private:
   SmfProvider* m_baseProvider;
 };
-SMF_GETSERVICES(SmfMusicEvents, "org.symbian.smf.client.music.events\0.2")
+SMF_SERVICE_NAME(SmfMusicEvents, "org.symbian.smf.client.music.events\0.2")
 
 
 /**
@@ -449,56 +469,58 @@
   ~SmfLyricsService();
 
 public:
-  
+
   /**
    * Get the lyrics lists asynchrnously, it fetches texts without time info.
    * lyricsAvailable() notification comes SmfLyricsList with when the data is available
-   * @param track Track for which lyrics needs to be fetched.
+   * @param track Track for which lyrics needs to be fetched.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void lyrics(SmfTrackInfo track) = 0; 
-  
+  void lyrics(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
+
   /**
    * Get the lyrics lists asynchrnously, it fetches texts with time info.
    * Subtitle search filter can be applied
    * subtitleAvailable() notification comes SmfSubtitleList with when the data is available
    * @param track Track for which subtitle needs to be fetched.
    * @param filter Subtitle search filter
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
    */
-  virtual void subtitles(SmfTrackInfo track, SmfSubtitleSearchFilter filter) = 0; // texts with time information
+  void subtitles(SmfTrackInfo track, SmfSubtitleSearchFilter filter,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // texts with time information
   //APIs to get/set base provider info (SmfProvider)
-  
+
   /**
    * Gets the base provider info
    */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
+  SmfProvider* getProvider()  ;
+
 
 public slots:
 
 
 signals:
-	
+
 	/**
 	 * Notification on arrival of lyrics
 	 * Note if the list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
+	 * In that case this signal is emitted multiple times.
+	 * @param resultPage Page number info
 	 */
-	void lyricsAvailable(SmfLyricsList* list, QString error, int pageNumber=0);
+	void lyricsAvailable(SmfLyricsList* list, QString error, SmfResultPage resultPage);
 
 	/**
 	 * Notification on arrival of subtitle based on filter.
 	 * Note if the list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
+	 * In that case this signal is emitted multiple times.
+	 * @param resultPage Page number info
 	 */
-	void subtitleAvailable(SmfSubtitleList* list, QString error, int pageNumber=0);
+	void subtitleAvailable(SmfSubtitleList* list, QString error, SmfResultPage resultPage);
 private:
   SmfProvider* m_baseProvider;
 };
-SMF_GETSERVICES(SmfLyricsService, "org.symbian.smf.client.music.lyrics\0.2")
+SMF_SERVICE_NAME(SmfLyricsService, "org.symbian.smf.client.music.lyrics\0.2")
 
 #endif // SMFMUSIC_H
 
--- a/example/clientapi/smf/inc/smfclient/smfpostprovider.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfclient/smfpostprovider.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,29 +1,33 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for posting updates to a social site
-*
-*/
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
 #ifndef SMFPOSTPROVIDER_H
 #define SMFPOSTPROVIDER_H
 
 #include <QObject>
 #include <qmobilityglobal.h>
 #include <qgeopositioninfo.h>
+#include <QTextDocument>
 
+#include "smfglobal.h"
 #include "smfprovider.h"
 #include "smfcontact.h"
+#include "smfplace.h"
 
 class SmfProvider; //base-class for service provider
 class SmfContact; //class for Contact in a social network
@@ -31,132 +35,167 @@
 
 
 /**
- * Location info
+ * class for information (text, image and url) contained in post in social network
+ * This could be changed to contain html data
+ * 
+ * For those service provider which supports only string format, @see supportedFormats()
  */
-typedef QtMobility::QGeoPositionInfo SmfLocationInfo ;
-class SmfPost; //class for information (text, image and url) contained in post in social network
-class SmfContactModel;
-class SmfStatusData;
+class  SmfPost : public QTextDocument
+	{
+	Q_OBJECT
+	
+public:
+	SmfPost ( QObject * parent = 0 );
+	SmfPost ( const QString & text, QObject * parent = 0 );
+	
+private:
+	QString*	id;
+	SmfProvider* provider;
+	};
+
+/**
+ *  Presence info of the user
+ */
+enum SmfAppearenceInfo
+	{
+	ENotSupported,
+	EOnline,
+	EOffline,
+	EBusy,
+	EDoNotDisturb,
+	EAppearOffline,
+	EOther
+	};
 
 //Post lists
 typedef QList<SmfPost> SmfPostList;
+
 /**
+ * @ingroup smf_client_group 
  * Interface to post scrap/tweet like info.
  * Note that branding information for the particular service implementation
  * is available from getProvider() API. See also:
  * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
  *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
  * Interface name for SmfPostProvider is org.symbian.smf.client.contact.posts
  */
 class SMFCLIENT_EXPORT SmfPostProvider : public QObject
-{
-  Q_OBJECT
+	{
+	Q_OBJECT
+
+public:
+	/**
+	 * Constructs SmfPostProvider.
+	 * @param baseProvider The base provider info
+	 * Seeing as this is a plug-in implementation, these will realistically
+	 * be generated by SMF factory of some kind
+	 */
+	SmfPostProvider(SmfProvider* baseProvider);
+	~SmfPostProvider();
+
 
 public:
-  /**
-   * Constructs SmfPostProvider.
-   * @param baseProvider The base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-  SmfPostProvider(SmfProvider* baseProvider = 0);
-  ~SmfPostProvider();
+	/**
+	 * returns maximum no of chars (unicode) that service provider can post without truncation
+	 * negative value means no limit
+	 */
+	qint32 maxCharsInPost() const;
+	/**
+	 * returns maximum no of items that can be returned in a single query to getPosts
+	 * negative value means feature not supported.
+	 */
+	qint32 maxItems() const;
 
-  /**
-   *  Presence info of the user
-   */
-enum SmfPresenceInfo
-	{
-	  ENotSupported,
-	  EOnline,
-	  EOffline,
-	  EBusy,
-	  EDoNotDisturb,
-	  EAppearOffline,
-	  EOther
-	};
-
-public:
-  /**
-   * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
-   * once the post lists are available
-   * @see postsAvailable()
-   */
-  virtual void getPosts(SmfStatusData statusData) = 0; 
-  
-  /**
-   * Gets the model
-   */
-  virtual SmfContactModel   model() = 0; 
+	/**
+	 * returns all the formatting of posts that this service provider supports.
+	 * May return 0 items to mean only QString is supported.
+	 */
+	QVector<QTextFormat> supportedFormats () const;
+	
+	/**
+	 * returns whether this SP supports Appearence @see SmfAppearenceInfo
+	 */
+	bool supportsAppearence () const;
 
 public slots:
-
 	/**
-	 * Updates a post, the success of the post can be checked with signal
+	 * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+	 * once the post lists are available
+	 * @param user user's contact in this SP, omit for self contact
+	 * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+     * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
+	 * @see postsAvailable()
+	 */
+	void posts(SmfContact* user = 0,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+	
+	/**
+	 * Updates a post to own area, the success of the post can be checked with signal
 	 * updatePostFinished() signal
 	 * @param postData data to be posted
 	 * @param location location data
 	 */
-  virtual void updatePost(SmfPost& postData,SmfLocationInfo& location) = 0; // list of contact objects
+	void post(SmfPost& postData,SmfPlace& location) ; 
 	/**
-	 * Updates a post, the success of the post can be checked with signal
+	 * Updates the last post to own area with new data, the success of the post can be checked with signal
 	 * updatePostFinished() signal
-	 * @param postData data to be posted
+	 * @param postData edited/new data to be posted
 	 * @param location location data
 	 */
-  virtual void updatePost(SmfPost& postData) = 0; // list of contact objects
-  
-  /**
-   * Updates a post to a particular Smf contact. the success of the post can be checked with signal
-   * updatePostFinished() signal.
-   * @param postData data to be posted
-   * @param contact contact to which the post is to be directed
-   * @param location location data
-   */
-  virtual void updatePostDirected(SmfPost& postData,SmfContact& contact,SmfLocationInfo location) = 0; // list of contact objects
-  
-  /**
-   * Posts appearance info of the user.
-   * @param appearence user appearance
-   * @see SmfPresenceInfo
-   */
-  virtual QList<SmfContact> postAppearence(SmfPresenceInfo appearence) = 0; // appear offline, busy, do-not-disturb
-  
-  //APIs to get/set base provider info (SmfProvider)
-  
-  /**
-   * Gets the base provider info
-   */
-  virtual SmfProvider* getProvider() = 0;
-  
-  /**
-   * Sets the base provider info
-   */
-  virtual void setProvider(SmfProvider* provider) = 0;
-
-  Q_SIGNALS:
-
+	void updatePost(SmfPost& postData); 
+	
+	/**
+	 * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+	 * updatePostFinished() signal.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post is to be directed
+	 * @param location location data
+	 */
+	void postDirected(SmfPost& postData,SmfContact& contact,SmfPlace* location=0);
+	
+	/**
+	 * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
+	 * @param appearence user appearance
+	 * @see SmfPresenceInfo
+	 * @return False on Failure/Not supported 
+	 */
+	bool postAppearence(SmfAppearenceInfo appearence); 
+	/**
+	 * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
+	 * emits updatePostFinished() signal when done.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post belonged
+	 * @param bool whether user changed items within the post
+	 */
+	void sharePost(SmfPost& postData,SmfContact& contact,bool edited);
+	
+	//APIs to get/set base provider info (SmfProvider)
+	
+	/**
+	 * Gets the base provider info
+	 */
+	SmfProvider* getProvider() const;
+	
+signals:
+	
 	/**
 	 * Emitted when a request to  getPosts() is finished
 	 * Note if number of posts is large, then it can download the list page by page
 	 * In that case this signal is emitted multiple times.
 	 * @param list list of posts
 	 * @param error error string
-	 * @param pageNumber Page number
+	 * @param resultPage Page number info
 	 */
-	void postsAvailable(SmfPostList* list, QString error, int pageNumber=0);
+	void postsAvailable(SmfPostList* list, QString error, SmfResultPage resultPage);
 	
 	/**
 	 * Emitted when update post is finished.
 	 * @param success the success of the update
 	 */
-	void updatePostFinished(bool success);
+	void postFinished(bool success);
+	
+	private:
+	SmfProvider* m_baseProvider;
+	};
 
-private:
-  SmfProvider* m_baseProvider;
-};
-
-SMF_GETSERVICES(SmfPostProvider, "org.symbian.smf.client.contact.posts\0.2")
+SMF_SERVICE_NAME(SmfPostProvider, "org.symbian.smf.client.contact.posts\0.2")
 #endif // SMFPOSTPROVIDER_H
--- a/example/clientapi/smf/inc/smfclient/smfprovider.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfclient/smfprovider.h	Tue Apr 06 16:35:37 2010 +0530
@@ -1,20 +1,21 @@
 /**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for sfm service provider
-*
-*/
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
 
 #ifndef SMFPROVIDER_H
 #define SMFPROVIDER_H
@@ -25,6 +26,7 @@
 
 #include "../common/SmfClientGlobal.h"
 /**
+ * @ingroup smf_client_group 
  * Interface for a base service provider. Other service provider classes contains 
  * implementation of this base class so that each has access to service provider 
  * information.
@@ -48,30 +50,34 @@
    * Localizable name of the service 
    * @return service name
    */
-  virtual QString serviceName() = 0; 
+  QString& serviceName() const; 
   
   /**
    * Logo of the service
    * @return logo image of the service
    */
-  virtual QImage serviceIcon() = 0; // 
+  QImage& serviceIcon() const; 
   
   /**
    * Readable service description
    * @return service description
    */
-  virtual QString description() = 0; // readable service description
+  QString description() const; 
   
   /*
    * Website of the service
    */
-  virtual QUrl serviceUrl() = 0; //
+  QUrl serviceUrl() const;
   
   /**
    * URL of the application providing this service
    */
-  virtual QUrl applicationUrl() = 0; //
+  QUrl applicationUrl() const; //
   
+  /**
+   * service types - list of interfaces that this provider support
+   */
+  QList<QString> serviceTypes() const;
 };
 /**
 * Externalization
@@ -81,5 +87,5 @@
  * Internalization
  */
 QDataStream &operator>>(QDataStream &, SmfProvider&);
-SMF_GETSERVICES(SmfProvider, "org.symbian.smf.client.provider\0.2")
+
 #endif // SMFPROVIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/base/smfpluginbase.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,106 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfPluginBase class is the base class for all plugins.
+ *
+ */
+
+#ifndef SMFPLUGINBASE_H_
+#define SMFPLUGINBASE_H_
+
+#include <smfproviderbase.h>
+#include <QNetworkReply>
+#include <smfglobal.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * The SmfPluginBase class is the base class for all plugins 
+ */
+class SmfPluginBase : public QObject
+	{
+	Q_OBJECT
+
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPluginBase( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPluginBase( );
+
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData.
+	 * 
+	 * For SmfContactFetcherPlugin: If last operation was friends() or followers() 
+	 * or search() or searchInGroup() or searchNear(), aResult will be of type 
+	 * QList<SmfContact>. If last operation was groups(), aResult will be of 
+	 * type QList<SmfGroup>
+	 * For SmfPostProviderPlugin: If last operation was retrieve(), aResult will be 
+	 * of type QList<SmfPost>. If last operation was post() or updatePost() or 
+	 * postDirected() or commentOnAPost() or postAppearence(), aResult will be 
+	 * of type bool
+	 * For SmfLyricsServicePlugin: If last operation was lyrics(), aResult will 
+	 * be of type SmfLyrics. If last operation was subtitles(), aResult will 
+	 * be of type SmfSubtitle.
+	 * For SmfMusicEventsPlugin: If last operation was events(), aResult will 
+	 * be of type QList<SmfEvent>. If last operation was venues(), aResult 
+	 * will be of type QList<SmfPlace>. If last operation was postEvents(), 
+	 * aResult will be of type bool
+	 * For SmfMusicSearchPlugin: If last operation was recommendations() or 
+	 * tracks() or trackInfo(), aResult will be of type QList<SmfTrackInfo>. 
+	 * If last operation was stores(), aResult will be of type 
+	 * QList<SmfProvider>. If last operation was postCurrentPlaying(), 
+	 * aResult will be of type bool.
+	 * For SmfMusicServicePlugin: If last operation was userInfo(), aResult 
+	 * will be of type SmfMusicProfile. If last operation was searchUser(), 
+	 * aResult will be of type QList<SmfMusicProfile>.
+	 * For SmfPlaylistServicePlugin: If last operation was playlists() or 
+	 * playlistsOf(), aResult will be of type QList<SmfPlaylist>. If last 
+	 * operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
+	 * aResult will be of type bool.
+	 * For SmfGalleryPlugin: If last operation was pictures(), aResult will 
+	 * be of type QList<SmfPicture>. If last operation was description(), 
+	 * aResult will be of type QString. If last operation was upload() or 
+	 * postComment(), aResult will be of type bool.
+	 * 
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aPageResult [out] The SmfResultPage structure variable
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			SmfResultPage &aPageResult ) = 0;
+	
+	};
+
+
+#endif /* SMFPLUGINBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/base/smfproviderbase.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces.
+ *
+ */
+
+#ifndef SMFPROVIDERBASE_H_
+#define SMFPROVIDERBASE_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QBuffer>
+#include <smfglobal.h>
+#include <qdatastream.h>
+#include <QSharedData>
+
+class SmfProviderBasePrivate;
+
+/**
+ * @ingroup smf_plugin_group
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces.
+ * 
+ * All of plug-ins should contain this class as a member and should also 
+ * contain a public method to get instance of this class. 
+ */
+class SmfProviderBase : public QObject
+	{
+	Q_OBJECT
+
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfProviderBase( QObject* aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfProviderBase( const SmfProviderBase &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfProviderBase( );
+
+	/**
+	 * Method to get the Localisable name of the service.
+	 * @return The Localisable name of the service.
+	 */
+	QString serviceName( ) const;
+	
+	/**
+	 * Method to get the Logo of the service
+	 * @return The Logo of the service
+	 */
+	QImage serviceIcon( ) const;
+	
+	/**
+	 * Method to get the Readable service description
+	 * @return The Readable service description
+	 */
+	QString description( ) const;
+	
+	/**
+	 * Method to get the Website of the service
+	 * @return The Website of the service
+	 */
+	QUrl serviceUrl( ) const;
+	
+	/**
+	 * Method to get the URL of the Application providing this service
+	 * @return The URL of the Application providing this service
+	 */
+	QUrl applicationUrl( ) const;
+	
+	/**
+	 * Method to get the Icon of the application
+	 * @return The Icon of the application
+	 */
+	QImage applicationIcon( ) const;
+	
+	/**
+	 * Method to get the Plugin specific ID
+	 * @return The Plugin specific ID
+	 */
+	quint32 pluginId( ) const;
+	
+	/**
+	 * Method to get the ID of the authentication application 
+	 * for this service
+	 * @param aProgram The authentication application name
+	 * @param aArguments List of arguments required for authentication app
+	 * @param aMode Strting mode for authentication application
+	 * @return The ID of the authentication application 
+	 */
+	quint32 authenticationApp( QString &aProgram, QStringList & aArguments, 
+			QIODevice::OpenModeFlag aMode = QIODevice::ReadWrite ) const;
+	
+	/**
+	 * Method to get the unique registration ID provided by the 
+	 * Smf for authorised plugins
+	 * @return The unique registration ID/token provided by the Smf for 
+	 * authorised plugins
+	 */
+	QString smfRegistrationId( ) const;
+	
+	/**
+	 * Method to get the data usage of each plugin
+	 * @return The data usage structure
+	 */
+	SmfPluginDataUsage getDataUsage( ) const;
+	
+	/**
+	 * Method to get the reference count for loading.
+	 * The reference count increased with each load request and decreased 
+	 * with each unload request
+	 * @return The reference count value for loading of the plugins
+	 */
+	uint getLoadRefCount( ) const;
+	
+private:
+	QSharedDataPointer<SmfProviderBasePrivate> d;
+
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfProviderBase &aProviderBase );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfProviderBase &aProviderBase );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfProviderBase object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aProviderBase The SmfProviderBase object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfProviderBase &aProviderBase );
+
+/**
+ * Method for Internalization. Reads a SmfProviderBase object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aProviderBase The SmfProviderBase object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfProviderBase &aProviderBase);
+
+#endif /* SMFPROVIDERBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/base/smfproviderbase_p.h	Tue Apr 06 16:35:37 2010 +0530
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfProviderBase class
+ *
+ */
+
+#ifndef SMFPROVIDERBASE_P_H_
+#define SMFPROVIDERBASE_P_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QBuffer>
+#include <smfglobal.h>
+#include <QSharedData>
+
+
+class SmfProviderBasePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfProviderBasePrivate( ) { 
+		m_serviceName.clear(); 
+		m_description.clear();
+		m_serviceUrl.clear();
+		m_applicationUrl.clear();
+		m_pluginId = 0;
+		m_authenticationAppId = 0;
+		m_registrationId.clear();
+		m_loadRefCount = 0;
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfProviderBasePrivate( const SmfProviderBasePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_serviceName ( aOther.m_serviceName ),
+		m_serviceIcon ( aOther.m_serviceIcon ),
+		m_description ( aOther.m_description ),
+		m_serviceUrl ( aOther.m_serviceUrl ),
+		m_applicationUrl ( aOther.m_applicationUrl ),
+		m_applicationIcon ( aOther.m_applicationIcon ),
+		m_pluginId ( aOther.m_pluginId ),
+		m_authenticationAppId ( aOther.m_authenticationAppId ),
+		m_registrationId ( aOther.m_registrationId ), 
+		m_usage ( aOther.m_usage ),
+		m_loadRefCount ( aOther.m_loadRefCount )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfProviderBasePrivate( );
+  
+	QString m_serviceName;	// the Localisable name of the service
+	QImage m_serviceIcon;	// the Logo of the service
+	QString m_description;	// the Readable service description
+	QUrl m_serviceUrl;		// the Website of the service
+	QUrl m_applicationUrl; 	// URL of the Application providing this service
+	QImage m_applicationIcon;	//Icon of the application
+	quint32 m_pluginId;		// The Plugin specific ID
+	quint32 m_authenticationAppId; // ID of the authentication application for this service
+	QString m_registrationId; 	// unique registration ID provided by the 
+							// Smf for authorised plugins
+	SmfPluginDataUsage m_usage;	//data usage of each plugin
+	uint m_loadRefCount;	// reference count increased with each load request 
+							// and decreased with each unload request
+	
+};
+
+#endif /* SMFPROVIDERBASE_P_H_ */
--- a/example/clientapi/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,11 +20,13 @@
 #ifndef SMFCONTACTFETCHERPLUGIN_H_
 #define SMFCONTACTFETCHERPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smfcontact.h>
 #include <smfgroup.h>
+#include <smfplace.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for fetching contacts. This class provides 
  * basic functionality to allow applications to obtain list of
  * friends, followers, groups of a user in a social networking service.
@@ -32,7 +34,7 @@
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfContactFetcherPlugin : public QObject
+class SmfContactFetcherPlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -48,100 +50,79 @@
 	~SmfContactFetcherPlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-  
-	/**
 	 * Method to get the list of friends
 	 * @param aRequest [out] The request data to be sent to network
-	 * @param aContact to search for friend of a friend, 
-	 * for self friend this parameter need not be included
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
 	virtual SmfPluginError friends( SmfPluginRequestData *aRequest,
-			const SmfContact aContact = 0,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get the list of followers
 	 * @param aRequest [out] The request data to be sent to network
-	 * @param aContact to search for follower of a friend, for self 
-	 * followers this parameter need not be included
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError followers( SmfPluginRequestData *aRequest,
-			const SmfContact aContact = 0, 
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
-	
-	/**
-	 * Method to search for a contact
-	 * @param aContact contact to be searched
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError search( const SmfContact &aContact,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
+	virtual SmfPluginError followers( SmfPluginRequestData *aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search for a contact
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aContact contact to be searched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError search( SmfPluginRequestData *aRequest,
+			const SmfContact *aContact,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search for contacts (friends) who are near the user.
+	 * Proximity defines accuracy level
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aLocation The location search criteria
+	 * @param aProximity location search boundary
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError searchNear( SmfPluginRequestData *aRequest,
+			const SmfPlace* aLocation,
+			const SmfLocationSearchBoundary aProximity,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get the list of groups
 	 * @param aRequest [out] The request data to be sent to network
-	 * @param aContact to search for groups of a friend, for self 
-	 * group this parameter need not be included
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
 	virtual SmfPluginError groups( SmfPluginRequestData *aRequest,
-			const SmfContact aContact = 0, 
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to search for a contact in a group
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aGroup the group in which to search
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError searchInGroup( const SmfGroup &aGroup,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
-
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was friends() or followers() or search() or 
-	 * searchInGroup(), aResult will be of type QList<SmfContact>
-	 * If last operation was groups(), aResult will be of type QList<SmfGroup>
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError searchInGroup( SmfPluginRequestData *aRequest,
+			const SmfGroup &aGroup,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,11 +20,10 @@
 #ifndef SMFPOSTPROVIDERPLUGIN_H_
 #define SMFPOSTPROVIDERPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smfcontact.h>
 #include <smfpost.h>
-#include <smfstatusdata.h>
-
+#include <smfplace.h>
 
 /**
  * SmfPresenceInfo.
@@ -43,6 +42,7 @@
 	};
 
 /**
+ * @ingroup smf_plugin_group
  * Interface to get/update the posts to a service provider. This class
  * provides basic functionality to allow applications to obtain list of
  * posts, updates posts or change the presence information to a social 
@@ -51,7 +51,7 @@
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfPostProviderPlugin : public QObject
+class SmfPostProviderPlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -67,76 +67,120 @@
 	~SmfPostProviderPlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
+	 * Method that returns maximum no of chars (unicode) that service 
+	 * provider can post without truncation. Negative value means 
+	 * no limit
+	 * @return Max characters that can be posted without truncation
+	 */
+	virtual qint32 maxCharsInPost( ) const = 0;
+	/**
+	 * Method that returns maximum no of items that can be returned 
+	 * in a single query to getPosts. Negative value means feature 
+	 * not supported.
+	 * @return Max items that can be returned in a single query
 	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	virtual qint32 maxItems( ) const = 0;
+
+	/**
+	 * <Method that returns all the formatting of posts that this 
+	 * service provider supports. May return 0 items to mean 
+	 * only QString is supported.
+	 * @return Supported formats of posts
+	 */
+	virtual QVector<QTextFormat> supportedFormats ( ) const = 0;
+	
+	/**
+	 * Method that returns whether this SP supports Appearence
+	 * @return Returns true if Appearance is supported, else false. 
+	 * @see SmfAppearenceInfo
+	 */
+	virtual bool supportsAppearence ( ) const = 0;
 	
 	/**
 	 * Method to get the latest posts
-	 * @param aStatusData
 	 * @param aRequest [out] The request data to be sent to network
+	 * @param aUser The user's contact in this SP, omit for self contact
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError getPosts( const SmfStatusData aStatusData,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError retrieve( SmfPluginRequestData *aRequest,
+			const SmfContact* aUser = 0,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 
+	
 	/**
-	 * Method to update a post
+	 * Method to update a post to own area.
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPostData The post data to be posted
 	 * @param aLocation The location
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError updatePost( const SmfPost aPostData, 
-			const QtMobility::QContactGeolocation aLocation,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError post( SmfPluginRequestData *aRequest,
+			const SmfPost aPostData, 
+			const SmfPlace aLocation ) = 0;
+	
+	/**
+	 * Method to update the last post to own area with new data
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData The edited/new data to be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError updatePost( SmfPluginRequestData *aRequest,
+			const SmfPost aPostData ) = 0;
 	
 	/**
 	 * Method to update a post to a particular contact
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPostData The post data to be posted
 	 * @param aContact The contact where the data has to be posted
 	 * @param aLocation The location
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError updatePostDirected( const SmfPost aPostData, 
+	virtual SmfPluginError postDirected( SmfPluginRequestData *aRequest,
+			const SmfPost aPostData, 
 			const SmfContact aContact, 
-			const QtMobility::QContactGeolocation aLocation,
-			SmfPluginRequestData *aRequest ) = 0;
+			const SmfPlace aLocation = NULL ) = 0;
+	
+	
 	/**
-	 * Method to update the presence information of the user
-	 * @param aAppearence The appearence information
+	 * Method to post a comment on a post.
 	 * @param aRequest [out] The request data to be sent to network
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 * @param aTarget Post on which comment has to be posted
+	 * @param aComment comment to be posted
+	 * @param aLocation location data
 	 */
-	virtual SmfPluginError postAppearence( const SmfPresenceInfo aAppearence,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError commentOnAPost(SmfPluginRequestData *aRequest,
+			const SmfPost& aTarget,
+			const SmfPost& aComment, 
+			const SmfPlace* aLocation = NULL);
 	
 	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was getPosts(), aResult will be of type QList<SmfPost>
-	 * If last operation was updatePost() or updatePostDirected() or 
-	 * postAppearence, aResult will be of type bool
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
+	 * Method to update the presence information of the user
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aAppearence The appearence information
+	 * @param aStatus The status string
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError postAppearence( SmfPluginRequestData *aRequest,  
+			const SmfPresenceInfo aAppearence,
+			const QString aStatus ) = 0;
+	
+	/**
+	 * Share /a contact's post to user's friends and followers
+	 * (e.g. retweet in twitter, share on facebook)
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData data to be posted
+	 * @param aContact contact to which the post belonged
+	 * @param aEdited whether user changed items within the post
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError sharePost( SmfPluginRequestData *aRequest, 
+			const SmfPost& aPostData, 
+			const SmfContact& aContact, 
+			const bool aEdited);
+
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,20 +20,20 @@
 #ifndef SMFLYRICSSERVICEPLUGIN_H_
 #define SMFLYRICSSERVICEPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smftrackinfo.h>
 #include <QString>
 #include <smfsubtitle.h>
 #include <smflyrics.h>
-#include <smfsubtitlesearchfilter.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for music track lyrics
  *
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfLyricsServicePlugin : public QObject
+class SmfLyricsServicePlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -49,50 +49,24 @@
 	~SmfLyricsServicePlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get the lyrics
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aTrack The track whose lyrics need to be fetched
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError lyrics( const SmfTrackInfo aTrack,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError lyrics( SmfPluginRequestData *aRequest, 
+			const SmfTrackInfo aTrack ) = 0;
 	
 	/**
 	 * Method to get the subtitle
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aTrack The track whose subtitle need to be fetched
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aFilter The subtitle search filter if any
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError subtitles( const SmfTrackInfo aTrack,
-			SmfPluginRequestData *aRequest,
-			const SmfSubtitleSearchFilter aFilter = 0 ) = 0;
-	
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was lyrics(), aResult will be of type SmfLyrics
-	 * If last operation was subtitles(), aResult will be of type SmfSubtitle
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError subtitles( SmfPluginRequestData *aRequest, 
+			const SmfTrackInfo aTrack,
+			const SmfSubtitleSearchFilter aFilter = SubtitleAll ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -22,14 +22,15 @@
 #ifndef SMFMUSICEVENTSPLUGIN_H_
 #define SMFMUSICEVENTSPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <qtcontacts.h>
 #include <smfevent.h>
-#include <smfvenue.h>
+#include <smfplace.h>
 
 using namespace QtMobility;
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for music events
  *
  * All of the functionality described here should be implemented by a service
@@ -37,7 +38,7 @@
  * 
  * Note: This class has dependencies on QtMobility project
  */
-class SmfMusicEventsPlugin : public QObject
+class SmfMusicEventsPlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -53,81 +54,52 @@
 	~SmfMusicEventsPlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get the events based on location
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aLocation Location of the event
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError events( const QtMobility::QContactGeolocation aLocation,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError events( SmfPluginRequestData *aRequest,
+			const QtMobility::QContactGeolocation aLocation,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get the venues based on location
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aLocation Location of the venue
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError venues( const QtMobility::QContactGeolocation aLocation,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError venues( SmfPluginRequestData *aRequest,
+			const QtMobility::QContactGeolocation aLocation,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get the events based on venues
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aVenue Venue of the event
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError events( const SmfVenue aVenue,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError events( SmfPluginRequestData *aRequest,
+			const SmfPlace aVenue,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to post events
-	 * of posting the events is available
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aEventList The list of events to be posted
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError postEvents( const QList<SmfEvent> aEventList,
-			SmfPluginRequestData *aRequest ) = 0;
-	
-	
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was events(), aResult will be of type QList<SmfEvent>
-	 * If last operation was venues(), aResult will be of type QList<SmfVenue>
-	 * If last operation was postEvents(), aResult will be of type bool
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError postEvents( SmfPluginRequestData *aRequest,
+			const QList<SmfEvent> aEventList ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,12 +20,13 @@
 #ifndef SMFMUSICSEARCHPLUGIN_H_
 #define SMFMUSICSEARCHPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <QList>
 #include <smfmusicfingerprint.h>
 #include <smftrackinfo.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for music search services. This class
  * provides basic functionality to allow applications to search for 
  * tracks, get recommented tracks etc
@@ -33,7 +34,7 @@
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfMusicSearchPlugin : public QObject
+class SmfMusicSearchPlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -49,96 +50,69 @@
 	~SmfMusicSearchPlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get recommended tracks
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aTrack The track for which similar recommendations 
 	 * need to be fetched.
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError recommendations( const SmfTrackInfo aTrack,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError recommendations( SmfPluginRequestData *aRequest,
+			const SmfTrackInfo aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get similar tracks
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aTrack The track for which similar tracks 
 	 * need to be fetched.
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError tracks( const SmfTrackInfo aTrack, 
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
-	
-	/**
-	 * Method to get tracks having a similar finger print
-	 * @param aSignature The finger print to be searched for need to be 
-	 * fetched.
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError trackInfo( const SmfMusicFingerPrint aSignature, 
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError tracks( SmfPluginRequestData *aRequest,
+			const SmfTrackInfo aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
-	 * Method to search information about where to buy this song from
-	 * @param aTrack The track for which stores need to be searched
+	 * Method to get tracks having a similar finger print
 	 * @param aRequest [out] The request data to be sent to network
+	 * @param aSignature The finger print to be searched for need to be 
+	 * fetched.
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError stores( const SmfTrackInfo aTrack, 
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10 ) = 0;
+	virtual SmfPluginError trackInfo( SmfPluginRequestData *aRequest,
+			const SmfMusicFingerPrint aSignature,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search information about where to buy this song from
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track for which stores need to be searched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError stores( SmfPluginRequestData *aRequest,
+			const SmfTrackInfo aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to post the currently playing track
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aTrack The current playing track, that should be posted
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError postCurrentPlaying( const SmfTrackInfo aTrack,
-			SmfPluginRequestData *aRequest ) = 0;
-	
-
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was recommendations()or tracks() or trackInfo(), 
-	 * aResult will be of type QList<SmfTrackInfo>
-	 * If last operation was postCurrentPlaying(), aResult will be of type bool
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError postCurrentPlaying( 
+			SmfPluginRequestData *aRequest,
+			const SmfTrackInfo aTrack ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,11 +20,12 @@
 #ifndef SMFMUSICSERVICEPLUGIN_H_
 #define SMFMUSICSERVICEPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smfmusicprofile.h>
-#include <smfvenue.h>
+#include <smfplace.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for music services. This class provides basic 
  * functionality to allow application to search for a user or check for
  * user information etc.
@@ -32,7 +33,7 @@
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfMusicServicePlugin : public QObject
+class SmfMusicServicePlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -48,12 +49,6 @@
 	~SmfMusicServicePlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get self profile information
 	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
@@ -62,39 +57,17 @@
 	
 	/**
 	 * Method to search information about other service users for a 
-	 * particular venue
-	 * @param aVenue The venue which is the search criteria
+	 * particular place
 	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPlace The place which is the search criteria
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError searchUser( const SmfVenue aVenue, 
-			SmfPluginRequestData *aRequest, 
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
-	
-
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was userInfo(), aResult will be of type SmfMusicProfile
-	 * If last operation was searchUser(), aResult will be of type 
-	 * QList<SmfMusicProfile>
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError searchUser( SmfPluginRequestData *aRequest,
+			const SmfPlace aPlace,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,12 +20,13 @@
 #ifndef SMFPLAYLISTSERVICEPLUGIN_H_
 #define SMFPLAYLISTSERVICEPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smfplaylist.h>
 #include <smfmusicprofile.h>
 #include <smftrackinfo.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for playlists service. This class provides 
  * basic functionality to allow applications to get playlists of a user, 
  * add some track to an existing playlist, post the current playing 
@@ -34,7 +35,7 @@
  * All of the functionality described here should be implemented by a service
  * specific plug-in.
  */
-class SmfPlaylistServicePlugin : public QObject
+class SmfPlaylistServicePlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -50,92 +51,49 @@
 	~SmfPlaylistServicePlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get the playlist
 	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError playlists( 
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
+	virtual SmfPluginError playlists( SmfPluginRequestData *aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get the playlist of a particular user
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aUser The user whose playlists need to be fetched
-	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
 	 * @param aItemsPerPage Number of items per page
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError playlistsOf( const SmfMusicProfile aUser,
-			SmfPluginRequestData *aRequest,
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
+	virtual SmfPluginError playlistsOf( SmfPluginRequestData *aRequest,
+			const SmfMusicProfile aUser,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to add tracks to a playlist
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPlaylist The playlist where tracks should be added
 	 * @param aTracks The tracks to be added to the playlist
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError* addToPlaylist( const SmfPlaylist aPlaylist, 
-			const QList<SmfTrackInfo> aTracks,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError addToPlaylist( SmfPluginRequestData *aRequest,
+			const SmfPlaylist aPlaylist, 
+			const QList<SmfTrackInfo> aTracks ) = 0;
 	
 	/**
 	 * Method to post the current playing playlist
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPlaylist The current playing playlist which should be posted
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError* postCurrentPlayingPlaylist( 
-			const SmfPlaylist aPlaylist,
-			SmfPluginRequestData *aRequest ) = 0;
-	
-	
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was playlists() or playlistsOf(), aResult will be of 
-	 * type QList<SmfPlaylist>
-	 * If last operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
-	 * aResult will be of type bool
-	 * @return SmfPluginRetType
-	 */
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was playlists() or playlistsOf(), aResult will be of 
-	 * type QList<SmfPlaylist>
-	 * If last operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
-	 * aResult will be of type bool
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError postCurrentPlayingPlaylist(
+			SmfPluginRequestData *aRequest, 
+			const SmfPlaylist aPlaylist ) = 0;
 	
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h	Thu Mar 25 14:44:08 2010 +0530
+++ b/example/clientapi/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h	Tue Apr 06 16:35:37 2010 +0530
@@ -8,9 +8,9 @@
  * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
  * All rights reserved.
  * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
+ * under the terms of the "Eclipse Public License v1.0"
  * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
  * 
  * @section DESCRIPTION
  *
@@ -20,11 +20,12 @@
 #ifndef SMFGALLERYPLUGIN_H_
 #define SMFGALLERYPLUGIN_H_
 
-#include <smfproviderbase.h>
+#include <smfpluginbase.h>
 #include <smfpicture.h>
 #include <smfcomment.h>
 
 /**
+ * @ingroup smf_plugin_group
  * Interface specification for plugins that implement gallery related services
  * like getting pictures, their description, uploading, posting comments 
  * on pictures etc
@@ -51,7 +52,7 @@
   @endmsc
  * 
  */
-class SmfGalleryPlugin : public QObject
+class SmfGalleryPlugin : public SmfPluginBase
 	{
 	Q_OBJECT
 public:
@@ -67,12 +68,6 @@
 	~SmfGalleryPlugin( );
 	
 	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
 	 * Method to get a list of pictures
 	 * @param aRequest [out] The request data to be sent to network
 	 * @param aPageNum The page to be extracted
@@ -80,69 +75,46 @@
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
 	virtual SmfPluginError pictures( SmfPluginRequestData *aRequest, 
-			const int aPageNum = 0, 
-			const int aItemsPerPage = 10) = 0;
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
 	
 	/**
 	 * Method to get a description
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aImage The image abot which the description is required
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError description( const SmfPicture &aImage,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError description( SmfPluginRequestData *aRequest,
+			const SmfPicture &aImage ) = 0;
 	
 	/**
 	 * Method to upload a picture
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aImage The image to be uploaded
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError upload( const SmfPicture &aImage,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError upload( SmfPluginRequestData *aRequest,
+			const SmfPicture &aImage ) = 0;
 	
 	/**
 	 * Method to upload a list of pictures
+	 * @param aRequest [out] The request data to be sent to network
 	 * @param aImages The list of images to be uploaded
-	 * @param aRequest [out] The request data to be sent to network
 	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError upload( const QList<SmfPicture> &aImages,
-			SmfPluginRequestData *aRequest ) = 0;
-	
-	/**
-	 * Method to post comment on a picture
-	 * is available
-	 * @param aImage The image on which comment is to be posted
-	 * @param aComment The comment to be posted
-	 * @param aRequest [out] The request data to be sent to network
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postComment( const SmfPicture &aImage, 
-			const SmfComment &aComment,
-			SmfPluginRequestData *aRequest ) = 0;
+	virtual SmfPluginError upload( SmfPluginRequestData *aRequest,
+			const QList<SmfPicture> &aImages ) = 0;
 	
 	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData. 
-	 * If last operation was pictures(), aResult will be of type QList<SmfPicture>
-	 * If last operation was description(), aResult will be of type QString
-	 * If last operation was upload() or postComment(), aResult will be of 
-	 * type bool
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aIsLastPage [out] true if this the last page, else false
-	 * @return SmfPluginError 
+	 * Method to post comment on a picture is available
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aImage The image on which comment is to be posted
+	 * @param aComment The comment to be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
 	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType aRetType,
-			bool aIsLastPage) = 0;
+	virtual SmfPluginError postComment( SmfPluginRequestData *aRequest,
+			const SmfPicture &aImage, 
+			const SmfComment &aComment ) = 0;
 		
 	};
 
--- a/example/clientapi/smf/inc/smfplugins/smfprovider/smfproviderbase.h	Thu Mar 25 14:44:08 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/**
- * @file	smfproviderbase.h
- * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
- * @version 1.0
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "{License}" 
- * which accompanies  this distribution, and is available 
- * at the URL "{LicenseUrl}".
- * 
- * @section DESCRIPTION
- *
- * The Provider Base class is the class that has to be contained as a member 
- * in all Plug-in Interfaces. 
- */
-
-#ifndef SMFPROVIDERBASE_H_
-#define SMFPROVIDERBASE_H_
-
-#include <QImage>
-#include <QUrl>
-#include <QBuffer>
-#include <QNetworkAccessManager>
-
-
-/**
- * The enumeration used to track the plugin methods return type
- */
-enum SmfPluginRetType
-	{
-	SmfSendRequestAgain = 0,
-	SmfRequestComplete
-	};
-
-/**
- * The enumeration used to indicate result of transport to the plugins
- */
-enum SmfTransportResult
-	{
-	SmfNoError = 0,
-	SmfNetworkTimeOut,
-	SmfIAPChanged,
-	SmfUnknownError
-	};
-
-/**
- * The enumeration used to denote errors reported by plugin
- * Smf can't continue without handling these errors
- */
-enum SmfPluginError
-	{
-	SmfPluginErrNone = 0, 
-	SmfPluginErrTooManyRequest,
-	SmfPluginErrRequestQuotaExceeded,
-	SmfPluginErrInvalidRequest,
-	SmfPluginErrUserNotLoggedIn,
-	SmfPluginErrAuthenticationExpired,
-	SmfPluginErrPermissionDenied,
-	SmfPluginErrInvalidApplication,
-	SmfPluginErrServiceUnavailable,
-	SmfPluginErrServiceTemporaryUnavailable,
-	SmfPluginErrFormatNotSupported, 
-	SmfPluginErrDataSizeExceeded  
-	};
-
-
-/**
- * The enumeration used to indicate the type of network operation done
- */
-enum SmfRequestOperation
-	{
-	SmfContactGetFriends = 0,
-	SmfContactGetFollowers,
-	SmfContactSearch,
-	SmfContactGerGroups,
-	SmfContactSearchInGroup,
-	SmfContactGetPosts,
-	SmfContactUpdatePost,
-	SmfContactUpdatePostDirected,
-	SmfContactPostAppearence,
-	SmfMusicGetLyrics,
-	SmfMusicGetSubtitle,
-	SmfMusicGetEventsOnLoc,
-	SmfMusicGetVenueOnLoc,
-	SmfMusicGetEventsOnVenue,
-	SmfMusicPostEvents,
-	SmfMusicGetRecommendations,
-	SmfMusicGetTracks,
-	SmfMusicGetTrackInfo,
-	SmfMusicGetStores,
-	SmfMusicPostCurrentPlaying,
-	SmfMusicGetUserInfo,
-	SmfMusicSearchUser,
-	SmfMusicGetPlaylists,
-	SmfMusicGetPlaylistsOfUser,
-	SmfMusicAddToPlaylist,
-	SmfMusicPostCurrentPlayingPlaylist,
-	SmfPictureGetPictures,
-	SmfPictureDescription,
-	SmfPictureUpload,
-	SmfPictureMultiUpload,
-	SmfPicturePostComment
-	
-	};
-
-
-/**
- * The structure used to track the data usage of each plugins
- */
-struct SmfPluginDataUsage
-	{
-	/**
-	 * Application that called the plugin
-	 */
-	QString iAppName;
-	
-	/**
-	 * Interface implemented by the plugin
-	 */
-	QString iInterfaceName;
-	
-	/**
-	 * The service provider
-	 */
-	QString iServiceProviderName;
-	
-	/**
-	 * number of bytes sent for this plugin
-	 */
-	uint iBytesSent;
-	
-	/**
-	 * number of bytes received for this plugin
-	 */
-	uint iBytesReceived;
-	
-	};
-
-
-/**
- * The structure used to hold the request created by the plugins
- */
-struct SmfPluginRequestData
-	{
-	/**
-	 * Indicates the type of operation performed, like getting Friends 
-	 * list, upload image etc
-	 */
-	SmfRequestOperation iRequestType;
-	
-	/**
-	 * The QNetworkRequest that has to be filled up by the plugins
-	 */
-	QNetworkRequest *iNetworkRequest;
-	
-	/**
-	 * The data to be posted in case of HTTP POST operation
-	 */
-	QBuffer *iPostData;
-	
-	/**
-	 * The type of HTTP transaction, like GET, POST etc
-	 */
-	QNetworkAccessManager::Operation iHttpOperationType;
-	
-	};
-
-/**
- * The Provider Base class is the class that has to be contained as a member 
- * in all Plug-in Interfaces.
- * 
- * All of plug-ins should contain this class as a member and should also 
- * contain a public method to get instance of this class. 
- */
-class SmfProviderBase : public QObject
-	{
-	Q_OBJECT
-
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfProviderBase( QObject* aParent = 0 );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfProviderBase( );
-
-	/**
-	 * Method to get the Localisable name of the service.
-	 * @return The Localisable name of the service.
-	 */
-	QString serviceName( );
-	
-	/**
-	 * Method to get the Logo of the service
-	 * @return The Logo of the service
-	 */
-	QImage serviceIcon( );
-	
-	/**
-	 * Method to get the Readable service description
-	 * @return The Readable service description
-	 */
-	QString description( );
-	
-	/**
-	 * Method to get the Website of the service
-	 * @return The Website of the service
-	 */
-	QUrl serviceUrl( );
-	
-	/**
-	 * Method to get the URL of the Application providing this service
-	 * @return The URL of the Application providing this service
-	 */
-	QUrl applicationUrl( );
-	
-	/**
-	 * Method to get the Icon of the application
-	 * @return The Icon of the application
-	 */
-	QImage applicationIcon( );
-	
-	/**
-	 * Method to get the Plugin specific ID
-	 * @return The Plugin specific ID
-	 */
-	uint pluginId( );
-	
-	/**
-	 * Method to get the ID of the authentication application 
-	 * for this service
-	 * @param aProgram The authentication application name
-	 * @param aArguments List of arguments required for authentication app
-	 * @param aMode Strting mode for authentication application
-	 * @return The ID of the authentication application 
-	 */
-	uint authenticationApp( QString &aProgram, QStringList & aArguments, 
-			QIODevice::OpenModeFlag aMode = QIODevice::ReadWrite );	
-	
-	/**
-	 * Method to get the unique registration ID provided by the 
-	 * Smf for authorised plugins
-	 * @return The unique registration ID/token provided by the Smf for 
-	 * authorised plugins
-	 */
-	QString smfRegistrationId( );
-	
-	/**
-	 * Method to get the data usage of each plugin
-	 * @param aUsage The data usage structure
-	 */
-	void getDataUsage( SmfPluginDataUsage &aUsage );
-	
-	/**
-	 * Method to get the reference count for loading.
-	 * The reference count increased with each load request and decreased 
-	 * with each unload request
-	 * @return The reference count value for loading of the plugins
-	 */
-	uint getLoadRefCount( );
-	
-private:
-	QString m_serviceName;	// the Localisable name of the service
-	QImage m_serviceIcon;	// the Logo of the service
-	QString m_description;	// the Readable service description
-	QUrl m_serviceUrl;		// the Website of the service
-	QUrl m_applicationUrl; 	// URL of the Application providing this service
-	QImage m_applicationIcon;	//Icon of the application
-	uint m_pluginId;		// The Plugin specific ID
-	uint m_authenticationAppId; // ID of the authentication application for this service
-	QString m_registrationId; 	// unique registration ID provided by the 
-							// Smf for authorised plugins
-	SmfPluginDataUsage m_usage;	//data usage of each plugin
-	uint m_loadRefCount;	// reference count increased with each load request 
-							// and decreased with each unload request
-	};
-
-#endif /* SMFPROVIDERBASE_H_ */