/*
* Copyright (c) 2005 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:  Contains phone engine central repository monitor base class
*
*/


// INCLUDE FILES
#include "cpecenrepmonitor.h"
#include <centralrepository.h>
#include <pepanic.pan>
#include <talogger.h>

// -----------------------------------------------------------------------------
// CPECenRepMonitor::CPECenRepMonitor
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CPECenRepMonitor::CPECenRepMonitor(
        TUint32 aMonitorSetting
        ) : CActive( EPriorityStandard ),
            iMonitorSetting( aMonitorSetting )
    {
    CActiveScheduler::Add( this );
    }

// Destructor
CPECenRepMonitor::~CPECenRepMonitor(
        // None
        )
    {
    Cancel();
    delete iRepository;
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::BaseConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CPECenRepMonitor::BaseConstructL(
        TUid aRepositoryUid
        )
    {
    // Create repository instance
    iRepository = CRepository::NewL( aRepositoryUid );
    // Start monitoring
    SubmitNotifyRequestL();
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::Get
// -----------------------------------------------------------------------------
//
TInt CPECenRepMonitor::Get(
        TInt& aValue
        )
    {
    return ( iRepository->Get( iMonitorSetting, aValue ) );
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::SubmitNotifyRequestL
// -----------------------------------------------------------------------------
//
void CPECenRepMonitor::SubmitNotifyRequestL(
        // None
        )
    {
    __ASSERT_DEBUG( iRepository, Panic( EPEPanicNoRepository ) );
    __ASSERT_DEBUG( !IsActive(), Panic( EPEPanicRepositoryAlreadyActive ) );
    iRepository->NotifyRequest( iMonitorSetting, iStatus );
    SetActive();
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::DoCancel
// -----------------------------------------------------------------------------
//
void CPECenRepMonitor::DoCancel(
        // None
        )
    {
    __ASSERT_DEBUG( iRepository, Panic( EPEPanicNoRepository ) );
    iRepository->NotifyCancel( iMonitorSetting );
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::RunError
// -----------------------------------------------------------------------------
//
TInt CPECenRepMonitor::RunError(
        #ifdef _DEBUG
        TInt aError // Log the leavecode from RunL
        #else
        TInt /*aError*/
        #endif
        )
    {
    #ifdef _DEBUG
    TEFLOGSTRING3( KTAERROR, "CPECenRepMonitor::RunError %d MonitorSetting: %d", aError, iMonitorSetting );
    #endif
    return ( KErrNone );
    }

// -----------------------------------------------------------------------------
// CPECenRepMonitor::RunL
// -----------------------------------------------------------------------------
//
void CPECenRepMonitor::RunL(
        // None
        )
    {
    TEFLOGSTRING3( KTAREQEND, "CPECenRepMonitor::RunL, status: %d, monitored setting: %d", iStatus.Int(), iMonitorSetting );

    // Don't resubmit the request on error
    // Central repositry completes notifications with id of setting
    // so check only that value of iStatus is negative
    User::LeaveIfError( iStatus.Int() < KErrNone ); 
    SubmitNotifyRequestL();
    UpdateL();
    }
    
// End of file
