/*
* Copyright (c) 2002 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:  CSysInfoService class implementation
*
*/


#ifndef _SYSREQUEST_H_
#define _SYSREQUEST_H_

/**
*   @ref TSysRequest
*   This is internal class to encapsulate all input parameters in 
*   specifying request.
*   A request typically contains 
*           1. Entity. 
*           2. Key.
*           3. @ref TRequestType enumerated request types. 
*           4. @ref CSysData optional input data Ex. threshold signal 
*                   strength for notification.
*           5. TransactionID for asynchronous requests.
*           6. Observer to handle async response.
*
*  @lib sysinfoservice.lib
*  @since S60 3.2
*/
class TSysRequest
    {
    public:
    // Enumeration of possible request types.
    enum TRequestType
        {
        ESynchronous,
        EASyncONESHOT,
        ENotification
        };

    public:	 // Constructors and destructor
        /**
        * C++ default constructor(s).
        */
        inline TSysRequest( const TPtrC aEntity, const TPtrC aKey, 
                            TInt32 aTransID,
                            ISystemObserver* aCallback,
                            TRequestType aReqType = ESynchronous);
        /**
        * C++ default constructor(s).
        */
        inline TSysRequest( const TDesC& aEntity, const TDesC& aKey, 
                            const CSysData* aData, 
                            TInt32 aTransactionID, 
                            ISystemObserver* aCallback,
                            TRequestType aReqType = ESynchronous);

    public:

        /**
        * @returns Entity of the System Infomation Identifier.
        */
        inline const TPtrC Entity() const;

        /**
        * @returns Entity of the System Infomation Identifier.
        */
        inline const TPtrC Key() const;

        /**
        * @returns Transaction ID associated with the request.
        */
        inline TInt32 TransactionID() const;

        /**
        * @returns System data.
        */		
        inline const CSysData* SystemData() const;

        /**
        * @returns Type of request @ref TRequestType.
        */		
        inline TRequestType RequestType() const;

        /**
        * @returns observer @ref TRequestType.
        */				
        inline ISystemObserver* Observer() const;

    private:	//DATA
        /**
        * Entity
        */		
        const TPtrC         iEntity;
        /**
        * Key
        */		
        const TPtrC         iKey;
        /**
        * Type of request.
        */
        TRequestType        iRequestType;
        /**
        * System data.
        */
        const CSysData*	    iSysData;
        /**
        * Transaction ID.
        */			
        TInt32              iTransactionID;
        /**
        * Observer
        */				
        ISystemObserver*    iObserver;
    };

#include "sysrequest.inl"

#endif _SYSREQUEST_H_

//End of file
