landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CCompositeSearchResult.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CCompositeSearchResult.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,644 @@
+/*
+* 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 <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <LbsPosition.h>
+
+#include "FT_CCompositeSearchResult.h"
+
+#include <StifLogger.h>
+
+//CONSTANTS
+const TInt KMaxLineLength=255;
+
+// C++ Constructor 
+CCompositeSearchResult::CCompositeSearchResult() 
+    {
+    }
+
+CCompositeSearchResult* CCompositeSearchResult::NewL(CStifLogger* aLog) 
+    {
+    CCompositeSearchResult* self = new(ELeave) CCompositeSearchResult;
+    CleanupStack::PushL(self);
+    self->ConstructL(aLog);
+    CleanupStack::Pop();
+    return self;
+    }
+
+// C++ destructor 
+CCompositeSearchResult::~CCompositeSearchResult() 
+    {
+    iFile.Close();
+    iFileSession.Close();
+
+    iResultIds.Close();
+    iIdList.Close();
+    iPositionList.Close();
+
+    delete iTextCriteria;
+    iTextCriteria = NULL;
+
+    delete iCategoryName;
+    iCategoryName = NULL;
+
+    }
+
+void CCompositeSearchResult::ConstructL(CStifLogger* aLog) 
+    {
+    iLog = aLog;
+
+    _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmDbCompositeSearchResult.txt");
+    
+    User::LeaveIfError(iFileSession.Connect());
+    User::LeaveIfError(iFile.Open(iFileSession, KFileTestValues,  EFileRead));
+    iTextEnabled = EFalse;
+    iAreaEnabled = EFalse;
+    iNearestEnabled = EFalse;
+    iCategoryEnabled = EFalse;
+    iIdListEnabled = EFalse;
+    }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::GetCompositeSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TBool CCompositeSearchResult::GetCompositeSearchResultsL(CPosLmCompositeCriteria& aComposite)
+    {
+    TBuf<KMaxLineLength> line;
+    TBool done = EFalse;
+
+    iTextEnabled = EFalse;
+    iAreaEnabled = EFalse;
+    iNearestEnabled = EFalse;
+    iCategoryEnabled = EFalse;
+    iIdListEnabled = EFalse;
+
+    iResultIds.Close();
+    iIdList.Close();
+    iPositionList.Close();
+
+    delete iTextCriteria;
+    iTextCriteria = NULL;
+
+    delete iCategoryName;
+    iCategoryName = NULL;
+
+    iCategoryId = 0;
+    iRedefined = 0;
+    iUseCoverageRadius = EFalse;
+    iMaxDistance = -1;
+
+    iSouthLat=0;iNorthLat=0;iWestLong=0;iEastLong=0;
+    iTestCounter++;
+
+    TBuf<50> buf;
+    buf.Format(_L(">>>>>>>>>>>>Test Round %d<<<<<<<<<<"), iTestCounter);
+    iLog->Log(buf);
+
+    aComposite.ClearArguments();
+
+    while (ReadLn(iFile, line) != KErrEof && !done)
+        {
+        TLex lex(line);
+        if (lex.Peek() != '#' && lex.Peek() != '\t')
+            {
+            // Found "# TEXT" line
+            if (lex.Peek() == 'T')
+                {
+                ParseTextL(line);
+                CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+                
+                textCriteria->SetTextL(*iTextCriteria);
+                textCriteria->SetAttributesToSearch(iTextAttributes);
+                textCriteria->SetPositionFieldsToSearchL(iPositionList); 
+                
+                aComposite.AddArgument(textCriteria);
+                CleanupStack::Pop(textCriteria);
+                iTextEnabled = ETrue;
+                }
+            // Found "# AREA" line
+            else if (lex.Peek() == 'A')
+                {
+                ParseAreaL(line);
+                CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(iSouthLat, 
+                    iNorthLat, 
+                    iWestLong, 
+                    iEastLong
+                    );
+                
+                aComposite.AddArgument(areaCriteria);
+                CleanupStack::Pop(areaCriteria);
+                iAreaEnabled = ETrue;
+                }
+            // Found "# CATEGORY" line
+            else if (lex.Peek() == 'C')
+                {
+                ParseCategoryL(line);
+                CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+                if (iCategoryId>0)
+                    {
+                    iLog->Log(_L("SetCategoryItemId"));
+                    catSearchCriteria->SetCategoryItemId(iCategoryId);
+                    }
+                if (iCategoryName != NULL)
+                    {
+                    iLog->Log(_L("SetCategoryNameL"));
+                    catSearchCriteria->SetCategoryNameL(*iCategoryName);
+                    }
+                aComposite.AddArgument(catSearchCriteria);
+                CleanupStack::Pop(catSearchCriteria);
+                iCategoryEnabled = ETrue;
+                }
+            // Found "# NEAREST" line
+            else if (lex.Peek() == 'N')
+                {
+                ParseNearestL(line);
+                TCoordinate coord(iLatitude, iLongitude);
+                
+                CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, iUseCoverageRadius);
+                if (iMaxDistance > 0)
+                    {
+                    nearestCriteria->SetMaxDistance(iMaxDistance);
+                    }
+                nearestCriteria->SetUseCoverageRadius(iUseCoverageRadius);
+                aComposite.AddArgument(nearestCriteria);
+                CleanupStack::Pop(nearestCriteria);
+
+                iNearestEnabled = ETrue;
+                }
+            // Found "# IDLIST" line
+            else if (lex.Peek() == 'I')
+                {
+                ParseIdListL(line);
+                RArray<TPosLmItemId> list;
+                CleanupClosePushL(list);
+                
+                CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+                
+                for (TInt i=0;i<iIdList.Count();i++)
+                {
+                    list.Append(iIdList[i]);
+                }
+                idList->SetLandmarkIdsL(list);
+                
+                aComposite.AddArgument(idList);
+                CleanupStack::Pop(idList);
+                CleanupStack::PopAndDestroy(&list);
+                iIdListEnabled = ETrue;
+                }
+            // Found "# RESULT" line
+            else if (lex.Peek() == 'R')
+                {
+                ParseResultL(line);
+                }
+            // Found "# SEPARATOR" line
+            else if (lex.Peek() == 'S')
+                {
+                done = ETrue;
+                }
+            }
+        }
+
+    if (done != EFalse) return EFalse;
+    else return ETrue;
+
+    }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ReadLn
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCompositeSearchResult::ReadLn(RFile& aFile, TDes& aDes)
+    {
+    aDes = KNullDesC;
+    TBuf8<KMaxLineLength> line;
+
+	TInt err = aFile.Read(line);
+    if (line.Length() == 0)
+        {
+        return KErrEof;
+        }
+	if (err)
+		{
+		return err;
+		}
+
+    // Find line feed
+    TInt i = 0;
+	TLex8 fileData;
+	fileData.Assign(line);
+	while (fileData.Peek() != '\n' && !(fileData.Peek()).Eos())
+		{
+        fileData.Inc();
+        if (++i == KMaxLineLength)
+            {
+            // In case no carriage return or end of string characters are present.
+            break;
+            }
+        }
+
+    // Update file position
+    TInt diff = -(line.Length() - i - 1);
+    aFile.Seek(ESeekCurrent, diff);
+
+    // Convert to 16-bit
+    line.SetLength(i);
+    aDes.Copy(line);
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseAreaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseAreaL(const TDesC& aDes) 
+    {
+    iLog->Log(_L("ParseAreaL")); 
+    TLex line(aDes);
+    line.Mark();
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                TLex val(token);              
+                switch(index)
+                    {
+                    case ESouthLat:
+                        val.Val(iSouthLat, TChar(','));
+                        break;
+                    case ENorthLat:
+                        val.Val(iNorthLat, TChar(','));
+                        break;
+                    case EWestLong:
+                        val.Val(iWestLong, TChar(','));
+                        break;
+                    case EEastLong:
+                        val.Val(iEastLong, TChar(','));
+                        break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseNearestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseNearestL(const TDesC& aDes) 
+    {
+    iLog->Log(_L("ParseNearestL"));
+    TLex line(aDes);
+    line.Mark();
+    TInt useCoverageRadius = 0;
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                TLex val(token);              
+                switch(index)
+                    {
+                    case ELatitude:
+                        val.Val(iLatitude, TChar(','));   
+                        break;
+                    case ELongitude:
+                        val.Val(iLongitude, TChar(','));   
+                        break;
+                    case EUseCoverageRadius:  
+                        val.Val(useCoverageRadius);
+                        if (useCoverageRadius == 1)
+                            {
+                            iUseCoverageRadius = ETrue;
+                            }
+                        break;
+                    case EMaxDistance:
+                        val.Val(iMaxDistance);   
+                        break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseTextL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseTextL(const TDesC& aDes) 
+    {
+    iLog->Log(_L("ParseTextL"));
+    TLex line(aDes);
+    line.Mark();
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                
+                switch(index)
+                    {
+                    case ETextCriteria:
+                        iTextCriteria = token.AllocL();
+                        break;
+                    case EAttributes:
+                        ParseAttributesL(token);
+                        iTextAttributes = iAttributes;
+                        break;
+                    case EPositionFields:
+                        ExtractIdFields(token, iPositionList);
+                        break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }  
+        }
+    }   
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseCategoryL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseCategoryL(const TDesC& aDes) 
+    {
+    iLog->Log(_L("ParseCategoryL"));
+    TLex line(aDes);
+    line.Mark();
+    TInt tmp;
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                TLex val(token);
+
+                switch(index)
+                    {
+                    case ECategoryName:
+                        iCategoryName = token.AllocL();
+                        break;
+                    case ECategoryId:
+                        val.Val(tmp);
+                        iCategoryId = tmp;
+                        break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }  
+        }
+    }   
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseIdListL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseIdListL(const TDesC& aDes)
+    {
+    iLog->Log(_L("ParseIdListL"));
+    TLex line(aDes);
+    line.Mark();
+    
+    RArray<TUint> list;
+    CleanupClosePushL(list);
+    TInt i=0;
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                //TLex val(token);              
+
+                switch(index)
+                    {
+                    case ELmIdList:
+                        ExtractIdFields(token, list);
+                        for (i=0;i<list.Count();i++)
+                            {
+                            iIdList.Append(list[i]);
+                            }
+                            break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }  
+        }
+    CleanupStack::PopAndDestroy(&list);
+    }  
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseResultL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseResultL(const TDesC& aDes)
+    {
+    iLog->Log(_L("ParseResultL"));
+    TLex line(aDes);
+    line.Mark();
+    TInt redefined=0;
+    
+    RArray<TUint> list;
+    CleanupClosePushL(list);
+    TInt i=0;
+
+    if (line.Peek() != '#' && line.Peek() != '\t')
+        { 
+        TInt index=0;
+        while (line.Peek() != '\n' && !(line.Peek()).Eos())
+            {
+            line.Inc();
+            if (line.Peek() == '\t')
+                {
+                TPtrC token = line.MarkedToken();
+                TLex val(token);              
+
+                switch(index)
+                    {
+                    case ELmResultIdList:
+                        ExtractIdFields(token, list);
+                        for (i=0;i<list.Count();i++)
+                            {
+                            iResultIds.Append(list[i]);
+                            }
+                            break;
+                    case ERedefined:
+                        val.Val(redefined);
+                        if (redefined == 1)
+                            {
+                            iLog->Log(_L("REDEFINED"));
+                            iRedefined = ETrue;
+                            }
+                            break;
+                    }    
+                line.Inc();
+                while (line.Peek() == '\t') // Empty value
+                    {
+                    line.Inc();
+                    ++index;
+                    }
+                line.Mark();
+                ++index;
+                }
+            }  
+        }
+    CleanupStack::PopAndDestroy(&list);
+    }  
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ExtractIdFields()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ExtractIdFields(const TDesC& aDes, RArray<TUint>& aList)
+    {
+    iLog->Log(_L("ExtractIdFields"));
+    TLex line(aDes);
+    line.Mark();
+    TInt startValue=0;
+    TInt endValue=0;
+    while (!(line.Peek()).Eos())
+        {
+        line.Inc();
+    
+        if (line.Peek() == ',' || line.Peek() == '-' || (line.Peek()).Eos())
+            {
+            TPtrC token = line.MarkedToken();
+            TLex val(token);
+            val.Val(startValue);
+            iSearchResult.Append(startValue);
+            aList.Append(startValue);
+
+            if (line.Peek() == '-')
+                {
+                line.Inc();
+                line.Mark();
+                while (line.Peek() != ',' && !(line.Peek()).Eos())
+                    {
+                    line.Inc();               
+                    }
+                TPtrC endToken = line.MarkedToken();
+                TLex endVal(endToken);
+                endVal.Val(endValue);
+                for (TInt i=startValue+1; i<=endValue; i++)
+                    {
+                    aList.Append(i);
+                    }
+                }
+             if (line.Peek() == ',')
+                {
+                line.Inc();
+                line.Mark();
+                }
+            }
+        }
+    }
+
+//  End of File