devicediagnosticsfw/diagresultsdb/server/inc/diagresultsdbtestrecordsubsession.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 09:07:52 +0200
changeset 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:  Symbian OS server subsession.
*  libraries   : 
*
*/


#ifndef DIAGRESULTSDBTESTRECORDSUBSESSION_H
#define DIAGRESULTSDBTESTRECORDSUBSESSION_H

//System includes
#include <e32cmn.h> //RMessage2
#include <e32base.h> //CObject 

//Forward declarations
class CDiagResultsDbSession;
class CDiagResultsDbTestRecordHandle;
class MRecordCompletionObserver;

/**
* Server Subsession 
*
* @since S60 v5.0
**/
class CDiagResultsDbTestRecordSubsession: public CObject, 
                                          public MRecordCompletionObserver
	{
public:  

    /**
    * NewL.
    * 
    * @param aSession Main Database session.
    * @param aTestRecord The test record that this subsession handles.
    *                    The record is either totally empty or contains data.
    * @param aResumeTestRecord Indicates can opened test record modified.
    *
    * @return Test record subsession.                    
    **/
	static CDiagResultsDbTestRecordSubsession* NewL(
	                                 CDiagResultsDbSession* aSession, 
	                                 CDiagResultsDbTestRecordHandle* aTestRecordHandle,
	                                 TBool aReadonly
	                                 );
	                                 
    /**
    * Destructor.
    **/
    ~CDiagResultsDbTestRecordSubsession();

    /**
    * Handles the client request. 
    *
    * @param aMessage Details of the client request.
    * @return ETrue if request was asynchronous, EFalse otherwise.
    **/
    TBool DispatchMessageL(const RMessage2& aMessage);
    
    /**
    * Returns the test record that this subsession represents.
    *
    * @return The test record.
    **/
    CDiagResultsDbTestRecordHandle* CurrentTestRecordHandle();
    
    /**
    * Returns the value that client send when connecting.
    * ETrue = Readonly subsession.
    * EFalse = Writable subsession.
    **/ 
    TBool ReadonlySubsession() const;
    
public: //MRecordCompletionObserver
        
    /**
    * This is called when test record is completed.
    *
    * @param aError Symbian error code or KErrNone.
    **/   
    void CompletedRecordL( TInt aError );    

protected:

    /**
    * C++ Constructor
    *
    * @param aSession Main Database session.
    * @param aTestRecord The test record that this subsession handles.
    *                    The record is either totally empty or contains data.
    **/
    CDiagResultsDbTestRecordSubsession(
                        CDiagResultsDbSession* aSession, 
                        CDiagResultsDbTestRecordHandle* aTestRecord,
                        TBool aReadonly
                        );
                      
    /**
    * ConstructL.
    **/                    
    void ConstructL();                    
    
private: // Client request handling functions. 
         // Look at DiagResultsDatabaseCommon.h for the client requests.

    void LogTestResultL( const RMessage2& aMessage );
    
    void GetTestResultL( const RMessage2& aMessage );
    
    void CompleteTestRecordL( const RMessage2& aMessage );
    
    void GetTestResultsL( CDiagResultsDbTestRecordHandle* aTestRecord, 
                          const RMessage2& aMessage );
    
    void GetTestUidsL( const RMessage2& aMessage );
       
    void GetEngineParamL( const RMessage2& aMessage );
    
    TBool Completed() const;
    
    void GetStatusL ( const RMessage2& aMessage );
    
    void SuspendTestRecordL( const RMessage2& aMessage );
    
    void CancelLogTestResult( const RMessage2& aMessage );
    
private: // Data

    // Main DB session
    CDiagResultsDbSession* iSession;
    
    // Test record that represents this subsession.
    CDiagResultsDbTestRecordHandle* iTestRecordHandle;
    
    // Details of the client request.
    RMessage2 iMsg;
    
    // Dynamic flat buffer for transmitting data across IPC.
    CBufFlat* iBuffer;
    
    // Read or Write-mode 
    TBool iReadonly;
    
    TBool iCompletedLogTest;
	};
	
#endif // DIAGRESULTSDBTESTRECORDSUBSESSION_H