diff -r 8173571d354e -r 1fc85118c3ae landmarksui/engine/src/CLmkParser.cpp --- a/landmarksui/engine/src/CLmkParser.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,462 +0,0 @@ -/* -* Copyright (c) 2002-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: This file contains methods which interact with Landmarks Framework -* parser which does the job of parsing landmarks in the received -* landmark package -* -*/ - - - - - - - -// INCLUDE FILES - -#include "EPos_CPosLandmarkParser.h" -#include "EPos_CPosLandmarkDatabase.h" -#include "EPos_CPosLandmark.h" -#include "landmarks.hrh" -#include "LmkFileUtils.h" -#include "CLmkAOOperation.h" -#include "CLmkDbUtils.h" -#include "CLmkParser.h" -#include "CLmkParseAllWrapper.h" -#include -#include - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -#if defined(_DEBUG) -_LIT( KPanicMsg, "CLmkParser" ); - -void Panic( TPanicCode aReason ) - { - User::Panic( KPanicMsg, aReason ); - } -#endif - -_LIT( KLmkTempDataFile, "c:\\system\\Temp\\LmkTemp.lmx" ); - -} // namespace - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CLmkParser::CLmkParser -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CLmkParser::CLmkParser( - CPosLandmarkDatabase& aDb, - MLmkAOOperationObserver& aObserver, - TBool aProgressNote ) - : iDb( aDb ), - iObserver( &aObserver ), - iProgressNote( aProgressNote ) - { - } - -// --------------------------------------------------------- -// CLmkParser::NewL -// --------------------------------------------------------- -// -EXPORT_C CLmkParser* CLmkParser::NewL( - const TDesC& aFile, - CPosLandmarkDatabase& aDb, - MLmkAOOperationObserver& aObserver, - TBool aProgressNote ) - { - CLmkParser* self = - new ( ELeave ) CLmkParser( aDb, aObserver, aProgressNote ); - CleanupStack::PushL( self ); - self->ConstructL( aFile ); - CleanupStack::Pop(); //self - return self; - } - -// --------------------------------------------------------- -// CLmkParser::NewL -// --------------------------------------------------------- -// -EXPORT_C CLmkParser* CLmkParser::NewL( - RFile& aFile, - CPosLandmarkDatabase& aDb, - MLmkAOOperationObserver& aObserver, - TBool aProgressNote ) - { - CLmkParser* self = - new ( ELeave ) CLmkParser( aDb, aObserver, aProgressNote ); - CleanupStack::PushL( self ); - self->ConstructL( aFile ); - CleanupStack::Pop(); //self - return self; - } - - -// ----------------------------------------------------------------------------- -// CLmkParser::ConstructL() -// ----------------------------------------------------------------------------- -// -void CLmkParser::ConstructL( const TDesC& aFile ) - { - - iDbUtils = CLmkDbUtils::NewL( iDb, *this, iProgressNote ); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - - RFile file; - LmkFileUtils::DeleteFileL(KLmkTempDataFile); - User::LeaveIfError(file.Create(fs, KLmkTempDataFile, EFileShareAny)); - CleanupClosePushL(file); - - RFile fileHandle; - User::LeaveIfError(fileHandle.Open(fs, aFile, EFileShareAny)); - CleanupClosePushL(fileHandle); - - TDataType mimeType; - User::LeaveIfError(ResolveMimeTypeL(fileHandle,mimeType)); - iParser = CPosLandmarkParser::NewL( mimeType.Des8()); - - HBufC8* tempBuf = HBufC8::NewLC(5000); // to manage for 5 Landmarks at the most - TPtr8 ptr = tempBuf->Des(); - User::LeaveIfError(fileHandle.Read( ptr )); - User::LeaveIfError(file.Write( ptr )); - - CleanupStack::PopAndDestroy(); // File - CleanupStack::PopAndDestroy(1); //tempBuf - - iParser->SetInputFileL( KLmkTempDataFile); - iParseWrapper = CLmkParseAllWrapper::NewL( *iParser, *this, iDb ); - iFileName = HBufC::NewL(256); - *iFileName = KLmkTempDataFile; - iFileHandleFlag = EFalse; - - CleanupStack::PopAndDestroy(); // File Handle - CleanupStack::PopAndDestroy(); // fs - } - -// ----------------------------------------------------------------------------- -// CLmkParser::ConstructL() -// ----------------------------------------------------------------------------- -// -void CLmkParser::ConstructL(RFile& aFile ) - { - iDbUtils = CLmkDbUtils::NewL( iDb, *this, iProgressNote ); - - TDataType mimeType; - User::LeaveIfError(ResolveMimeTypeL(aFile,mimeType)); - iParser = CPosLandmarkParser::NewL( mimeType.Des8()); - iParser->SetInputFileHandleL(aFile); - iParseWrapper = CLmkParseAllWrapper::NewL( *iParser, *this, iDb ); - - iFileHandle = &aFile; - iFileHandleFlag = ETrue; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::~CLmkParser() -// ----------------------------------------------------------------------------- -// -CLmkParser::~CLmkParser() - { - delete iAOOperation; - delete iParser; - delete iParseWrapper; - delete iDbUtils; - delete iFileName; - iFileHandle = NULL; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::HandleOperationL -// ----------------------------------------------------------------------------- -// -void CLmkParser::HandleOperationL( -TOperationTypes aType, -TReal32 aProgress, -TInt aStatus ) - { - // Initialize operation is not done with iAOOperation so in that case - // we don't delete iAOOperation. - if ( aType != EInitialize && aStatus != KPosLmOperationNotComplete ) - { - /* Parsing is done with iAOOperation when wrapper isn't used anymore. - * Remove the following if-statement when removing wrapper - */ - if( aType != EParse ) - { - __ASSERT_DEBUG( iAOOperation, Panic( KLmkPanicNullMember ) ); - - delete iAOOperation; - iAOOperation = NULL; - } - } - __ASSERT_DEBUG( iObserver, Panic( KLmkPanicNullMember ) ); - iObserver->HandleOperationL( aType, aProgress, aStatus ); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::FileName -// ----------------------------------------------------------------------------- -// -EXPORT_C TPtrC CLmkParser::FileName() - { - TInt error = KErrNone; - if( !iFileName ) - { - TRAP( error,iFileName = HBufC::NewL(256)); - } - if( !error ) - { - TPtr ptr = iFileName->Des(); - iFileHandle->Name( ptr ); - return *iFileName; - } - return TPtrC(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::FileHandle -// ----------------------------------------------------------------------------- -// -EXPORT_C RFile& CLmkParser::FileHandle() - { - return *iFileHandle; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::IsFileHandle -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CLmkParser::IsFileHandle() - { - return iFileHandleFlag; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::InitializeDbL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::InitializeDbL() - { - iDbUtils->InitializeDbL(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::StartParsingL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::StartParsingL() - { - LeaveIfInUseL(); - iParseWrapper->ParseAllL(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::NumOfParsedLandmarks -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CLmkParser::NumOfParsedLandmarks() - { - return iParseWrapper->NumOfLandmarks(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::PackageName -// ----------------------------------------------------------------------------- -// -EXPORT_C TPtrC CLmkParser::PackageName() - { - _LIT( KDot, "." ); - TPtrC ptr = iParser->CollectionData( EPosLmCollDataCollectionName ); - if( ptr.Length() == 0) - { - //get the position of '.' character - TInt pos = FileName().Find(KDot); - if( pos != KErrNotFound) - { - //get the left most string starting from '.' char - return FileName().Left( pos ); - } - else - { - return FileName(); - } - } - return ptr; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::LandmarkLC -// ----------------------------------------------------------------------------- -// -EXPORT_C CPosLandmark* CLmkParser::LandmarkLC( TInt aIndex ) - { - return iParseWrapper->LandmarkLC( aIndex ); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::LmkLandmarkLC -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkLandmark* CLmkParser::LmkLandmarkLC( TInt aIndex ) - { - return iParseWrapper->LmkLandmarkLC(aIndex); - } -// ----------------------------------------------------------------------------- -// CLmkParser::CategoryNameLC -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkLandMarkCategoriesName* CLmkParser::CategoryNameLC( TInt aIndex ) - { - /* THIS FUNCTIONALITY WILL BE USED WHEN WRAPPER IS REMOVED: - return iParser->LandmarkLC( aIndex ); - */ - return iParseWrapper->CategoryNameLC( aIndex ); - } - -// -// ----------------------------------------------------------------------------- -// CLmkParser::ChangeObserver -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::ChangeObserver( - MLmkAOOperationObserver& aNewObserver ) - { - iObserver = &aNewObserver; - } - -// ----------------------------------------------------------------------------- -// CLmkParser::StartImportingL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::StartImportingL(TBool aIncludeNewCategories) - { - LeaveIfInUseL(); - - CPosLandmarkDatabase::TTransferOptions options; - - if ( aIncludeNewCategories ) - { - options = CPosLandmarkDatabase::EIncludeCategories; - } - else - { - options = (CPosLandmarkDatabase::EIncludeCategories) | - (CPosLandmarkDatabase::ESupressCategoryCreation); - } - - CPosLmOperation* operation = - iDb.ImportLandmarksL( *iParser, options ); - CleanupStack::PushL( operation ); - iAOOperation = CLmkAOOperation::NewL( operation, - *this, - EImport, - iProgressNote ); - CleanupStack::Pop( operation ); // ownership transferred - - iAOOperation->StartOperation(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::StartImportingL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::StartImportingL( - const RArray& aSelected, TBool aIncludeNewCategories) - { - LeaveIfInUseL(); - - CPosLandmarkDatabase::TTransferOptions options; - - if ( aIncludeNewCategories ) - { - options = CPosLandmarkDatabase::EIncludeCategories; - } - else - { - options = (CPosLandmarkDatabase::EIncludeCategories) | (CPosLandmarkDatabase::ESupressCategoryCreation); - } - - CPosLmOperation* operation = - iDb.ImportLandmarksL( *iParser, aSelected, options ); - CleanupStack::PushL( operation ); - iAOOperation = CLmkAOOperation::NewL( operation, - *this, - EImport, - iProgressNote ); - CleanupStack::Pop( operation ); // ownership transferred - - iAOOperation->StartOperation(); - } - -// ----------------------------------------------------------------------------- -// CLmkParser::CancelImporting -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkParser::CancelImporting() - { - if ( iAOOperation ) - { - iAOOperation->Cancel(); - delete iAOOperation; - iAOOperation = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CLmkParser::LeaveIfInUseL -// ----------------------------------------------------------------------------- -// -void CLmkParser::LeaveIfInUseL() - { - if ( iAOOperation ) - { - User::Leave( KErrInUse ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkParser::ResolveMimeTypeL -// ----------------------------------------------------------------------------- -// -TInt CLmkParser::ResolveMimeTypeL( RFile& aFile, TDataType& aDataType ) const - { - TInt result(KErrNotFound); - RApaLsSession ls ; - TDataRecognitionResult dataType; - TInt err( ls.Connect() ); - if ( err == KErrNone ) - { - CleanupClosePushL( ls ); - err = ls.RecognizeData(aFile, dataType); - if(err == KErrNone && - (dataType.iConfidence == CApaDataRecognizerType::EProbable - || dataType.iConfidence == CApaDataRecognizerType::ECertain - || dataType.iConfidence == CApaDataRecognizerType::EPossible)) - { - aDataType = dataType.iDataType; - result = KErrNone; - } - CleanupStack::PopAndDestroy(&ls); - } - return result; - } -// End of File