devicediagnostics/devdiagapp/src/devdiagexecutionresults_old.cpp
changeset 18 7d11f9a6646f
parent 4 75a71fdb4c92
child 21 c707676bf59f
--- a/devicediagnostics/devdiagapp/src/devdiagexecutionresults_old.cpp	Tue Feb 02 00:03:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,622 +0,0 @@
-/*
-* 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 "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:  This class encapsulates test results from live execution runs
-*                as well as logged results and presents a common interface for
-*                both.
-*
-*/
-
-
-// System Include Files
-#include <centralrepository.h>                  // CRepository
-#include <drmserviceapi.h>                      // CDrmServiceApi
-#include <diagenginecommon.h>                   // MDiagEngineCommon
-#include <diagpluginexecplan.h>                 // CDiagPluginExecPlan
-#include <diagexecplanentry.h>                  // MDiagExecPlanEntry
-#include <diagresultsdatabaseitem.h>            // CDiagResultsDatabaseItem
-#include <diagplugin.h>                         // MDiagPlugin
-#include <diagtestplugin.h>                     // MDiagTestPlugin
-#include <diagpluginpool.h>                     // CDiagPluginPool
-#include <diagresultsdatabasetestrecordinfo.h>  // TDiagResultsDatabaseTestRecordInfo
-#include <diagresultsdatabase.h>                // RDiagResultsDatabase,
-                                                // RDiagResultsDatabaseRecord
-#include <diagframeworkdebug.h>                 // Debugging Macros
-
-// User Include Files
-#include "DevDiagExecutionResults.h"            // CDevDiagExecResults
-#include "DevDiagApp.hrh"                    // UID definition
-#include "DevDiag.pan"                 // Panic
-#include "phonedoctorprivatecrkeys.h"           // CR Key ID Definitions
-
-// Local Constants
-const TInt KRecordsArrayGranularity = ( 5 );
-
-// Local Data Types
-typedef CArrayFixFlat< TDiagResultsDatabaseTestRecordInfo > CDatabaseRecordInfoArray;
-
-
-// ============================ MEMBER FUNCTIONS =============================
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Static two-phase constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult* CDevDiagExecResults::CResult::NewL(
-    const MDiagPlugin& aPlugin )
-    {
-    CResult* self = CResult::NewLC( aPlugin );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Static two-phase constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult* CDevDiagExecResults::CResult::NewLC(
-    const MDiagPlugin& aPlugin )
-    {
-    CResult* self = new ( ELeave ) CResult( aPlugin );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult::~CResult()
-    {
-    delete iResult;
-    iResult = NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Return the test result.  This may be NULL if the test has not been run.
-// ---------------------------------------------------------------------------
-//
-const CDiagResultsDatabaseItem* CDevDiagExecResults::CResult::Result() const
-    {
-    return iResult;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Return a reference to the plugin for this result.
-// ---------------------------------------------------------------------------
-//
-const MDiagPlugin& CDevDiagExecResults::CResult::Plugin() const
-    {
-    return iPlugin;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Return the execution error code.
-// ---------------------------------------------------------------------------
-//
-TInt CDevDiagExecResults::CResult::ExecStatus() const
-    {
-    return iExecStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Return the current execution step for this result.
-// ---------------------------------------------------------------------------
-//
-TUint CDevDiagExecResults::CResult::CurrentStep() const
-    {
-    return iCurrentStep;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Return the total execution steps for this result.
-// ---------------------------------------------------------------------------
-//
-TUint CDevDiagExecResults::CResult::TotalSteps() const
-    {
-    return iTotalSteps;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// This function takes ownership of a result object.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::CResult::SetResult(
-    CDiagResultsDatabaseItem* aResult,
-    TInt aError )
-    {
-    // Sanity check.
-    if ( iResult )
-        {
-        delete iResult;
-        }
-
-    // Set the result and error code Ownership of the result is transferred.
-    iResult = aResult;
-    iExecStatus = aError;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// Set the progress information for this result.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::CResult::SetProgress( TUint aCurrentStep,
-                                                TUint aTotalSteps )
-    {
-    iCurrentStep = aCurrentStep;
-    iTotalSteps = aTotalSteps;
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// The default constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult::CResult( const MDiagPlugin& aPlugin )
-:   iPlugin( aPlugin )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// From nested class CDevDiagExecResults::CResult.
-// The second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::CResult::ConstructL()
-    {
-    }
-
-
-// ============================ MEMBER FUNCTIONS =============================
-
-// ---------------------------------------------------------------------------
-// Static two-phase constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults* CDevDiagExecResults::NewL(
-    TUid aRecordId,
-    CDiagPluginPool& aPluginPool,
-    RDiagResultsDatabase& aDbSession,
-    MDiagEngineCommon* aDiagEngine )
-    {
-    LOGSTRING3( "CDevDiagExecResults::NewL( %d, 0x%x )",
-                aRecordId.iUid,
-                aDiagEngine )
-
-    CDevDiagExecResults* self = CDevDiagExecResults::NewLC( aRecordId,
-                                                            aPluginPool,
-                                                            aDbSession,
-                                                            aDiagEngine );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Static two-phase constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults* CDevDiagExecResults::NewLC(
-    TUid aRecordId,
-    CDiagPluginPool& aPluginPool,
-    RDiagResultsDatabase& aDbSession,
-    MDiagEngineCommon* aDiagEngine )
-    {
-    LOGSTRING3( "CDevDiagExecResults::NewLC( %d, 0x%x )",
-                aRecordId.iUid,
-                aDiagEngine )
-
-    CDevDiagExecResults* self = new ( ELeave ) CDevDiagExecResults(
-        aRecordId,
-        aPluginPool,
-        aDbSession,
-        aDiagEngine );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::~CDevDiagExecResults()
-    {
-    LOGSTRING( "CDevDiagExecResults::~CDevDiagExecResults()" )
-    iResults.ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------------------------
-// This function is called during live execution to transfer ownership of a
-// test result.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::AddEntryL( CDiagResultsDatabaseItem* aResult,
-                                     TInt aStatus )
-    {
-    LOGSTRING3( "CDevDiagExecResults::AddEntryL( 0x%x, %d )",
-                aResult,
-                aStatus )
-
-    // This is only valid for live executions.
-    if ( iType != ETypeExecution )
-        {
-        delete aResult;
-        User::Leave( KErrCompletion );
-        }
-
-    // Assign the result object to the corresponding item in the local array.
-    iResults[ CurrentIndexL() ]->SetResult( aResult, aStatus );
-
-    // Update the completed step counter.
-    if ( iResults[ CurrentIndexL() ]->Plugin().Type() ==
-        MDiagPlugin::ETypeTestPlugin )
-        {
-        iCompletedSteps += static_cast< const MDiagTestPlugin& >(
-            iResults[ CurrentIndexL() ]->Plugin() ).TotalSteps();
-        }
-    iCurrentPluginStep = 0;
-    }
-
-// ---------------------------------------------------------------------------
-// This function is called during live execution to transfer ownership of a
-// test result.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::SetProgressL( TUint aCurrentStep, TUint aTotalSteps )
-    {
-    LOGSTRING3( "CDevDiagExecResults::SetProgressL( %d, %d )",
-            aCurrentStep,
-            aTotalSteps )
-
-    // This is only valid for live executions.
-    if ( iType != ETypeExecution )
-        {
-        return;
-        }
-
-    // Assign the progress to the corresponding item in the local array.
-    iResults[ CurrentIndexL() ]->SetProgress( aCurrentStep, aTotalSteps );
-
-    // Update the current step counter.
-    if ( iResults[ CurrentIndexL() ]->Plugin().Type() ==
-        MDiagPlugin::ETypeTestPlugin )
-        {
-        iCurrentPluginStep = aCurrentStep;
-        }
-    else
-        {
-        iCurrentPluginStep = 0;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the corresponding results item from the local array.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult& CDevDiagExecResults::operator[] ( TInt aIndex )
-    {
-    return *iResults[ aIndex ];
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the corresponding results item from the local array.
-// ---------------------------------------------------------------------------
-//
-const CDevDiagExecResults::CResult& CDevDiagExecResults::operator[] (
-    TInt aIndex ) const
-    {
-    return *iResults[ aIndex ];
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the current item from the local array.  For results
-// which are from execution, this is the current execution item.  For results
-// which are from the database, this is always the last item.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CResult& CDevDiagExecResults::CurrentItemL()
-    {
-    return *iResults[ CurrentIndexL() ];
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the current item from the local array.  For results
-// which are from execution, this is the current execution item.  For results
-// which are from the database, this is always the last item.
-// ---------------------------------------------------------------------------
-//
-const CDevDiagExecResults::CResult& CDevDiagExecResults::CurrentItemL() const
-    {
-    return *iResults[ CurrentIndexL() ];
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the number of items in the local array.
-// ---------------------------------------------------------------------------
-//
-TInt CDevDiagExecResults::Count() const
-    {
-    return iResults.Count();
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the index of the currently-executing item.
-// ---------------------------------------------------------------------------
-//
-TUint CDevDiagExecResults::CurrentIndexL() const
-    {
-    // For live execution, the index from the execution plan is returned.
-    if ( iType == ETypeExecution )
-        {
-        TUint index = 0;
-        index = iDiagEngine->ExecutionPlanL().CurrentIndex();
-        return index;
-        }
-
-    // For logged test results, the last index is returned.
-    return iResults.Count() - 1;
-    }
-
-// ---------------------------------------------------------------------------
-// This utility function allows the result view to check if testing is
-// complete so that it can cancel the progress dialog.
-// ---------------------------------------------------------------------------
-//
-TBool CDevDiagExecResults::IsLastTestL() const
-    {
-    return ( CurrentIndexL() == ( Count() - 1 ) );
-    }
-
-// ---------------------------------------------------------------------------
-// This utility function checks to see if a test is being executed / was
-// executed as a dependency.
-// ---------------------------------------------------------------------------
-//
-TBool CDevDiagExecResults::IsDependencyL( TInt aIndex ) const
-    {
-    __ASSERT_ALWAYS( ( aIndex < Count() ), Panic( EPDApplicationGeneral ) );
-
-    // For live execution, get the information from the execution plan.
-    if ( iType == ETypeExecution )
-        {
-        TBool dependent = EFalse;
-        dependent = iDiagEngine->ExecutionPlanL()[ aIndex ].AsDependency();
-        return dependent;
-        }
-
-    // For logged test results, get the information from the test result.  The
-    // NULL check is needed in case the plugin failed during running and did
-    // not report a result.
-    if ( iResults[ aIndex ]->Result() )
-        {
-        return iResults[ aIndex ]->Result()->WasDependency();
-        }
-    else
-        {
-        return EFalse;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// This function locks "execution" style results from further changes, by
-// changing the results type and clearing the reference to the engine.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::Finalize()
-    {
-    LOGSTRING( "CDevDiagExecResults::Finalize()" )
-
-    iDiagEngine = NULL;
-    iType = ETypeLog;
-    iCompletedSteps = iTotalSteps;
-    iCurrentPluginStep = 0;
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the total number of steps for all items in the
-// execution results.
-// ---------------------------------------------------------------------------
-//
-TInt CDevDiagExecResults::TotalExecutionSteps() const
-    {
-    return iTotalSteps;
-    }
-
-// ---------------------------------------------------------------------------
-// This function returns the current execution step based on all items in the
-// execution results.
-// ---------------------------------------------------------------------------
-//
-TInt CDevDiagExecResults::CurrentExecutionStep() const
-    {
-    return iCompletedSteps + iCurrentPluginStep;
-    }
-
-// ---------------------------------------------------------------------------
-// Gets information about the test log.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::GetSessionInformationL( TInt& aSessionNumber,
-                                                  TInt& aTimeInterval,
-                                                  TTime& aStartTime,
-                                                  TTime& aEndTime ) const
-    {
-    LOGSTRING( "CDevDiagExecResults::GetSessionInformationL()" )
-
-    // Get the time interval from the Central Repository.
-    CRepository* repository = CRepository::NewLC( KCRUidPhoneDoctor );
-    User::LeaveIfError( repository->Get( KPDAppMaxUseTime, aTimeInterval ) );
-    CleanupStack::PopAndDestroy( repository );
-
-    // Get the list of database records.
-    CDatabaseRecordInfoArray* oldRecords =
-        new ( ELeave ) CDatabaseRecordInfoArray( KRecordsArrayGranularity );
-    CleanupStack::PushL( oldRecords );
-    User::LeaveIfError( iDbSession.GetAllRecordInfos( *oldRecords ) );
-
-    // Get the current DRM time.
-    TTime currentTime( TInt64( 0 ) );
-    DRM::CDrmServiceApi* drmApi = DRM::CDrmServiceApi::NewLC();
-    TInt timeZone = 0;
-    DRMClock::ESecurityLevel secLevel = DRMClock::KInsecure;
-    User::LeaveIfError( drmApi->GetSecureTime( currentTime,
-                                               timeZone,
-                                               secLevel ) );
-    CleanupStack::PopAndDestroy( drmApi );
-
-    // Go through the records list.
-    aSessionNumber = 0;
-    for ( TInt i = 0; i < oldRecords->Count(); i++ )
-        {
-        TDiagResultsDatabaseTestRecordInfo record = (*oldRecords)[ i ];
-
-        // If this record matches the one we have execution results for, store
-        // its start and end time.
-        if ( record.iRecordId == iRecordId )
-            {
-            aStartTime = record.iStartTime;
-            aEndTime = record.iFinishTime;
-            }
-
-        // Check the time interval that this record occured in.
-        TTimeIntervalSeconds timeDifference( 0 );
-        currentTime.SecondsFrom( record.iDrmStartTime, timeDifference );
-        if ( timeDifference.Int() <= aTimeInterval )
-            {
-            aSessionNumber++;
-            }
-        }
-
-    // Free the records information.
-    CleanupStack::PopAndDestroy( oldRecords );
-    }
-
-// ---------------------------------------------------------------------------
-// The default constructor.
-// ---------------------------------------------------------------------------
-//
-CDevDiagExecResults::CDevDiagExecResults( TUid aRecordId,
-                                          CDiagPluginPool& aPluginPool,
-                                          RDiagResultsDatabase& aDbSession,
-                                          MDiagEngineCommon* aDiagEngine )
-:   iRecordId( aRecordId ),
-    iPluginPool( aPluginPool ),
-    iDbSession( aDbSession ),
-    iDiagEngine( aDiagEngine )
-    {
-    LOGSTRING3( "CDevDiagExecResults::CDevDiagExecResults( %d, 0x%x )",
-                aRecordId.iUid,
-                aDiagEngine )
-
-    }
-
-// ---------------------------------------------------------------------------
-// The second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CDevDiagExecResults::ConstructL()
-    {
-    LOGSTRING( "CDevDiagExecResults::ConstructL()" )
-
-    // There are two types of results: (1) Current Execution, and (2) Logs.
-
-    // (1) If a pointer to the diagnostics engine was provided, then it is
-    // assumed that the results are from a live execution and this object will
-    // wait for the results to be assigned .
-    if ( iDiagEngine )
-        {
-        // This is the "current execution" type.
-        iType = ETypeExecution;
-        const MDiagPluginExecPlan& execPlan = iDiagEngine->ExecutionPlanL();
-
-        // Add an entry for every item in the plan.
-        TUint numItems = execPlan.Count();
-        for ( TUint i = 0; i < numItems; i++ )
-            {
-            CResult* result = CResult::NewLC( execPlan[i].Plugin() );
-            iResults.AppendL( result );
-            CleanupStack::Pop( result );
-
-            // Update the total step counter with this plugin's information.
-            if ( execPlan[i].Plugin().Type() == MDiagPlugin::ETypeTestPlugin )
-                {
-                iTotalSteps += static_cast< const MDiagTestPlugin& >(
-                    execPlan[i].Plugin() ).TotalSteps();
-                }
-            }
-        }
-    // (2) If no pointer to the diagnostics engine was provided, then all the
-    // results which correspond to the record id will be looked up from the
-    // results database.
-    else
-        {
-        // This is the "logged" type.
-        iType = ETypeLog;
-
-        // Get the record's results from the database.
-        RDiagResultsDatabaseRecord dbRecord;
-        User::LeaveIfError( dbRecord.Connect( iDbSession, iRecordId ) );
-        CleanupClosePushL( dbRecord );
-        RPointerArray< CDiagResultsDatabaseItem > logResults;
-        CleanupClosePushL( logResults );
-        User::LeaveIfError( dbRecord.GetTestResults( logResults ) );
-
-        // Add an entry for each result item.
-        TUint numItems = logResults.Count();
-        for ( TUint i = 0; i < numItems; i++ )
-            {
-            MDiagPlugin* plugin = NULL;
-            TInt err = iPluginPool.FindPlugin( logResults[i]->TestUid(),
-                                               plugin );
-
-            // If a matching plugin was not found for this result, we just
-            // skip over it, because we can't do anything useful with it.
-            // This case should only occur if a plugin logged results
-            // previously, but was later removed from the phone.
-            if ( err != KErrNone )
-                {
-                continue; //lint !e960 A continue makes sense here.
-                }
-
-            CResult* result = CResult::NewLC( *plugin );
-
-            // Ownership of the results item is transferred.
-            result->SetResult( logResults[i], KErrNone );
-            logResults[i] = NULL;
-
-            iResults.AppendL( result );
-            CleanupStack::Pop( result );
-            }
-
-        CleanupStack::Pop(); // logResults
-        CleanupStack::PopAndDestroy(); // dbRecord
-        logResults.ResetAndDestroy();
-
-        // Set dummy numbers for the execution steps.
-        iTotalSteps = 1;
-        iCompletedSteps = 1;
-        }
-    }
-
-// End of File