iaupdate/IAD/engine/controller/inc/iaupdatecontrollerimpl.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:22:02 +0100
branchRCL_3
changeset 66 8b7f4e561641
parent 0 ba25891c3a9e
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2009 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:   ?Description
*
*/



#ifndef IAUPDATECONTROLLERIMPL_H
#define IAUPDATECONTROLLERIMPL_H


#include <e32base.h>
#include <e32cmn.h>
#include <ncdproviderobserver.h>
#include <ncdclientlocalizer.h>
#include <ncdserverreportoperationobserver.h>
#include <catalogsengineobserver.h>


#include "iaupdatecontroller.h"
#include "iaupdateloaderobserver.h"
#include "iaupdateselfupdaterobserver.h"
#include "iaupdatetimerobserver.h"


class MCatalogsBase;
class MNcdProvider;
class MNcdNode;
class MNcdNodeContainer;
class MNcdServerReportManager;
class MNcdServerReportOperation;
class CCatalogsEngine;
class MIAUpdateNode;
class MIAUpdateAnyNode;
class CIAUpdateNodeContainer;
class CIAUpdateHistory;
class CIAUpdateLoader;
class CIAUpdateSelfUpdaterCtrl;
class CIAUpdateContentOperationManager;
class CIAUpdateCacheCleaner;
class CIAUpdateControllerFile;
class CIAUpdateTimer;


/**
 *
 */
