appinstaller/AppinstUi/Server/Src/SWInstRequestStore.cpp
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 12:04:39 +0000
branchRCL_3
changeset 84 e6c5e34cd9b9
parent 0 ba25891c3a9e
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2002-2004 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 module contains the implementation of CSWInstRequestStore 
*                class member functions.
*
*/


// INCLUDE FILES
#include <SWInstDefs.h>

#include "SWInstRequestStore.h"
#include "SWInstRequestObject.h"

using namespace SwiUI;

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CSWInstRequestStore::CSWInstRequestStore
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSWInstRequestStore::CSWInstRequestStore()
    {
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSWInstRequestStore::ConstructL()
    {
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSWInstRequestStore* CSWInstRequestStore::NewL()
    {
    CSWInstRequestStore* self = new ( ELeave ) CSWInstRequestStore();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self; 
    }
    
// Destructor
CSWInstRequestStore::~CSWInstRequestStore()
    {    
    iRequests.ResetAndDestroy();    
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::GetRequest
// Returns the request object based on the given id.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CSWInstRequestObject* CSWInstRequestStore::GetRequest( TInt aRequestId )
    {
    CSWInstRequestObject* obj = NULL;    
    
    for ( TInt index = 0; index < iRequests.Count(); index++ )
        {
        if ( iRequests[index]->ObjectId() == aRequestId )
            {
            obj = iRequests[index];
            break;            
            }
        }

    return obj;
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::RequestCount
// Returns the current total request count.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CSWInstRequestStore::RequestCount()
    {
    return iRequests.Count();    
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::PendingRequestCount
// Returns the current outstanding request count.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CSWInstRequestStore::PendingRequestCount()
    {
    TInt result( 0 );
    
    for ( TInt index = 0; index < iRequests.Count(); index++ )
        {
        if ( iRequests[index]->IsActive() )
            {
            ++result;        
            }
        }

    return result;    
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::AddRequestL
// Adds the given request to the store.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSWInstRequestStore::AddRequestL( CSWInstRequestObject* aRequest )
    {
    if ( iRequests.Count() == KMaxRequestCount )
        {
        User::Leave( KSWInstErrBusy );
        }
    
    if ( !GetRequest( aRequest->ObjectId() ) )
        {
        iRequests.Append( aRequest );        
        }    
   
    else
        {
        User::Leave( KSWInstErrBusy );
        }
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::DestroyRequest
// Destroy a request and remove it from the store.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CSWInstRequestStore::DestroyRequest( TInt aRequestId ) 
    {
    TInt result( KErrNotFound );

    for ( TInt index = 0; index < iRequests.Count(); index++ )
        {
        if ( iRequests[index]->ObjectId() == aRequestId )
            {
            CSWInstRequestObject* obj = iRequests[index];
            iRequests.Remove( index );
            delete obj;
            result = KErrNone;
            break;            
            }
        }

    return result;    
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::Flush
// Destroys all completed requests.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//  
void CSWInstRequestStore::Flush()
    {
    TInt count = iRequests.Count();
    TInt index( 0 );
        
    while ( count )
        {
        CSWInstRequestObject* obj = iRequests[index];
        if ( !obj->IsActive() )
            {
            iRequests.Remove( index );
            delete obj;
            }        
        else
            {
            ++index;            
            }        
        --count;        
        }
    }

// -----------------------------------------------------------------------------
// CSWInstRequestStore::CancelAllRequests
// Cancels all requests. Asynchronous.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//  
void CSWInstRequestStore::CancelAllRequests()
    {
    for ( TInt index = 0; index < iRequests.Count(); index++ )
        {
        if ( iRequests[index]->IsActive() )
            {
            iRequests[index]->Cancel();
            }
        }
    }

//  End of File