serviceproviders/sapi_messaging/inc/messaginginterface.h
changeset 5 989d2f495d90
child 10 fc9cf246af83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_messaging/inc/messaginginterface.h	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,663 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defination of class CMessagingInterface
+*
+*/
+
+
+#ifndef __MESSAGINGINTERFACE_H
+#define __MESSAGINGINTERFACE_H
+
+#include <LiwCommon.h>
+#include <LiwServiceIfBase.h>
+#include <LiwBufferExtension.h>
+
+#include "messageheader.h" 
+
+class CMessagingService;
+class TInputValidator;
+/**
+ * This class provides the Messaging SAPI interface to LIW Framework 
+*/
+class CMessagingInterface : public CBase, public MLiwInterface
+	{
+	public:
+
+	    /**
+	     * Two-phased constructor.
+	     * @return CMessagingInterface* 
+	    */
+		static CMessagingInterface* NewL();
+
+	    /**
+	    * Destructor.
+	    */
+		virtual ~CMessagingInterface();
+
+	private:
+
+		/**
+	     * Constructor
+	    */
+		CMessagingInterface();
+
+		/**
+	     * Symbian Constructor
+	    */
+		void ConstructL();
+		
+		/*
+		 * Function which checks the type of the source and leaves upon  
+		 * setting the error message accordingly if the aLeaveFlag is set and
+		 * returns ETrue in case of success, EFalse in case of failure and not leaving
+		 *
+		 * @param aSource
+		 * @param aLeaveFlag
+		 * @param aExpectedType
+		 * @param aCmdName Command Name
+	     * @param aParameter Parameter Name
+	     * @param aMessage Error message
+		 *
+		 * @return TBool
+		 */
+		TBool CMessagingInterface::CheckInputTypeL( const TLiwVariant* aSource, 
+                                            TBool aLeaveFlag, 
+                                            LIW::TVariantTypeId aExpectedtype, 
+                                            const TDesC8& aCmdName, 
+											const TDesC8& aParameter,
+											const TDesC& aMessage );
+	
+		
+	    /**
+	     * Appends error message
+	     * @param aCmdName Command Name
+	     * @param aParameter Parameter Name
+	     * @param aMessage Error message
+		 * @param aMissingOrIncorrectOrNone 0 for none or 1 for missing or 2 for incorrect
+		 * For missing it leave with errorcode SErrMissingArgument
+		 * For incorrect it leaves with errorcode KErrArgument
+		 * For none it wont leave
+		 *
+	     * @return void
+	    */
+		void AppendErrorMessageL( const TDesC8& aCmdName, 
+								  const TDesC8& aParameter, 
+								  const TDesC& aMessage,
+								  TInt aNoneOrMissingOrIncorrect );
+			
+			
+		/**
+	     * Function called from sync APIs to check whether Async set up is done 
+	     * if yes then leaves
+	     * 
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	     * @param aCmdName Command Name
+	     * @param aMessage Error message
+		 *
+	     * @return void
+	    */						  
+		void LeaveIfAsynchronousL( TUint aCmdOptions,
+	 				          	   MLiwNotifyCallback* aCallback,
+					          	   const TDesC8& aCmdName,  
+								   const TDesC& aMessage );								  
+								
+												
+	// MLiwInterface member functions
+	public:
+
+		/**
+	     * Executes the SAPI as per params
+	     * @param aCmdName Command name defining which operation is to be performed
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		virtual void ExecuteCmdL( const TDesC8& aCmdName,
+		                       const CLiwGenericParamList& aInParamList,
+		                       CLiwGenericParamList& aOutParamList,
+		                       TUint aCmdOptions = 0,
+		                       MLiwNotifyCallback* aCallback = 0 );
+		
+		/**
+	     * Closes the interface 
+	    */
+		virtual void Close();
+		
+	private:
+	
+		/**
+	     * Issues SendMessage request to Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void SendMessageL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+					                       
+		/**
+	     * Cancels the async operation issued earlier
+	     * @param aCmdName Command name i.e.., Cancel
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	    */			                       
+		void CancelAsyncL( const TDesC8& aCmdName,
+										const CLiwGenericParamList& aInParamList,
+				                       	CLiwGenericParamList& aOutParamList,
+				                       	TUint aCmdOptions);			                       
+		/**
+	     * Issues GetList request to Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void GetHeaderListL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+
+		/**
+	     * Issues New Message notification request to Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void RequestNotificationL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+
+		/**
+	     * Cancels New Message notification Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void CancelNotificationL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+
+		/**
+	     * Issues request for Deleteing Message to Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void DeleteMessageL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+
+		/**
+	     * Issues request for Changing message status to Messaging Service
+	     * @param aInParamList  Input param list
+	     * @param aOutParamList Output list
+	     * @param aCmdOptions Command option
+	     * @param aCallback Callback object pointer
+	    */
+		void ChangeStatusL( const CLiwGenericParamList& aInParamList,
+					                       CLiwGenericParamList& aOutParamList,
+					                       TUint aCmdOptions,
+					                       MLiwNotifyCallback* aCallback );
+
+		/**
+	     * Gets the param list for sending message form the inputparam list
+	     * @param aInParamList A CLiwGenericParamList containing required input params
+	     * @return TSendMessageParams* A send message params structure
+	    */
+		CSendMessageParams* GetSendParametersL( const CLiwGenericParamList& aInParamList );
+
+  	  /**
+	     * Gets the filter parameters, sorting option from the inputparam list
+	     * @param aInParamList A CLiwGenericParamList containing required input parameters
+	     * @return CFilterParamInfo* Filter parameter structure
+	    */
+		CFilterParamInfo* GetFilterParametersL( const CLiwGenericParamList& aInParamList, TBool aIndexBaseInp );
+
+  	  /**
+	     * Gets the message id from liw input parameter 
+	     * @param aInParamList input param list
+	     * @param aMessageId Output parameter containing message id
+	     * @return TInt Error code
+	    */
+		void GetMessageIdL( const CLiwGenericParamList& aInParamList, TMsvId& aMessageId,
+							const TDesC8& aCmdName  );
+
+  	  /**
+	     * Gets the transaction id from liw input parameter 
+	     * @param aInParamList input param list
+	     * @param aTransactionId Output param containing transaction id
+	     * @return TInt Error code
+	    */
+		void GetTransactionIdL( const CLiwGenericParamList& aInParamList, 
+								TInt32& aTransactionId,
+								const TDesC8& aCmdName  );
+
+  	  /**
+	     * Gets the status flag and its value
+	     * @param aInParamList input param list
+	     * @param aStatusFlag Status flag
+	     * @param aFlagValue Flag value
+	     * @return TInt Error code
+	    */
+		void GetStatusFlagAndValueL( const CLiwGenericParamList&  aInParamList, 
+									 TMessageStatusFlag& aStatusFlag, 
+									 TBool& aFlagValue,
+							  	     const TDesC8& aCmdName );
+
+  	  /**
+	     * Gets the notification type
+	     * @param aInParamList input param list
+	     * @param aNotificationType Notification type
+	     * @return void
+	    */													
+		void GetNotificationTypeL( const CLiwGenericParamList& aInParamList, 
+								   TNotificationType& aNotificationType,
+								   const TDesC8& aCmdName );
+
+  	  /**
+	     * Gives the sort type
+	     * @param aSortField Sort Field as input string
+	     * @param aSortOrder Sort type as input string
+	     * @return TMsvSorting Sort type
+	    */		
+		TMsvSorting SortType( const TDesC& aSortField, const TDesC& aSortOrder );
+	
+
+	private:
+		
+	  	/**
+	     * CMessagingService  class pointer
+	    */		
+		CMessagingService* iMsgService;
+		
+		/**
+	     * iErrorString  Heap Descriptor used to store the error message 
+	     * in case of error, initially set to NULL
+	    */
+		HBufC* iErrorMessage;
+	};
+
+/**
+ * Callback class for asynchronous SAPI whose result is Integer
+*/		
+class CMsgCallbackInt : public CMsgCallbackBase
+	{
+	private:
+
+	  	/**
+	     * Constructor
+	    */		
+		CMsgCallbackInt();
+
+	public:
+
+	  	/**
+	     * Two-phase Constructor
+	     * @return   CMsgCallbackBase* 
+	    */		
+		static CMsgCallbackBase* NewL();
+
+	  	/**
+	     * Gives the result of asynchronous SAPI
+	     * @param aErrCode errcode
+	     * @param aResult Result
+	     * @return   void
+	    */		
+		void NotifyResultL(TInt aErrCode, TAny* aResult);
+	};
+
+/**
+ * Callback class for asynchronous SAPI message header
+*/	
+class CMsgCallbackHeader : public CMsgCallbackBase
+	{
+	public:
+		
+	  	/**
+	     * Two-phase Constructor
+	     * @return   CMsgCallbackHeader* 
+	    */		
+		static CMsgCallbackHeader* NewL();
+		
+	  	/**
+	     * Destructor
+	    */		
+		virtual ~CMsgCallbackHeader();
+		
+	private:
+	
+	  	/**
+	     * Constructor
+	    */		
+ 		CMsgCallbackHeader();
+		
+	public:
+	
+	  	/**
+	     * Gives the result of asynchronous SAPI
+	     * @param aErrCode errcode
+	     * @param aResult Result
+	     * @return   void
+	    */
+		virtual void NotifyResultL(TInt aErrCode, TAny* aResult);
+	};
+
+/**
+* Implemenation of abstract interface to iterate over the collection of message IDs.
+*
+* @see CLiwIterable
+*
+*/
+class CIterableIdList : public CLiwIterable	
+	{
+	public:
+	  	/**
+	     * Two-phase Constructor
+	     * @param aList list to be iterated 
+	     * @return new CIterableIdList object
+	    */	
+		static CIterableIdList* NewL(CMsvEntrySelection* aList, 
+											CMessagingService* aMsgService, 
+											CFilterParamInfo* aFilter );
+
+		/**
+		* Resets the iterator. 
+		*
+		*/
+		void Reset();
+
+		/**
+		* Iterates over the collection entries to fetch the next data element.
+		*
+		* @param aEntry contains the next data element and its corresponding data type
+		*
+		* @return false if there are no more data elements to be fetched;
+		* true otherwise
+		* 
+		*/
+		TBool NextL(TLiwVariant&);
+		
+	    /**
+	    * Destructor.
+	    */
+		~CIterableIdList();
+
+	private:
+	
+	    /**
+	    * Constructor
+	     * @param aList list to be iterated 
+	     * @return void
+	    */
+		CIterableIdList(CMsvEntrySelection* aList, 
+											CMessagingService* aMsgService, 
+											CFilterParamInfo* aFilter );
+
+
+	private:
+	
+	  	/**
+	     * CMsvEntrySelection  class pointer
+	    */		
+		CMsvEntrySelection* 	iList;
+
+	  	/**
+	     * CMessagingService  class pointer
+	    */		
+		CMessagingService* 		iMsgService;
+		
+	  	/**
+	     * CFilterParamInfo  class pointer
+	    */		
+		CFilterParamInfo*		iFilter; 
+
+	  	/**
+	     * Index on list
+	    */		
+		TInt					iIndex;	
+	};
+
+/**
+* An associative array or dictionary class. The collection
+* key entries are of type string (Descriptor type) and their  
+* associated values can be an variant type.
+* 
+*  \c CLiwDefaultMap provides default map implementation to
+   *  <ul>
+   *     <li>insert a key-value pair</li>
+   *     <li>find a stored value based on a key</li>
+   *     <li>get a key based on an index</li>
+   *     <li>remove a key-value pair based on a key</li>
+   *		 <li>get the total number of stored key-value pairs</li>
+   *   </ul>
+* 
+*
+* @see CLiwContainer
+* @see TLiwVariant
+* @see CLiwMap
+*
+*/
+class CLiwMessagingMap : public CLiwMap
+{
+ public:
+  
+  /*
+   * Creates an instance of \c CLiwMessagingMap
+   *
+   * @return an instance of \c CLiwMessagingMap
+   */
+   static CLiwMessagingMap* NewL( CMessagingService* aMsgService );
+  
+ 
+  /**
+    * Inserts a key-value pair element to the map collection. If
+    * the specified key already exists, it will be removed from
+    * the collection and the new key-value pair will be added to the
+    * map.
+    *  
+    * @param aKey the key to be stored
+    * @param aValue the value associated with the key to be stored
+    */
+  void InsertL(const TDesC8& aKey, const TLiwVariant& aValue);
+  
+  /**
+    * Finds a value stored in the map collection based on the key.
+    *  
+    * @param aKey the key to be searched
+    * @param aFndValue the value associated with the found key
+    *
+    * @return false if there is no key stored; true otherwise
+   */
+  TBool FindL(const TDesC8& aKey, TLiwVariant& aValue) const;
+  
+  /**
+    * Returns the number of key-value pair stored in the map collection.
+    *  
+    * @return the number of key-value pair stored in the map collection
+   */
+  TInt Count() const;
+  
+  /**
+    * Returns the key stored at a specified index. 
+    *  
+    * @param aIndex the index of the key to be found
+    * @param aFndKey the key found at the passed index
+    *
+    * @return true if a key-value entry is found at the passed index;
+    * false otherwise
+   */
+  TBool AtL(TInt aIndex, TDes8& aFndKey) const;
+  
+  /**
+    * Removes a key from the map collection.
+    *  
+    * @param aKey the key to be removed from the map
+   */
+  void Remove(const TDesC8& aKey);
+  
+ private:
+ 
+ 	/*
+ 	 * Constructor
+ 	 */
+  CLiwMessagingMap(CLiwGenericParamList* aMap, CMessagingService* aMsgService) 
+  : iMap(aMap), iMsgService(aMsgService)
+  	 {}
+  
+	/*
+	* Destructor
+	*/
+	virtual ~CLiwMessagingMap();
+  
+	/*
+	* the underlying generic parameter list
+	*/
+	CLiwGenericParamList* iMap;
+  
+  	/**
+     * CMessagingService  class pointer
+    */		
+	CMessagingService* iMsgService;
+		
+};
+
+class CMsgFileBuffer : public CLiwFileBuffer
+	{
+	public:
+	  	/**
+	     * Two-phase Constructor
+	     * @param aFile file handle
+	     * @return new CMsgFileBuffer object
+	    */	
+		static CMsgFileBuffer* NewL(RFile& aFile);
+
+	    /**
+	    * Destructor.
+	    */
+		~CMsgFileBuffer();
+
+		/*
+		 * @return RFile handle
+		 */
+		RFile& AsFile();
+
+		/*
+		 * Returns the pointer to the underlying buffer
+		 *
+		 * @return the pointer to the underlying buffer
+		 */
+		TUint8* Buf() const;
+		
+		/*
+		 * Returns the length of the buffer data
+		 *
+		 * @return the length of the buffer data
+		 */
+		TInt Len();
+		
+		/*
+		 * Reads the specified number of bytes of buffer data 
+		 * 
+		 * @param aPtr the pointer to the area into which buffer data is read
+		 * @param aLength the number of bytes to be read from the buffer
+		 *
+		 * @return KErrNone if the operation is successful; Otherwise
+		 *		   TLiwBufferAccess::KLiwBufferNonReadable
+		 *        
+		 */
+		TInt Read(TUint8* aPtr,TInt aLength);
+		
+		/*
+		 * Writes the specified number of bytes into the buffer 
+		 * 
+		 * @param aPtr the pointer to the data to be written into buffer
+		 * @param aLength the number of bytes to be written into buffer
+		 *
+		 * @return KErrNone if the operation is successful; Otherwise
+		 *		   TLiwBufferAccess::KLiwBufferReadOnly if writing is not supported
+		 *        
+		 */
+		TInt Write(const TUint8 aPtr, TInt aLength);
+			
+		/*
+		 * Releases the buffer. The service provider implementing concrete buffer
+		 * type should provide appropriate implementation
+		 */
+		void Release();
+		
+		/*
+		 * Returns the appropriate type of buffer.
+		 */
+		TInt TypeID();
+		
+		/*
+		 * The concrete implementation of buffer types should perform equality operation
+		 * check
+		 */
+		virtual TBool operator==(CLiwBuffer& aBuffer);
+
+	private:
+		CMsgFileBuffer(RFile& aFile);
+		
+	private:
+		RFile iFile;
+	};
+
+	
+/**
+ * Input Validator Class used internally to check Inputs
+ */		
+ class TInputValidator
+ 	{
+ 	public: 
+ 		TInputValidator();
+		
+		/*
+		 * Check whether aTime is valid or not
+		 */
+ 		TBool CheckValidDate( const TTime &aTime );
+ 		
+ 		/*
+		 * Check whether aDes contains valid number or not
+		 */
+ 		TBool CheckValidNumber( const TDesC &aDes );
+ 		
+ 		/*
+		 * Check whether aFileName is a valid file or not
+		 */
+ 		TBool CheckValidFile( const TDesC &aFileName );
+ 		
+ 		/*
+		 * Check whether aDesc is a valid phone number
+		 */
+ 		TBool CheckValidNumberWithPlus( const TDesC &aDes );
+ 		
+ 		/*
+		 * Check whether aDesc size is not zero
+		 */
+ 		TBool CheckDesSize( const TDesC &aDes );
+ 	};	
+
+#endif __MESSAGINGINTERFACE_H
\ No newline at end of file