class CIAUpdateController : public CActive, 
                            public MIAUpdateController, 
                            public MIAUpdateLoaderObserver,
                            public MIAUpdateSelfUpdaterObserver,
                            public MCatalogsEngineObserver,
                            public MNcdProviderObserver,
                            public MNcdClientLocalizer,
                            public MNcdServerReportOperationObserver,
                            public MIAUpdateTimerObserver
    {
    
public:

    static CIAUpdateController* NewLC( const TUid& aFamilyUid, 
                                       MIAUpdateControllerObserver& aObserver );
    
    static CIAUpdateController* NewL( const TUid& aFamilyUid, 
                                      MIAUpdateControllerObserver& aObserver );
    
    
    virtual ~CIAUpdateController();


    const TUid& FamilyUid() const;

    MNcdProvider& ProviderL();
    
    CIAUpdateSelfUpdaterCtrl& SelfUpdaterCtrl();
    
    CIAUpdateContentOperationManager& ContentOperationManager();
     
    
public: // MIAUpdateController   
    
    /**
     * @see MIAUpdateController::Startup
     **/
    virtual TInt Startup();
    
    /**
     * @see MIAUpdateController::StartRefreshL
     **/
    virtual void StartRefreshL( TBool aAllowNetConnection );
        
    /**
     * @see MIAUpdateController::CancelRefresh
     **/
    virtual void CancelRefresh();

    /**
     * @see MIAUpdateController::CancelReporting
     **/
    virtual void CancelReporting();
    
    /**
     * @see MIAUpdateController::HistoryL
     */
    virtual MIAUpdateHistory& HistoryL();

    /**
     * @see MIAUpdateController::SetDefaultConnectionMethodL
     */
    virtual void SetDefaultConnectionMethodL( const TIAUpdateConnectionMethod& aMethod );

    /**
     * @see MIAUpdateController::SelfUpdateDataExists
     */
    virtual TBool SelfUpdateDataExists() const;

    /**
     * @see MIAUpdateController::StartPossibleSelfUpdateL
     */ 
    virtual TBool StartPossibleSelfUpdateL( TInt aIndex, 
                                            TInt aTotalCount,
                                            const RPointerArray< MIAUpdateNode >& aPendingNodes,
                                            TBool aSilent );

    /**
     * @see MIAUpdateController::ResetSelfUpdate
     */
    virtual void ResetSelfUpdate();    


    /**
     * @see MIAUpdateController::SelfUpdateRestartInfoL
     */
    virtual CIAUpdateRestartInfo* SelfUpdateRestartInfo();


    /**
     * @see MIAUpdateController::NodeL
     */
    virtual MIAUpdateNode& NodeL( const CIAUpdaterIdentifier& aIdentifier );


    /**
     * @see MIAUpdateController::StartingUpdatesL
     */
    virtual void StartingUpdatesL();


    /**
     * @see MIAUpdateController::FinishedUpdatesL
     */
    virtual void FinishedUpdatesL( TBool aOperationsAllowed, TInt aMaxWaitTime );    


public: // MIAUpdateLoaderObserver
    
    /**
     * @see MIAUpdateLoaderObserver::LoadComplete
     **/
    virtual void LoadComplete( TInt aError );


public: // MIAupdateSelfUpdaterObserver

    /** 
     * @see MIAupdateSelfUpdaterObserver::SelfUpdaterComplete
     */
    virtual void SelfUpdaterComplete( TInt aErrorCode );
    
                                                     
public: // MCatalogsEngineObserver
    
    /**
     * @see MCatalogsEngineObserver::CatalogsEngineShutdown
     */
    virtual void CatalogsEngineShutdown();

    /**
     * @see MCatalogsEngineObserver::CatalogsUpdateNotification
     */
    virtual void CatalogsUpdateNotification( const TDesC& aTarget,
                                             const TDesC& aId,
                                             const TDesC& aVersion,
                                             const TDesC& aUri,
                                             TBool aForce );

    /**
     * @see MCatalogsEngineObserver::CatalogsConnectionEvent
     */
    virtual void CatalogsConnectionEvent( TBool aConnectionActive );
    

public: // MNcdProviderObserver
  
    /**
     * @see MNcdProvider::ForceExpirationInformationReceived
     */
    virtual void ForceExpirationInformationReceived( RCatalogsArray< MNcdNode >& aExpiredNodes );
    
    
public: // MNcdClientLocalizer
    
    /**
     * @see MNcdClientLocalizer::LocalizeString
     *
     * At the moment, this implementation always returns NULL.
     */
    virtual HBufC* LocalizeString( const TDesC& aLocalizationKey );


public: // MNcdServerReportOperationObserver

    /**
     * @see MNcdServerReportOperationObserver::ReportProgress
     */
    virtual void ReportProgress( MNcdServerReportOperation& aOperation,
                                 TNcdProgress aProgress );
        
    /**
     * @see MNcdServerReportOperationObserver::QueryReceived
     */
    virtual void QueryReceived( MNcdServerReportOperation& aOperation,
                                MNcdQuery* aQuery );

    /**
     * @see MNcdServerReportOperationObserver::OperationComplete
     */
    virtual void OperationComplete( MNcdServerReportOperation& aOperation,
                                    TInt aError );


public: // MIAUpdateTimerObserver

    /** 
     * @see MIAUpdateTimeObserver::TimerComplete
     */
    virtual void TimerComplete( TInt aError );


protected: // CActive
    
    /**
     * @see CActive::DoCancel
     */
	virtual void DoCancel();

    /**
     * @see CActive::RunL
     */
	virtual void RunL();

    /**
     * @see CActive::RunError
     */
     virtual TInt RunError( TInt aError );
		
	
private:

    // Prevent these if not implemented
    CIAUpdateController( const CIAUpdateController& aObject );
    CIAUpdateController& operator =( const CIAUpdateController& aObject );

    CIAUpdateController( const TUid& aFamilyUid, MIAUpdateControllerObserver &aObserver );
    
    void ConstructL();

    void LocalLoadL();
    
    void LocalContainerLoadL( MNcdNodeContainer& aContainer );

    void SetupConfigurationL();

    MNcdNode* NodeFromPurchaseHistoryL( const CIAUpdaterIdentifier& aIdentifier );

    void CancelPausedOperationsL();


private: // data

    enum TControllerState
        {
        ENotRunning,
        EStarting,
        EIdle,
        EInClearCache,
        EInLoadOperation,
        EInLocalLoadOperation
        };

    TUid iFamilyUid;
    
    MIAUpdateControllerObserver& iObserver;
                
    TControllerState iControllerState;

    CCatalogsEngine* iEngine;
    
    MCatalogsBase* iBaseProvider;
    MNcdProvider* iProvider;
    MNcdServerReportManager* iServerReportManager;
    
    CIAUpdateSelfUpdaterCtrl* iSelfUpdaterCtrl;
    
    CIAUpdateLoader* iLoader;
    
    CIAUpdateNodeContainer* iNodeContainer;
    
    CIAUpdateHistory* iHistory;

    CIAUpdateContentOperationManager* iContentOperationManager;

    CIAUpdateCacheCleaner* iCacheCleaner;

    CIAUpdateControllerFile* iCacheClearFile;

    // This class does not own the contents of this array.
    RPointerArray< MIAUpdateAnyNode > iNodes;
    
    MNcdServerReportOperation* iReportOperation;
    TBool iCancellingReportOperation;

    CIAUpdateTimer* iReportTimer;
    TBool iReportTimerCompleted;
    
    };


#endif  //  IAUPDATECONTROLLERIMPL_H