brandingserver/tools/bsimport/src/cbsimportfilereader.cpp
changeset 0 e6b17d312c8b
child 21 cfd5c2994f10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/brandingserver/tools/bsimport/src/cbsimportfilereader.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,145 @@
+/*
+* 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 "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