/**
 * 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_ */
