landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp47.cpp
author hgs
Fri, 09 Jul 2010 20:18:03 +0530
changeset 35 1a92308afc46
parent 33 834e27cad510
permissions -rw-r--r--
201027

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

//  INCLUDES
#include "FT_CPosTp47.h"
#include <EPos_CPosLandmarkDatabase.h>
#include <EPos_CPosLandmarkParser.h>
#include <EPos_CPosLandmarkEncoder.h>
#include <LbsPosition.h>
#include <e32math.h>
#include <bautils.h>
#include <utf.h>
#include <xml/xmlparsererrors.h>

// CONSTANTS
_LIT(KFileName, "c:\\documents\\Tp47Data.xml");
_LIT(KFileTrace, "c:\\documents\\LandmarksTP47Trace.txt");

// See \epoc32\include\xml\XmlParserErrors.h for error codes


_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP47Trace.txt");

_LIT(KMimeWithNameAndTimeStampFile, "c:\\system\\test\\TestData\\Tp47Data_With_MIME_Name.xml");
_LIT(KErronousXMLFile, "c:\\system\\test\\TestData\\Tp47ErrounousXMLData.xml");

_LIT(KErronousXMLFileDataMissing1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields1.xml");
_LIT(KErronousXMLFileDataMissing2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields2.xml");
_LIT(KErronousXMLFileDataMissing3, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields3.xml");

_LIT(KErronousXMLFileWrongOrder1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder1.xml");
_LIT(KErronousXMLFileWrongOrder2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder2.xml");
_LIT(KErronousXMLFileWrongOrder3, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder3.xml");

_LIT(KErronousXMLFileRepeatedTag, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataRepeatedTag.xml");
_LIT(KErronousXMLFileUnclosedTag1, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataUnclosedTag1.xml");
//_LIT(KErronousXMLFileUnclosedTag2, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataUnclosedTag2.xml");

_LIT(KUnknownTags, "c:\\system\\test\\TestData\\Tp47UnknownTags.xml");
_LIT(KUnknownTrees, "c:\\system\\test\\TestData\\Tp47UnknownTrees.xml");

_LIT(KNoEndTag1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag1.xml");
_LIT(KNoEndTag2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag2.xml");

_LIT(KNoXMLFile1, "c:\\system\\test\\TestData\\Tp47ErronousFileNoXML1.xml");
_LIT(KNoXMLFile2, "c:\\system\\test\\TestData\\Tp47ErronousFileNoXML2.xml");

_LIT(KTestXMLInput1, "c:\\system\\test\\TestData\\Tp47XMLDataTestInput1.xml");

_LIT(KXMLFileWithLongCategoryName, "c:\\system\\test\\TestData\\Tp47XMLWithLongCategoryName.xml");
_LIT(KXMLFileWithLongLandmarkName, "c:\\system\\test\\TestData\\Tp47XMLWithLongName.xml");
_LIT(KXMLFileWithLongLatitudeField, "c:\\system\\test\\TestData\\Tp47XMLWithLongLatitudeField.xml");

_LIT(KXMLFileWithEmptyCollection, "c:\\system\\test\\TestData\\Tp47ErronousXMLFileEmptyCollection.xml");

_LIT(KXMLFileWithXMLTagAsDataField1, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField1.xml");
_LIT(KXMLFileWithXMLTagAsDataField2, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField2.xml");
_LIT(KXMLFileWithXMLTagAsDataField3, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField3.xml");

_LIT(KErronousXMLFileTagInTag, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataTagInTag1.xml");
//_LIT(KErronousXMLFileMissingLMPrefix, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataMissingLMPrefix.xml");

_LIT(KXMLFileUTF8, "c:\\system\\test\\TestData\\Tp47DataUTF8.xml");
_LIT(KXMLFileUTF16, "c:\\system\\test\\TestData\\Tp47DataUTF16.xml");

_LIT(KXML_UTF_16_BE, "c:\\system\\test\\TestData\\TP47_UTF-16-bigEndian.xml");
_LIT(KXML_UTF_16_LE, "c:\\system\\test\\TestData\\TP47_UTF-16-littleEndian.xml");
_LIT(KXML_UTF_8, "c:\\system\\test\\TestData\\TP47_UTF-8.xml");
_LIT(KXML_UTF_CHINESE, "c:\\system\\test\\TestData\\TP47_UTF-Chinese.xml");

_LIT(KXMLFileWithEmptyMedialink, "c:\\system\\test\\TestData\\Tp47EmptyMediaLink.xml");
_LIT(KXMLFileWithEmptyCoordinates, "c:\\system\\test\\TestData\\Tp47EmptyCoordinates.xml");
_LIT(KXMLFileWithEmptyAdresseInfo, "c:\\system\\test\\TestData\\Tp47EmptyAdresseInfo.xml");

_LIT(KXMLFileWithErronousTextInTag1, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag1.xml");
_LIT(KXMLFileWithErronousTextInTag2, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag2.xml");
_LIT(KXMLFileWithErronousTextInTag3, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag3.xml");
_LIT(KXMLFileWithErronousTextInTag4, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag4.xml");
_LIT(KXMLFileWithErronousTextInTag5, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag5.xml");
_LIT(KXMLFileWithErronousTextInTag6, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag6.xml");

//KML test files
_LIT(KKMLFile, "c:\\system\\test\\TestData\\Tp47KML.kml");
_LIT(KKMLFile1, "c:\\system\\test\\TestData\\Tp47KMLfile1.kml");
_LIT(KKMLFile2, "c:\\system\\test\\TestData\\Tp47KMLfile2.kml");
_LIT(KKMLFile3, "c:\\system\\test\\TestData\\Tp47KMLfile3.kml");

_LIT(KKMLLongName, "c:\\system\\test\\TestData\\Tp47KMLlongName.kml");
_LIT(KKMLNameCaps, "c:\\system\\test\\TestData\\Tp47KMLNameCaps.kml");
_LIT(KKMLErroneousNameTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTag.kml");
_LIT(KKMLErroneousNameTagPosition1, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTagPosition1.kml");
_LIT(KKMLErroneousNameTagPosition2, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTagPosition2.kml");
_LIT(KKMLEmptyName, "c:\\system\\test\\TestData\\Tp47KMLEmptyName.kml");
_LIT(KKMLMissingNameTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingNameTag1.kml");
_LIT(KKMLMissingNameTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingNameTag2.kml");
_LIT(KKMLNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLNameWithSpecialCharacters1.kml");
_LIT(KKMLNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLNameWithSpecialCharacters2.kml");

_LIT(KKMLEmptyPhoneNumber, "c:\\system\\test\\TestData\\Tp47KMLEmptyPhoneNumber.kml");
_LIT(KKMLErroneousPhoneNumberTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPhoneNumberTag.kml");
_LIT(KKMLErroneousPhoneNumberTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousPhoneNumberTagPosition.kml");
_LIT(KKMLLongPhoneNumer, "c:\\system\\test\\TestData\\Tp47KMLLongPhoneNumer.kml");
_LIT(KKMLMissingPhoneTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPhoneTag1.kml");
_LIT(KKMLMissingPhoneTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPhoneTag2.kml");
_LIT(KKMLPhoneNumberCaps, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberCaps.kml");
_LIT(KKMLPhoneNumberWithText, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithText.kml");
_LIT(KKMLPhoneNumberWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithSpecialCharacters1.kml");
_LIT(KKMLPhoneNumberWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithSpecialCharacters2.kml");

_LIT(KKMLEmptyPoint, "c:\\system\\test\\TestData\\Tp47KMLEmptyPoint.kml");
_LIT(KKMLErroneousPointTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPointTag.kml");
_LIT(KKMLErroneousPointTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousPointTagPosition.kml");
_LIT(KKMLMissingPointTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPointTag1.kml");
_LIT(KKMLMissingPointTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPointTag2.kml");
_LIT(KKMLPointCaps, "c:\\system\\test\\TestData\\Tp47KMLPointCaps.kml");
_LIT(KKMLPointTag1, "c:\\system\\test\\TestData\\Tp47KMLPointTag1.kml");
_LIT(KKMLPointTag2, "c:\\system\\test\\TestData\\Tp47KMLPointTag2.kml");
_LIT(KKMLPointTag3, "c:\\system\\test\\TestData\\Tp47KMLPointTag3.kml");

_LIT(KKMLEmptyDescription, "c:\\system\\test\\TestData\\Tp47KMLEmptyDescription.kml");
_LIT(KKMLDescriptionWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithSpecialCharacters1.kml");
_LIT(KKMLDescriptionWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithSpecialCharacters2.kml");
_LIT(KKMLDescriptionCaps, "c:\\system\\test\\TestData\\Tp47KMLDescriptionCaps.kml");
_LIT(KKMLLongDescription, "c:\\system\\test\\TestData\\Tp47KMLLongDescription.kml");
_LIT(KKMLErroneousDescriptionTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousDescriptionTag.kml");
_LIT(KKMLErroneousDescriptionTagposition, "c:\\system\\test\\TestData\\Tp47KMLErroneousDescriptionTagposition.kml");
_LIT(KKMLMissingDescriptionTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingDescriptionTag1.kml");
_LIT(KKMLMissingDescriptionTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingDescriptionTag2.kml");
_LIT(KKMLDescriptionWithCDATA, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithCDATA.kml");

_LIT(KKMLErroneousFolderTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousFolderTag.kml");
_LIT(KKMLFolderCaps, "c:\\system\\test\\TestData\\Tp47KMLFolderCaps.kml");
_LIT(KKMLMissingFolderTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingFolderTag1.kml");
_LIT(KKMLMissingFolderTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingFolderTag2.kml");
_LIT(KKMLEmptyFolderName, "c:\\system\\test\\TestData\\Tp47KMLEmptyFolderName.kml");
_LIT(KKMLLongFolderName, "c:\\system\\test\\TestData\\Tp47KMLLongFolderName.kml");
_LIT(KKMLFolderNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLFolderNameWithSpecialCharacters1.kml");
_LIT(KKMLFolderNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLFolderNameWithSpecialCharacters2.kml");

_LIT(KKMLDocumentNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLDocumentNameWithSpecialCharacters1.kml");
_LIT(KKMLDocumentNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLDocumentNameWithSpecialCharacters2.kml");
_LIT(KKMLEmptyDocumentName, "c:\\system\\test\\TestData\\Tp47KMLEmptyDocumentName.kml");
_LIT(KKMLLongDocumentName, "c:\\system\\test\\TestData\\Tp47KMLLongDocumentName.kml");
_LIT(KKMLDocumentCaps, "c:\\system\\test\\TestData\\Tp47KMLDocumentCaps.kml");
_LIT(KKMLErroneousDocumentTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousDocumentTag.kml");
_LIT(KKMLMissingDocumentTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingDocumentTag1.kml");
_LIT(KKMLMissingDocumentTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingDocumentTag2.kml");

_LIT(KKMLAddressCaps, "c:\\system\\test\\TestData\\Tp47KMLAddressCaps.kml");
_LIT(KKMLAddressWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLAddressWithSpecialCharacters1.kml");
_LIT(KKMLAddressWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLAddressWithSpecialCharacters2.kml");
_LIT(KKMLEmptyAddress1, "c:\\system\\test\\TestData\\Tp47KMLEmptyAddress1.kml");
_LIT(KKMLEmptyAddress2, "c:\\system\\test\\TestData\\Tp47KMLEmptyAddress2.kml");
_LIT(KKMLLongAddress1, "c:\\system\\test\\TestData\\Tp47KMLLongAddress1.kml");
_LIT(KKMLLongAddress2, "c:\\system\\test\\TestData\\Tp47KMLLongAddress2.kml");
_LIT(KKMLLongAddress3, "c:\\system\\test\\TestData\\Tp47KMLLongAddress3.kml");
_LIT(KKMLErroneousAddressTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousAddressTag.kml");
_LIT(KKMLErroneousAddressTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousAddressTagPosition.kml");
_LIT(KKMLMissingAddressTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingAddressTag1.kml");
_LIT(KKMLMissingAddressTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingAddressTag2.kml");

_LIT(KKMLCoordinateCaps, "c:\\system\\test\\TestData\\Tp47KMLCoordinateCaps.kml");
_LIT(KKMLMoreCoordinates, "c:\\system\\test\\TestData\\Tp47KMLMoreCoordinates.kml");
_LIT(KKMLErroneousCoordinateTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinateTag.kml");
_LIT(KKMLErroneousCoordinateTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinateTagPosition.kml");
_LIT(KKMLCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLCoordinates1.kml");
_LIT(KKMLCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLCoordinates2.kml");
_LIT(KKMLCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLCoordinates3.kml");
_LIT(KKMLCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLCoordinates4.kml");
_LIT(KKMLCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLCoordinates5.kml");
_LIT(KKMLCoordinates6, "c:\\system\\test\\TestData\\Tp47KMLCoordinates6.kml");
_LIT(KKMLLongCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLLongCoordinates1.kml");
_LIT(KKMLLongCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLLongCoordinates2.kml");
_LIT(KKMLMissingCoordinateTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingCoordinateTag1.kml");
_LIT(KKMLMissingCoordinateTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingCoordinateTag2.kml");
_LIT(KKMLEmptyCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates1.kml");
_LIT(KKMLEmptyCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates2.kml");
_LIT(KKMLEmptyCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates3.kml");
_LIT(KKMLEmptyCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates4.kml");
_LIT(KKMLEmptyCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates5.kml");
_LIT(KKMLEmptyCoordinates6, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates6.kml");
_LIT(KKMLEmptyCoordinates7, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates7.kml");
_LIT(KKMLErroneousCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates1.kml");
_LIT(KKMLErroneousCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates2.kml");
_LIT(KKMLErroneousCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates3.kml");
_LIT(KKMLErroneousCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates4.kml");
_LIT(KKMLErroneousCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates5.kml");
_LIT(KKMLNegativeCoordinates, "c:\\system\\test\\TestData\\Tp47KMLNegativeCoordinates.kml");

_LIT(KKMLErroneousTextWithinPlacemark, "c:\\system\\test\\TestData\\Tp47KMLErroneousTextWithinPlacemark.kml");
_LIT(KKMLEmptyfile1, "c:\\system\\test\\TestData\\Tp47KMLEmptyfile1.kml");
_LIT(KKMLEmptyfile2, "c:\\system\\test\\TestData\\Tp47KMLEmptyfile2.kml");
_LIT(KKMLInvalidfile, "c:\\system\\test\\TestData\\Tp47KMLInvalidfile.kml");

_LIT(KKMLPlacemarkCaps, "c:\\system\\test\\TestData\\Tp47KMLPlacemarkCaps.kml");
_LIT(KKMLErroneousPlacemarkTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPlacemarkTag.kml");
_LIT(KKMLMissingPlacemarkTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPlacemarkTag1.kml");
_LIT(KKMLMissingPlacemarkTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPlacemarkTag2.kml");
_LIT(KKMLEmptyPlacemarkTag, "c:\\system\\test\\TestData\\Tp47KMLEmptyPlacemarkTag.kml");

_LIT(KKMLGandhiMuseum, "c:\\system\\test\\TestData\\Tp47KMLGandhi Museum.kml");
_LIT(KKMLIndusHeritageCentreIndia, "c:\\system\\test\\TestData\\Tp47KMLIndus Heritage Centre, India.kml");
_LIT(KKMLHiltonHotels, "c:\\system\\test\\TestData\\Tp47KMLhilton hotels near new york (1 - 10).kml");

_LIT(KKMLFile4, "c:\\system\\test\\TestData\\Tp47KMLfile4.kml");
_LIT(KKMLFile5, "c:\\system\\test\\TestData\\Tp47KMLfile5.kml");
_LIT(KKMLFile6, "c:\\system\\test\\TestData\\Tp47KMLfile6.kml");
_LIT(KKMLFile7, "c:\\system\\test\\TestData\\Tp47KMLfile7.kml");
_LIT(KKMLFile8, "c:\\system\\test\\TestData\\Tp47KMLfile8.kml");
_LIT(KKMLFile9, "c:\\system\\test\\TestData\\Tp47KMLfile9.kml");







// Maxmimum size for each line in trace file
const TInt KBufSize = 5000;

// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CPosTp47::CloseTest
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::CloseTest()
    {
    iLog->Log(_L("CloseTest"));

    delete iEncoderBuffer;
    iEncoderBuffer = NULL;

    iLandmarks.ResetAndDestroy();
    iLandmarks.Close();

    delete iDatabase;
    iDatabase=NULL;

    delete iLandmarkEncoder;
    iLandmarkEncoder = NULL;

    delete iLandmarkParser;
    iLandmarkParser = NULL;

    delete iOperation;
    iOperation = NULL;

    TRAPD(err, RemoveGlobalCategoriesL());
    if (err != KErrNone && err != KErrNotFound)
        {
        HBufC* buf = HBufC::NewLC( 128 );
        TPtr buffer = buf->Des();
            
        buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
        iLog->Log( buffer );
        
        CleanupStack::PopAndDestroy( buf );
        }

    iLog->Log(_L("CloseTest Done"));
    }

// ---------------------------------------------------------
// CPosTp47::StartL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::StartL()
    {
    BaflUtils::EnsurePathExistsL( iFileSession, KFileName );

    // Use same lm db as in composite search test
    iDatabase = UseCompositeLandmarksDbFileL();
    if (iDatabase->IsInitializingNeeded())
       {
       ExecuteAndDeleteLD(iDatabase->InitializeL());
       }

    // Delete the trace file
    DeleteFileL(KFileTrace);

    delete iDatabase;
    iDatabase = NULL;

    iDatabase = CPosLandmarkDatabase::OpenL();
    	
    if (iDatabase->IsInitializingNeeded())
       {
       ExecuteAndDeleteLD(iDatabase->InitializeL());
       }

    // Do reset so that global categories are included
    CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
    CleanupStack::PushL(categoryManager);

    ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
    CleanupStack::PopAndDestroy(categoryManager);

    HBufC8* emptyBuffer=NULL;

    CreateXMLData(ETrue);

    PrintParsedDataFromEncoderL(KFileName, *emptyBuffer, KErrNone, KLmxMimeType );

    CheckXMLData(ETrue);

    // Use buffer instead of file
    CreateXMLData(EFalse);
    CheckXMLData(EFalse);

    iLandmarks.ResetAndDestroy();


	
    iLog->Log(_L("Mime With Name and Stamp"));
    PrintParsedDataFromEncoderL(KMimeWithNameAndTimeStampFile, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KMimeWithNameAndTimeStampFile, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Several Landmark File"));
    // XXX PrintParsedDataFromEncoderL(KSeveralLandmarkFile, *emptyBuffer, KErrPosLmUnknownFormat);

    iLog->Log(_L("Erronous XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFile, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFile, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Several LandmarkCollection File"));
    // XXX PrintParsedDataFromEncoderL(KSeveralLandmarkCollectionFile, *emptyBuffer, KErrPosLmUnknownFormat);

    iLog->Log(_L("1) Wrong Order in XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("2) Wrong Order in XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("3) Wrong Order in XML File"));
    // AdresseInfo can be sorted randomly without any error
    PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder3, *emptyBuffer, KErrNone, KLmxMimeType );
    // N/A for GPX

    iLog->Log(_L("1) Data missing in XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("2) Data missing in XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing2, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing2, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("3) Data missing in XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing3, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing3, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Unknown tags in XML File"));
    PrintParsedDataFromEncoderL(KUnknownTags, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KUnknownTags, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Unknown trees in XML File"));
    PrintParsedDataFromEncoderL(KUnknownTrees, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KUnknownTrees, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("No End landmarkCollection tag in XML File"));
    PrintParsedDataFromEncoderL(KNoEndTag1, *emptyBuffer, -993, KLmxMimeType );
    PrintParsedDataFromEncoderL(KNoEndTag1, *emptyBuffer, -993, KGpxMimeType );

    iLog->Log(_L("No End landmark tag in XML File"));
    PrintParsedDataFromEncoderL(KNoEndTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KNoEndTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with different input formats in XML File"));
    PrintParsedDataFromEncoderL(KTestXMLInput1, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KTestXMLInput1, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with repeated tag XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileRepeatedTag, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileRepeatedTag, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with unclosed tag XML File"));
    PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag1, *emptyBuffer, -993, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag1, *emptyBuffer, -993, KGpxMimeType );

//    Incorrect test
//    iLog->Log(_L("Test with unclosed tag XML File"));
//    PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
//    PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with a non XML File 1"));
    PrintParsedDataFromEncoderL(KNoXMLFile1, *emptyBuffer, -982, KLmxMimeType );
    PrintParsedDataFromEncoderL(KNoXMLFile1, *emptyBuffer, -982, KGpxMimeType );

    iLog->Log(_L("Test with a non XML File 2"));
    PrintParsedDataFromEncoderL(KNoXMLFile2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType ); //temporarily changed KErrPosLmUnknownFormat to KErrNone
    PrintParsedDataFromEncoderL(KNoXMLFile2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType ); //temporarily KErrPosLmUnknownFormat to KErrNone

    iLog->Log(_L("Test with a XML UTFW8 File"));
    PrintParsedDataFromEncoderL(KXMLFileUTF8, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileUTF8, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with a XML UTFW16 File"));
    PrintParsedDataFromEncoderL(KXMLFileUTF16, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileUTF16, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with long category names"));
    PrintParsedDataFromEncoderL(KXMLFileWithLongCategoryName, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithLongCategoryName, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with long landmark name"));
    PrintParsedDataFromEncoderL(KXMLFileWithLongLandmarkName, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithLongLandmarkName, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with long latitude field"));
    PrintParsedDataFromEncoderL(KXMLFileWithLongLatitudeField, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithLongLatitudeField, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with empty collection"));
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyCollection, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    // N/A for GPX

    iLog->Log(_L("Test with a XML File with Landmark Tag in Landmark Tag"));
    PrintParsedDataFromEncoderL(KErronousXMLFileTagInTag, *emptyBuffer, EXmlRecursiveEntity, KLmxMimeType );
    PrintParsedDataFromEncoderL(KErronousXMLFileTagInTag, *emptyBuffer, EXmlRecursiveEntity, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with XML Tag as data field 1"));
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField1, *emptyBuffer, -993, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField1, *emptyBuffer, -993, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with XML Tag as data field 2"));
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField2, *emptyBuffer, -993, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField2, *emptyBuffer, -993, KGpxMimeType );

    iLog->Log(_L("Test with a XML File with XML Tag as data field 3"));
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField3, *emptyBuffer, -993, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField3, *emptyBuffer, -993, KGpxMimeType );

//    Incorrect test
//    iLog->Log(_L("Test with a XML File with missing LM prefix"));
//    PrintParsedDataFromEncoderL(KErronousXMLFileMissingLMPrefix, *emptyBuffer, EXmlRecursiveEntity, KLmxMimeType );
//    PrintParsedDataFromEncoderL(KErronousXMLFileMissingLMPrefix, *emptyBuffer, EXmlRecursiveEntity, KGpxMimeType );
//
    iLog->Log(_L("Test with UTF-16-bigEndian.xml"));
    PrintParsedDataFromEncoderL(KXML_UTF_16_BE, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXML_UTF_16_BE, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with UTF-16-littleEndian.xml"));
    PrintParsedDataFromEncoderL(KXML_UTF_16_LE, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXML_UTF_16_LE, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with UTF-8.xml"));
    PrintParsedDataFromEncoderL(KXML_UTF_8, *emptyBuffer, KErrNone, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXML_UTF_8, *emptyBuffer, KErrNone, KGpxMimeType );

    iLog->Log(_L("Test with UTF-Chinese.xml"));
    PrintParsedDataFromEncoderL(KXML_UTF_CHINESE, *emptyBuffer, -982, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXML_UTF_CHINESE, *emptyBuffer, -982, KGpxMimeType );
    
    
    
    //testing kml files
    iLog->Log(_L("Test with Tp47KML.kml"));
	PrintParsedDataFromEncoderL(KKMLFile, *emptyBuffer, KErrNone, KKmlMimeType );
	
	iLog->Log(_L("Test with Tp47KMLfile1.kml"));
	PrintParsedDataFromEncoderL(KKMLFile1, *emptyBuffer, KErrNone, KKmlMimeType );
	
	iLog->Log(_L("Test with Tp47KMLfile2.kml"));
	PrintParsedDataFromEncoderL(KKMLFile2, *emptyBuffer, KErrNone, KKmlMimeType );
	
	iLog->Log(_L("Test with Tp47KMLfile3.kml"));
	PrintParsedDataFromEncoderL(KKMLFile3, *emptyBuffer, KErrNone, KKmlMimeType );
	
	//testing the name tag related cases
	iLog->Log(_L("Test with Tp47KMLlongName.kml"));
	PrintParsedDataFromEncoderL(KKMLLongName, *emptyBuffer, KErrNone, KKmlMimeType );
	
	iLog->Log(_L("Test with Tp47KMLNameCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLNameCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousNameTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousNameTag, *emptyBuffer, -993, KKmlMimeType );			//EXmlTagMismatch = -993

	iLog->Log(_L("Test with Tp47KMLErroneousNameTagPosition1.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousNameTagPosition1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousNameTagPosition2.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousNameTagPosition2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyName.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyName, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingNameTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingNameTag1, *emptyBuffer, -993, KKmlMimeType );			//EXmlTagMismatch = -993

	iLog->Log(_L("Test with Tp47KMLMissingNameTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingNameTag2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLNameWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType ); // EXmlInvalidToken = -996

	iLog->Log(_L("Test with Tp47KMLNameWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
	
	//testing the PhoneNumber tag related cases
	iLog->Log(_L("Test with Tp47KMLEmptyPhoneNumber.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyPhoneNumber, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousPhoneNumberTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousPhoneNumberTag, *emptyBuffer, -993, KKmlMimeType ); 

	iLog->Log(_L("Test with Tp47KMLErroneousPhoneNumberTagPosition.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousPhoneNumberTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongPhoneNumer.kml"));
	PrintParsedDataFromEncoderL(KKMLLongPhoneNumer, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPhoneTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPhoneTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPhoneTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPhoneTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPhoneNumberCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLPhoneNumberCaps, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPhoneNumberWithText.kml"));
	PrintParsedDataFromEncoderL(KKMLPhoneNumberWithText, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPhoneNumberWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLPhoneNumberWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPhoneNumberWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLPhoneNumberWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
	
	//testing the point tag related test cases
	iLog->Log(_L("Test with Tp47KMLEmptyPoint.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyPoint, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousPointTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousPointTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousPointTagPosition.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousPointTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPointTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPointTag1, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPointTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPointTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPointCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLPointCaps, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPointTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLPointTag1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPointTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLPointTag2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLPointTag3.kml"));
	PrintParsedDataFromEncoderL(KKMLPointTag3, *emptyBuffer, KErrNone, KKmlMimeType );

	
	//testing the description tag related cases
	iLog->Log(_L("Test with Tp47KMLEmptyDescription.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyDescription, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDescriptionWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLDescriptionWithSpecialCharacters1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDescriptionWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLDescriptionWithSpecialCharacters2, *emptyBuffer, -996, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDescriptionCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLDescriptionCaps, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongDescription.kml"));
	PrintParsedDataFromEncoderL(KKMLLongDescription, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousDescriptionTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousDescriptionTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousDescriptionTagposition.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousDescriptionTagposition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingDescriptionTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingDescriptionTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingDescriptionTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingDescriptionTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDescriptionWithCDATA.kml"));
	PrintParsedDataFromEncoderL(KKMLDescriptionWithCDATA, *emptyBuffer, KErrNone, KKmlMimeType );
	
	//testing the folder tag related cases
	iLog->Log(_L("Test with Tp47KMLErroneousFolderTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousFolderTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFolderCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLFolderCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingFolderTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingFolderTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingFolderTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingFolderTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyFolderName.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyFolderName, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongFolderName.kml"));
	PrintParsedDataFromEncoderL(KKMLLongFolderName, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFolderNameWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLFolderNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFolderNameWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLFolderNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );


	//testing the document tag related cases
	iLog->Log(_L("Test with Tp47KMLDocumentNameWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLDocumentNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDocumentNameWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLDocumentNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyDocumentName.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyDocumentName, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongDocumentName.kml"));
	PrintParsedDataFromEncoderL(KKMLLongDocumentName, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLDocumentCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLDocumentCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousDocumentTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousDocumentTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingDocumentTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingDocumentTag1, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingDocumentTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingDocumentTag2, *emptyBuffer, -993, KKmlMimeType );
	
	
	//testing the address tag related cases
	iLog->Log(_L("Test with Tp47KMLAddressCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLAddressCaps, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLAddressWithSpecialCharacters1.kml"));
	PrintParsedDataFromEncoderL(KKMLAddressWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLAddressWithSpecialCharacters2.kml"));
	PrintParsedDataFromEncoderL(KKMLAddressWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyAddress1.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyAddress1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyAddress2.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyAddress2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongAddress1.kml"));
	PrintParsedDataFromEncoderL(KKMLLongAddress1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongAddress2.kml"));
	PrintParsedDataFromEncoderL(KKMLLongAddress2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongAddress3.kml"));
	PrintParsedDataFromEncoderL(KKMLLongAddress3, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousAddressTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousAddressTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousAddressTagPosition.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousAddressTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingAddressTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingAddressTag1, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingAddressTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingAddressTag2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	//testing the coordinate tag related cases
	iLog->Log(_L("Test with Tp47KMLCoordinateCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinateCaps, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMoreCoordinates.kml"));
	PrintParsedDataFromEncoderL(KKMLMoreCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinateTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinateTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinateTagPosition.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinateTagPosition, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates1.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates2.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates3.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates3, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates4.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates5.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates5, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLCoordinates6.kml"));
	PrintParsedDataFromEncoderL(KKMLCoordinates6, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongCoordinates1.kml"));
	PrintParsedDataFromEncoderL(KKMLLongCoordinates1, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLLongCoordinates2.kml"));
	PrintParsedDataFromEncoderL(KKMLLongCoordinates2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingCoordinateTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingCoordinateTag1, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingCoordinateTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingCoordinateTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates1.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates2.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates2, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates3.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates3, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates4.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates4, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates5.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates5, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates6.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates6, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyCoordinates7.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyCoordinates7, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinates1.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinates1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinates2.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinates2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinates3.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinates3, *emptyBuffer, KErrOverflow, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinates4.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinates4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousCoordinates5.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousCoordinates5, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLNegativeCoordinates.kml"));
	PrintParsedDataFromEncoderL(KKMLNegativeCoordinates, *emptyBuffer, KErrNone, KKmlMimeType );
	
	//testing some invalid cases
	iLog->Log(_L("Test with Tp47KMLErroneousTextWithinPlacemark.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousTextWithinPlacemark, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyfile1.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyfile1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyfile2.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyfile2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLInvalidfile.kml"));
	PrintParsedDataFromEncoderL(KKMLInvalidfile, *emptyBuffer, -983, KKmlMimeType ); //EXmlMisplacedPi =  -983
	
	//testing the Placemark tag related cases
	iLog->Log(_L("Test with Tp47KMLPlacemarkCaps.kml"));
	PrintParsedDataFromEncoderL(KKMLPlacemarkCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLErroneousPlacemarkTag.kml"));
	PrintParsedDataFromEncoderL(KKMLErroneousPlacemarkTag, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPlacemarkTag1.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPlacemarkTag1, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLMissingPlacemarkTag2.kml"));
	PrintParsedDataFromEncoderL(KKMLMissingPlacemarkTag2, *emptyBuffer, -993, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLEmptyPlacemarkTag.kml"));
	PrintParsedDataFromEncoderL(KKMLEmptyPlacemarkTag, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
	
	//testing with kml files downloaded from google earth
	iLog->Log(_L("Test with Tp47KMLGandhi Museum.kml"));
	PrintParsedDataFromEncoderL(KKMLGandhiMuseum, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLIndus Heritage Centre, India.kml"));
	PrintParsedDataFromEncoderL(KKMLIndusHeritageCentreIndia, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLhilton hotels near new york (1 - 10).kml"));
	PrintParsedDataFromEncoderL(KKMLHiltonHotels, *emptyBuffer, KErrNone, KKmlMimeType );
	
	iLog->Log(_L("Test with Tp47KMLFile4.kml"));
	PrintParsedDataFromEncoderL(KKMLFile4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFile5.kml"));
	PrintParsedDataFromEncoderL(KKMLFile5, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFile6.kml"));
	PrintParsedDataFromEncoderL(KKMLFile6, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFile7.kml"));
	PrintParsedDataFromEncoderL(KKMLFile7, *emptyBuffer, KErrNone, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFile8.kml"));
	PrintParsedDataFromEncoderL(KKMLFile8, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );

	iLog->Log(_L("Test with Tp47KMLFile9.kml"));
	PrintParsedDataFromEncoderL(KKMLFile9, *emptyBuffer, -993, KKmlMimeType );

    // Now compare tha trace file against the correct one
    RFile correctFile;
    RFile file;

    iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
    
    TFileName filename;
    CreateCorrectXmlFileL( KCorrectFile, filename );
    
    User::LeaveIfError(correctFile.Open(iFileSession, filename,  EFileRead));
    CleanupClosePushL(correctFile);
    User::LeaveIfError(file.Open(iFileSession, KFileTrace,  EFileRead));
    CleanupClosePushL(file);

    HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
            TPtr correctLine = correctLinebuffer->Des();    
            HBufC* linebuffer = HBufC::NewLC( KBufSize );
            TPtr line = linebuffer->Des();    
   	
    TInt err = KErrNone;
    TBool done = EFalse;
    TInt lineNr = 0;

    while (ReadLn(correctFile, correctLine) != KErrEof && !done)
        {
        lineNr++;
        err = ReadLn(file, line);
        if ( err == KErrEof ) 
            {
            done = ETrue;    
            }
        correctLine.Trim();
        line.Trim();
        if (correctLine.Compare(line) != KErrNone)
            {
            HBufC* buf = HBufC::NewLC( 128 );
            TPtr buffer = buf->Des();
            
            buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
            
            iLog->Log( buffer );
            iLog->Log( correctLine );
            iLog->Log( line );
            iErrorsFound++;
            CleanupStack::PopAndDestroy( buf );
            }
        }
		CleanupStack::PopAndDestroy(linebuffer);
    CleanupStack::PopAndDestroy(correctLinebuffer);
    CleanupStack::PopAndDestroy(&file);
    CleanupStack::PopAndDestroy(&correctFile);

    // EOF for trace file was reach before EOF in the correct file
    if (done)
        {
        iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
        iErrorsFound++;
        }

    iLog->Log(_L("Test with Empty MediaLink"));
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyMedialink, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyMedialink, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Empty Coordinates"));
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Empty AdresseInfo"));
    PrintParsedDataFromEncoderL(KXMLFileWithEmptyAdresseInfo, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    // N/A for GPX

    iLog->Log(_L("Test with Erronous Text in Tag1"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Erronous Text in Tag2"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Erronous Text in Tag3"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag3, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag3, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Erronous Text in Tag4"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag4, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag4, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Erronous Text in Tag5"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag5, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag5, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    iLog->Log(_L("Test with Erronous Text in Tag6"));
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag6, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
    PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag6, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );

    CheckIndexNotSupportedL();

    DoCancelTestL();

    if (iErrorsFound != KErrNone)// LogErrorAndLeave(_L("Errors found in TP47"));
        {
    	iLog->Log(_L("Errors found in TP47"));
    	User::Leave(-1);
        }
	}

// ---------------------------------------------------------
// CPosTp47::CheckIndexNotSupportedL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::CheckIndexNotSupportedL()
    {
    iLog->Log(_L("CheckIndexNotSupportedL"));

    iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
    iLandmarkParser->SetInputFileL(KFileName);

    // This function should leave with KErrNotSupported
    TRAPD(err, iOperation = iLandmarkParser->ParseContentL(ETrue));

    delete iOperation;
    iOperation = NULL;

    delete iLandmarkParser;
    iLandmarkParser = NULL;

    if (err != KErrNotSupported)
    {
    	iLog->Log(_L("ParseContentL(ETrue) did not leave with KErrNotSupported"));
    	User::Leave(err);
    }

    iLandmarkParser = CPosLandmarkParser::NewL(KGpxMimeType);
    iLandmarkParser->SetInputFileL(KFileName);

    // This function should leave with KErrNotSupported
    TRAP(err, iOperation = iLandmarkParser->ParseContentL(ETrue));

    delete iOperation;
    iOperation = NULL;

    delete iLandmarkParser;
    iLandmarkParser = NULL;

    if (err != KErrNotSupported)
    {
        iLog->Log(_L("ParseContentL(ETrue) (GPX) did not leave with KErrNotSupported"));
        User::Leave(err);
    }

    iLog->Log(_L("CheckIndexNotSupportedL Done"));
    }

// ---------------------------------------------------------
// CPosTp47::DoCancelTestL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::DoCancelTestL()
    {
    iLog->Log(_L("DoCancelTestL"));
    iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
    iLandmarkParser->SetInputFileL(KFileName);

    iOperation = iLandmarkParser->ParseContentL();

    TRequestStatus status = KPosLmOperationNotComplete;
    TReal32 progress;

    // 1 ) Cancel parse function by deleting iOperation
    delete iOperation;
    iOperation = NULL;

    TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != 0)
    {
    	iLog->Log(_L("No landmarks should be found"));
    	User::Leave(KErrNone);
    }

    // No landmark should be found
    TRAPD(err, iLandmarkParser->LandmarkLC());
    if (err != KErrNotFound)
        {
        iLog->Log(_L("ERROR: No Landmark should be found"));
        iErrorsFound++;
        }

    // 1 ) Cancel parse function by changing input
    iOperation = iLandmarkParser->ParseContentL();

    // Get the first landmark
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != 1)
    {
    	iLog->Log(_L("One landmark should be found"));
    	User::Leave(KErrNone);
    }

    // Change input
    iLandmarkParser->SetInputFileL(KFileName);

    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != 0)
    {
    	iLog->Log(_L("No landmarks should be found"));
    	User::Leave(KErrNone);
    }

    // No landmark should be found
    TRAP(err, iLandmarkParser->LandmarkLC());
    if (err != KErrNotFound)
        {
        iLog->Log(_L("ERROR: No Landmark should be found"));
        iErrorsFound++;
        }

    delete iOperation;
    iOperation = NULL;
    delete iLandmarkParser;
    iLandmarkParser = NULL;
    iLog->Log(_L("DoCancelTestL Done"));
    }

// ---------------------------------------------------------
// CPosTp47::CreateXMLData
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::CreateXMLData(TBool aUseFile)
    {
    iLog->Log(_L("CreateXMLData"));
    // 1) Create an encoder object
    iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);

    CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
    CleanupStack::PushL(categoryManager);

    if (aUseFile)
        {
        DeleteFileL(KFileName);
        // 2) Use file for encoding, set output file
        iLandmarkEncoder->SetOutputFileL(KFileName);
        }
    else
        {
        // 2) Use buffer for encoding
        iEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
        }

    // 300 characters
    _LIT(KLongFieldName, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
    _LIT(KLongFieldDescription, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
    _LIT(KLongFieldDescriptionExtra, "A________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________B");
    _LIT(KLongFieldDescriptionExtra2, "Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra");

    iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, KLongFieldName);
    iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, KLongFieldDescription);
    iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)(EPosLmCollDataContentSpecificDataBegin), KLongFieldDescriptionExtra);
    iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)(EPosLmCollDataContentSpecificDataBegin + 1), KLongFieldDescriptionExtra2);

    iLog->Log(_L("Create Data..."));

    // 3) Add one landmark with all fields set to be encoded
    CPosLandmark* lm1 = CreateXMLLandmarkLC(_L("TP47Landmark1"));
    AddAllXMLFieldsL(lm1);

    iLandmarkEncoder->AddLandmarkL(*lm1);
    iLandmarks.Append(lm1);
    CleanupStack::Pop(lm1);

    // 4) Add one more landmark to be encoded (id27 "LOG9" in categories 11-17)
    CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(27);
    iLandmarkEncoder->AddLandmarkL(*lm2);
    // Remove field 408 which is not exported
    lm2->RemovePositionField(408);
    iLandmarks.Append(lm2);
    CleanupStack::Pop(lm2);

    // 5) Add one category (pizzeria) to the latest added landmark
    CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(1);

    iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
    CleanupStack::PopAndDestroy(landmarkCategory);

    // 6) Add one landmark to be encoded (id=18 "enat?r" in category 18)
    lm1 = iDatabase->ReadLandmarkLC(18);
    iLandmarkEncoder->AddLandmarkL(*lm1);
    // Remove field 408 which is not exported
    lm1->RemovePositionField(408);
    iLandmarks.Append(lm1);
    CleanupStack::Pop(lm1);

    // 7) Add one category (Frisör) to the latest added landmark
    landmarkCategory = categoryManager->ReadCategoryLC(18);

    iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
    CleanupStack::PopAndDestroy(landmarkCategory);

    // 8 ) Add one global category  (Entertainment) to the latest added landmark

    TPosLmItemId globalCategoryId = categoryManager->GetGlobalCategoryL(15000);
    if (globalCategoryId != KPosLmNullItemId)
        {
        landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
        iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
        CleanupStack::PopAndDestroy(landmarkCategory);
    }
    else
    {
    	iLog->Log(_L("Global category was not found1"));
    	User::Leave(-1);
    }

    // 9 ) Add one global category  (People) to the latest added landmark

    globalCategoryId = categoryManager->GetGlobalCategoryL(27000);
    if (globalCategoryId != KPosLmNullItemId)
        {
        landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
        iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
        CleanupStack::PopAndDestroy(landmarkCategory);
        }
    else
    {
    	iLog->Log(_L("Global category was not found2"));
    	User::Leave(-1);
    }
    // 11) Add one landmark with all fields set to empty (_L(""))
    lm1 = CreateXMLLandmarkLC(_L("TP47LandmarkEmpty"));
    AddAllEmptyXMLFieldsL(lm1);
    iLandmarkEncoder->AddLandmarkL(*lm1);
    // Remove field 402 (EPositionFieldCountryCode) which is not exported when empty
    lm1->RemovePositionField(402);
    iLandmarks.Append(lm1);
    CleanupStack::Pop(lm1);

    // 12) Add one landmark with all fields set to be encoded
    lm1 = CreateXMLLandmarkLC(_L("TP47Landmark2"));
    AddAllXMLFieldsL(lm1);
    iLandmarkEncoder->AddLandmarkL(*lm1);

    iLandmarks.Append(lm1);
    CleanupStack::Pop(lm1);

    // 13) Add one global category  (Shopping) to the latest added landmark
    globalCategoryId = categoryManager->GetGlobalCategoryL(36000);
    if (globalCategoryId != KPosLmNullItemId)
        {
        landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
        iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
        CleanupStack::PopAndDestroy(landmarkCategory);
    }
    else
    {
    	iLog->Log(_L("Global category was not found3"));
    	User::Leave(-1);
    }

    // 14) Add one global category  (Sports) to the latest added landmark
      globalCategoryId = categoryManager->GetGlobalCategoryL(42000);
    if (globalCategoryId != KPosLmNullItemId)
        {
        landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
        iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
        CleanupStack::PopAndDestroy(landmarkCategory);
        }
    else
    	{
    	iLog->Log(_L("Global category was not found4"));
    	User::Leave(-1);
    	}

      // ) Finalize encoding
    iLog->Log(_L("FinalizeEncodingL"));
    ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
    iLog->Log(_L("FinalizeEncodingL Done"));

    delete iLandmarkEncoder;
    iLandmarkEncoder = NULL;
    CleanupStack::PopAndDestroy(categoryManager);
    }

// ---------------------------------------------------------
// CPosTp47::CheckXMLData
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::CheckXMLData(TBool aUseFile)
    {
    iLog->Log(_L("CheckXMLData"));

    // This number must be updated if any more landmarks are added
    const TInt KNrOfAddedLandmarks = 5;

    iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);

    CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
    CleanupStack::PushL(categoryManager);

    RArray<TPosLmItemId> array;
    CleanupClosePushL(array);

    HBufC8* bufferContent = NULL;

    if (aUseFile)
        {
        iLog->Log(_L("----->Using FILE<-------"));
        iLandmarkParser->SetInputFileL(KFileName);
        }
    else
        {
        iLog->Log(_L("----->Using BUFFER<-------"));
        bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
        TPtr8 ptr = bufferContent->Des();
        iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
        iLandmarkParser->SetInputBuffer(*bufferContent);
        }

    iOperation = iLandmarkParser->ParseContentL();
    TRequestStatus status = KPosLmOperationNotComplete;
    TReal32 progress;
    TInt number = 0;

    // 1) Get the first landmark, "TP47Landmark1", no categories
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    // Get last parsed landmark
    CPosLandmark* lm = iLandmarkParser->LandmarkLC();
    lm->GetCategoriesL(array);
    AssertTrueSecL(array.Count() == 0, _L("1) Wrong number of landmark categories"));
    iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
    CleanupStack::PopAndDestroy(lm);

    TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != number)
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }

    // 2) Get landmark, "LOG9", local category Pizzeria
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    // Get last parsed landmark
    lm = iLandmarkParser->LandmarkLC();
    lm->GetCategoriesL(array);
    AssertTrueSecL(array.Count() == 1, _L("2) Wrong number of landmark categories"));
    iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
    CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[0]);
    CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(1);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);
    CleanupStack::PopAndDestroy(lm);

    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != number)
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }

    // 3) Get landmark, "enato?r", local categories Frisör, Hunddagis and global categories Sports Ground, Gas Station
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    // Get last parsed landmark
    lm = iLandmarkParser->LandmarkLC();
    lm->GetCategoriesL(array);
    AssertTrueSecL(array.Count() == 3, _L("3) Wrong number of landmark categories"));
    iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);

    // check local category Frisör here
    category = iLandmarkParser->LandmarkCategoryLC(array[0]);
    cat = categoryManager->ReadCategoryLC(18);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);

    // check global category Sports Ground globalid=7 (id=33) here
    category = iLandmarkParser->LandmarkCategoryLC(array[1]);
   // cat = categoryManager->ReadCategoryLC(33);
    cat = categoryManager->ReadCategoryLC(31);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);

    //Check global category "id=3 Gas station" here
    category = iLandmarkParser->LandmarkCategoryLC(array[2]);
    //cat = categoryManager->ReadCategoryLC(29);
    cat = categoryManager->ReadCategoryLC(35);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);

    CleanupStack::PopAndDestroy(lm);
    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != number)// LogErrorAndLeave(_L("Wrong number of landmarks parsed"));
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }

    // 4) Get landmark, TP47LandmarkEmpty, no categories
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    // Get last parsed landmark
    lm = iLandmarkParser->LandmarkLC();
    lm->GetCategoriesL(array);
    AssertTrueSecL(array.Count() == 0, _L("4) Wrong number of landmark categories"));
    iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
    CleanupStack::PopAndDestroy(lm);

    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != number)
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }

    // 5) Get landmark, TP47Landmark2, local categories Burger King and global categories Garage, Bus Stop
    iOperation->NextStep(status, progress);
    // Wait for NextStep to complete
    User::WaitForRequest(status);
    // Get last parsed landmark
    lm = iLandmarkParser->LandmarkLC();
    lm->GetCategoriesL(array);
    AssertTrueSecL(array.Count() == 2, _L("5) Wrong number of landmark categories"));
    iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);

    // check global category Garage globalid=8 (id=34) here
    category = iLandmarkParser->LandmarkCategoryLC(array[0]);
    //cat = categoryManager->ReadCategoryLC(34);
    cat = categoryManager->ReadCategoryLC(38);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);

    //Check global category "id=10 Bus Stop" here
    category = iLandmarkParser->LandmarkCategoryLC(array[1]);
   // cat = categoryManager->ReadCategoryLC(36);
    cat = categoryManager->ReadCategoryLC(40);
    iErrorsFound += CompareXMLCategoriesL(*cat, *category);
    CleanupStack::PopAndDestroy(cat);
    CleanupStack::PopAndDestroy(category);
    CleanupStack::PopAndDestroy(lm);

    // Check that correct number of landmarks has been parsed
    if (number != KNrOfAddedLandmarks)
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }
    nr = iLandmarkParser->NumOfParsedLandmarks();
    if ((TInt)nr != KNrOfAddedLandmarks)
    {
    	iLog->Log(_L("Wrong number of landmarks parsed"));
    	User::Leave(-1);
    }

    if (!aUseFile) CleanupStack::PopAndDestroy(bufferContent);

    CleanupStack::PopAndDestroy(&array);
    CleanupStack::PopAndDestroy(categoryManager);

    delete iLandmarkParser;
    iLandmarkParser = NULL;

    delete iOperation;
    iOperation = NULL;

    // iEncoderBuffer was allocated in CreateXMLData
    delete iEncoderBuffer;
    iEncoderBuffer = NULL;

    iLog->Log(_L("CheckXMLData Done"));
    }

// ---------------------------------------------------------
// CPosTp47::PrintParsedDataFromEncoderL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::PrintParsedDataFromEncoderL(
    const TDesC& aFile, 
    const TDesC8&  aBuffer, 
    TInt aExpectedStatusCode,
    const TDesC8& aMimeType)
    {
    iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
   
   
    iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);

    if (aFile != KNullDesC)
        {
        TFileName file( aFile );
        if ( aMimeType == KGpxMimeType )
            {
            TInt pos = file.Find( KXmlFileExt );
            file.Replace( pos, KXmlFileExt().Length(), KGpxFileExt );
            }
        iLog->Log(_L("FILE (%S)"), &file );
        TraceL(_L("----->Using FILE<-------"));
        iLog->Log(_L("Calling TraceL"));
        TraceL(file);
        iLog->Log(_L("Input file to be set"));
        iLandmarkParser->SetInputFileL(file);
        iLog->Log(_L("Input file set"));
        }
    else
        {
        iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
        TraceL(_L("----->Using BUFFER<-------"));
        iLandmarkParser->SetInputBuffer(aBuffer);
        }

    iOperation = iLandmarkParser->ParseContentL();
    TRequestStatus status = KPosLmOperationNotComplete;
    TReal32 progress;
    TInt number = 0;

    RArray<TPosLmItemId> array;
    CleanupClosePushL(array);
	iLog->Log(_L("Parse begin"));
    while (status == KPosLmOperationNotComplete)
        {
        iLog->Log(_L("--- Parsing ---------------------------"));
        TraceL(_L("------------------------------"));
        iOperation->NextStep(status, progress);

        // Wait for NextStep to complete
        User::WaitForRequest(status);
        if (status != KPosLmOperationNotComplete && status != KErrNone)
            {
            HBufC* buffer = HBufC::NewLC( 128);
            TPtr buf = buffer->Des();
                       
            buf.Format(_L("\tStatus %d"), status.Int());
            iLog->Log(buf);
            TraceL(buf);
            
            CleanupStack::PopAndDestroy( buffer );
            buffer = NULL;              
            }
        else
            {
            if ( iLandmarkParser->NumOfParsedLandmarks() )
                {
                // Get last parsed landmark
                CPosLandmark* lm = iLandmarkParser->LandmarkLC();
                TPtrC lmName;
                TPtrC catName;
                lm->GetLandmarkName(lmName);
                lm->GetCategoriesL(array);
                //iLog->Log(lmName);
                for (TInt i=0;i<array.Count();i++)
                    {
                    CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[i]);
                    category->GetCategoryName( catName );
                     
                    HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
                    TPtr buf = buffer->Des();
                                            
                    if ( category->GlobalCategory()) 
                        {
                        buf.Append(_L("\tGlobal category: "));    
                        }
                    else 
                        {
                        buf.Append(_L("\tLocal category: "));    
                        }                        
                    buf.Append(catName);
                    iLog->Log(buf);
                    TraceL(buf);
                    CleanupStack::PopAndDestroy(buffer);
                    buffer = NULL;
                    CleanupStack::PopAndDestroy(category);
                    }
                    
                if ( aMimeType == KKmlMimeType )
                {
                	PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);	
                }
                else
                {
                	PrintLandmarkFieldsL(*lm, ETrue);	
                }
                
                number++;
                CleanupStack::PopAndDestroy(lm);
                }
            }
        }

    iLog->Log(_L("--- Parsing end ---------------------------"));
    TraceL(_L("------------------------------"));
    CleanupStack::PopAndDestroy(&array);

    if (status.Int() != aExpectedStatusCode)
        {
        HBufC* buffer = HBufC::NewLC( 128 );
        TPtr buf = buffer->Des();
                    
        buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
        iLog->Log( buf );
        iErrorsFound++;
        
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;        
        }

    TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
    HBufC* buffer = HBufC::NewLC( 256 );
    TPtr buf = buffer->Des();
    buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
    iLog->Log(buf);
    TraceL(buf);

    CleanupStack::PopAndDestroy( buffer );
    buffer = NULL;
    if (nr != (TUint32)number)
        {
        iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
        iErrorsFound++;
        }

    TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();

    iLog->Log(_L("--- CollectionData ---"));
    TraceL(_L("--- CollectionData ---"));

    if (lmId != EPosLmCollDataNone)
        {
        TPtrC first = iLandmarkParser->CollectionData(lmId);
        HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
        TPtr buf = buffer->Des();
        buf.Zero();
        buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
        buf.Append(first);
        iLog->Log(buf);
        TraceL(buf);
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;      
        }
    else 
        {
        iLog->Log(_L("\tNo collection data found 1"));    
        }

    while (lmId != EPosLmCollDataNone)
        {
        lmId = iLandmarkParser->NextCollectionDataId(lmId);
        if (lmId != EPosLmCollDataNone)
        {
            TPtrC first = iLandmarkParser->CollectionData(lmId);
            
            HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
            TPtr buf = buffer->Des();         
            buf.Zero();
            buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
            buf.Append(first);
            iLog->Log(buf);
            TraceL(buf);
            
            CleanupStack::PopAndDestroy( buffer );
            buffer = NULL;              
        }
        else 
            {
            iLog->Log(_L("\tNo collection data found 2"));   
            }
        }

    iLog->Log(_L("--- CollectionData ---"));
    TraceL(_L("--- CollectionData ---"));
    
	
    delete iOperation;
    iOperation = NULL;
    delete iLandmarkParser;
    iLandmarkParser = NULL;
    iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
    }

// ---------------------------------------------------------
// CPosTp47::PrintLandmarkFieldsL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::PrintLandmarkFieldsL(const CPosLandmark& aLandmark, TBool aTraceFlag)
    {
    TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
    TLocality loc;

    TInt err;
    TPtrC landmarkName;
    err = aLandmark.GetLandmarkName(landmarkName);
    if (err == KErrNone)
        {
        HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
        TPtr buf = buffer->Des();
                    
        buf.Append( _L(" \tLandmark Name: "));
        buf.Append( landmarkName );
        iLog->Log( buf );
        if( aTraceFlag ) 
            {
            TraceL( buf );   
            }
            
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;  
        }

    err = aLandmark.GetPosition(loc);
    if (err == KErrNone)
        {
        HBufC* buffer = HBufC::NewLC( 1024 );
        TPtr buf = buffer->Des();        
        TRealFormat format( 12, KRealFormatFixed );
        format.iPoint = TChar('.');
        format.iTriLen = KDoNotUseTriads;
        format.iPlaces = 6;
        
        TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
        sLon.Num( loc.Longitude(), format );
        sLat.Num( loc.Latitude(), format );
        sAlt.Num( loc.Altitude(), format );
        sVacc.Num( loc.VerticalAccuracy(), format );
        sHacc.Num( loc.HorizontalAccuracy(), format );
        buf.Format(
            _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "), 
            &sLon, &sLat, &sVacc, &sHacc, &sAlt);
        
        TReal32 sourceR;
        err = aLandmark.GetCoverageRadius(sourceR);
        if (err == KErrNone )
            {
            sRad.Num( sourceR, format );
            buf.AppendFormat(_L("srcRadius %S"), &sRad);
            }
        iLog->Log(buf);
        if (aTraceFlag) TraceL(buf);
        CleanupStack::PopAndDestroy(buffer);
        }

    while (sourceFieldId != EPositionFieldNone)
        {
        TPtrC sourceValue;
        aLandmark.GetPositionField(sourceFieldId, sourceValue);
        HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
        TPtr buf = buffer->Des();  
        buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
        buf.Append(sourceValue);
        iLog->Log(buf);
        if ( aTraceFlag ) 
            {
            TraceL( buf );
            }
        sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
        
        CleanupStack::PopAndDestroy( buffer );
        }
    }
    
    
 // ---------------------------------------------------------
// CPosTp47::PrintLandmarkFieldsWithDescriptionL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
    {
    TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
    TLocality loc;
       

    TInt err;
    TPtrC landmarkName;
    TPtrC landmarkDescription;
    err = aLandmark.GetLandmarkName(landmarkName);
    if (err == KErrNone)
        {
        HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
        TPtr buf = buffer->Des();
        buf.Append(_L("\tLandmark Name: "));
        buf.Append(landmarkName);
        iLog->Log(buf);
        if( aTraceFlag ) 
            {
            TraceL( buf );   
            }
            
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;  
        }

    err = aLandmark.GetPosition(loc);
    if (err == KErrNone)
        {
        HBufC* buffer = HBufC::NewLC( 1024 );
        TPtr buf = buffer->Des(); 
        TRealFormat format( 12, KRealFormatFixed );
        format.iPoint = TChar('.');
        format.iTriLen = KDoNotUseTriads;
        format.iPlaces = 6;
        
        TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
        sLon.Num( loc.Longitude(), format );
        sLat.Num( loc.Latitude(), format );
        sAlt.Num( loc.Altitude(), format );
        sVacc.Num( loc.VerticalAccuracy(), format );
        sHacc.Num( loc.HorizontalAccuracy(), format );
        buf.Format(
            _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "), 
            &sLon, &sLat, &sVacc, &sHacc, &sAlt);
        
        TReal32 sourceR;
        err = aLandmark.GetCoverageRadius(sourceR);
        if (err == KErrNone )
            {
            sRad.Num( sourceR, format );
            buf.AppendFormat(_L("srcRadius %S"), &sRad);
            }
        iLog->Log(buf);
        if (aTraceFlag) TraceL(buf);
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;  
        }
        
      //Get landmark description  
      err = aLandmark.GetLandmarkDescription(landmarkDescription);
      if (err == KErrNone)
        {
        HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
        TPtr buf = buffer->Des();         
        buf.Format(_L("\tLandmark Description: "));
        buf.Append(landmarkDescription);
        iLog->Log(buf);
        if ( aTraceFlag ) 
            {
            TraceL( buf );    
            }
        
        CleanupStack::PopAndDestroy( buffer );
        buffer = NULL;         
        }  
    

    while (sourceFieldId != EPositionFieldNone)
        {
        TPtrC sourceValue;
        aLandmark.GetPositionField(sourceFieldId, sourceValue);
        
        HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
        TPtr buf = buffer->Des();  
        buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
        buf.Append(sourceValue);
        iLog->Log(buf);
        if ( aTraceFlag ) 
            {
            TraceL( buf );
            }
        sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
        
		    CleanupStack::PopAndDestroy(buffer);    
		    }
}
// ---------------------------------------------------------
// CPosTp47::TraceL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp47::TraceL(const TDesC& msg)
    {
    _LIT8( KEnd, "\r\n" );

    RFile file;
    TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
    if (err == KErrNotFound)
        {
        file.Create(iFileSession, KFileTrace, EFileWrite);
        }

    HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
    
    TInt pos( 0 );
    file.Seek( ESeekEnd, pos );
    file.Write( *line8 );
    file.Write( KEnd );
    file.Close();

    delete line8;
    }

void CPosTp47::MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
                                     CPosLmCategoryManager& aCatMgr )
    {

    CPosLmOperation* operation1 = aLdb.RemoveAllLandmarksL();
    //Remove all landmarks from default db : Sync call
    ExecuteAndDeleteLD( operation1 );

    RArray<TPosLmItemId> catArray;
    CleanupClosePushL( catArray );

    // Get all the categories from the database and delete them if necessary
    CPosLmItemIterator* iter = aCatMgr.CategoryIteratorL();
    CleanupStack::PushL( iter );

    TUint count = iter->NumOfItemsL();
    if ( count > 0 )
        { // can only be called if there are some items
        iter->GetItemIdsL( catArray, 0, count );
        }

    // Remove all the categories here Sync call
    ExecuteAndDeleteLD(aCatMgr.RemoveCategoriesL( catArray ));
    CleanupStack::PopAndDestroy( 2 ); // catArray, iter
    }
//  End of File