brandingserver/tools/bsimport/src/cbsimportfilereader.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:31:29 +0300
branchRCL_3
changeset 21 cfd5c2994f10
parent 0 e6b17d312c8b
child 22 113b91e0a2ad
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:   Import reader opens and reads the XML file to CMDXMLDocument 
*                object
*
*/



#include <f32file.h>
#include <gmxmldocument.h>

#include "cbsimportfilereader.h"
#include "importlogwriter.h"

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

// ---------------------------------------------------------------------------
// CBSImportManager::NewL
// ---------------------------------------------------------------------------
//
CBSImportFileReader* CBSImportFileReader::NewL( TBool aUseScheduler )
    {
    CBSImportFileReader* self = NewLC( aUseScheduler );
    CleanupStack::Pop();
    return self;
    }

// ---------------------------------------------------------------------------
// CBSImportManager::NewLC
// ---------------------------------------------------------------------------
//
CBSImportFileReader* CBSImportFileReader::NewLC( TBool aUseScheduler )
    {
    CBSImportFileReader* self = new (ELeave) CBSImportFileReader( aUseScheduler );
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// ---------------------------------------------------------------------------
// CBSImportManager::ConstructL
// ---------------------------------------------------------------------------
//
void CBSImportFileReader::ConstructL()
    {
	if( iUseScheduler )
	    {
    	// Install active scheduler
    	iScheduler = new (ELeave) CActiveScheduler();
    	CActiveScheduler::Install( iScheduler );
	    }
    else
        {
        iWaiter = new (ELeave) CActiveSchedulerWait();
        }
    
    // Create XML parser
    iParser = CMDXMLParser::NewL( this );
    }
    
// ---------------------------------------------------------------------------
// CBSImportManager::~CBSImportFileReader
// ---------------------------------------------------------------------------
//
CBSImportFileReader::~CBSImportFileReader()
    {
    delete iParser;
    delete iDocument;
    delete iWaiter;
    delete iScheduler;
	if( iUseScheduler )
	    {
	    CActiveScheduler::Install( NULL );
	    }
    }

// ---------------------------------------------------------------------------
// CBSImportManager::CBSImportFileReader
// ---------------------------------------------------------------------------
//
CBSImportFileReader::CBSImportFileReader( TBool aUseScheduler ) :
    iUseScheduler( aUseScheduler )
    {
    }

// ---------------------------------------------------------------------------
// CBSImportManager::ReadXMLFileL
// ---------------------------------------------------------------------------
//
CMDXMLDocument* CBSImportFileReader::ReadXMLFileL( RFs& aFs, const TDesC& aFileName )
    {
    RFile file;
    TInt err = file.Open( aFs, aFileName, EFileRead );
    if( err )
        {
        IMPORT_DP( D_IMPORT_LIT( "ERROR: Unable to open XML file (%S)!" ), &aFileName );
        User::Leave( err );
        }

    // takes ownership of file
    err = iParser->ParseFile( file );
    if( err )
        {
        IMPORT_DP( D_IMPORT_LIT( "ERROR: Unable to read XML file (%S)!" ), &aFileName );
        User::Leave( err );
        }
    
    // Start waiting, so that parser can start working
	// Code scanner warning active object called without checking whether it is active
	// or cancelling it first (id:10 )
    // The active object cannot be active at this point.
    // Code scanner warning using CActiveScheduler::Start (Id:3)
    // It is required to use here
    iUseScheduler ? CActiveScheduler::Start() : iWaiter->Start(); // CSI: 10,3 # See above
    
    CMDXMLDocument* tmp = iDocument;
    iDocument = NULL;
    return tmp;
    }

// ---------------------------------------------------------------------------
// From class MMDXMLParserObserver.
// CBSImportManager::ParseFileCompleteL
// ---------------------------------------------------------------------------
//
void CBSImportFileReader::ParseFileCompleteL()
    {
    iDocument = iParser->DetachXMLDoc();
    // Codescanner warning using CActiveScheduler::Start (Id:4)
    // It is required to use here
    iUseScheduler ? CActiveScheduler::Stop() : iWaiter->AsyncStop(); // CSI: 4 # See above
    }

// End of file