--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/location/landmarks/src/clapilandmarksearchfactory.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2008 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: Landmark search factory
+ *
+*/
+
+
+// INTERNAL INCLUDES
+#include "clapilandmarksearchfactory.h"
+#include "tlapisearchcriteria.h"
+#include "logger.h"
+// EXTERNAL INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmItemIterator.h>
+#include <EPos_CPosLmOperation.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::NewL
+// ---------------------------------------------------------------------------
+//
+CLAPILandmarkSearchFactory* CLAPILandmarkSearchFactory::NewL(
+ CPosLandmarkDatabase& aDatabase)
+{
+ JELOG2(EJavaLocation);
+ CLAPILandmarkSearchFactory* self = CLAPILandmarkSearchFactory::NewLC(
+ aDatabase);
+ CleanupStack::Pop(self);
+ return self;
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::NewLC
+// ---------------------------------------------------------------------------
+//
+CLAPILandmarkSearchFactory* CLAPILandmarkSearchFactory::NewLC(
+ CPosLandmarkDatabase& aDatabase)
+{
+ JELOG2(EJavaLocation);
+ CLAPILandmarkSearchFactory* self =
+ new(ELeave) CLAPILandmarkSearchFactory(aDatabase);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::~CLAPILandmarkSearchFactory
+// ---------------------------------------------------------------------------
+//
+CLAPILandmarkSearchFactory::~CLAPILandmarkSearchFactory()
+{
+ JELOG2(EJavaLocation);
+ delete iLmSearch;
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::CreateIteratorL
+// ---------------------------------------------------------------------------
+//
+CPosLmItemIterator* CLAPILandmarkSearchFactory::CreateIteratorL(
+ const TLAPISearchCriteria* aCriteria)
+{
+ JELOG2(EJavaLocation);
+ CPosLmItemIterator* iterator(NULL);
+ // Sorting is left for the MIDlet. There is no requirement for this
+ // as it slows the performance of listing landmarks. Usually there
+ // is no need to sort the landmarks because those are plotted to a map
+
+ // Match all landmark without using the Landmark Search API if the passed
+ // search criteria is null or does not have any parameters set
+ if (!aCriteria || !aCriteria->Text() && !aCriteria->CategoryName()
+ && !aCriteria->HasValidCoordinates())
+ {
+ iterator = iDatabase.LandmarkIteratorL();
+ }
+ else
+ {
+ // Create a composite criteria and add other criterias to it
+ CPosLmCompositeCriteria* criterias = CPosLmCompositeCriteria::NewLC(
+ CPosLmCompositeCriteria::ECompositionAND);
+
+ // Currently, category criteria is the first which will be matched
+ // if the argument has been specified by the client
+ const TDesC* categoryName = aCriteria->CategoryName();
+ if (categoryName)
+ {
+ CPosLmCategoryCriteria* criteria = CPosLmCategoryCriteria::NewLC();
+ // Empty string must find uncategorized landmarks
+ if (categoryName->Length() > 0)
+ {
+ criteria->SetCategoryNameL(*categoryName);
+ }
+ // The ownership of the criteria is transferred to criterias
+ // and the value is popped from the cleanup stack
+ AddCriteriaAndPopL(*criterias, criteria);
+ }
+
+ const TDesC* text = aCriteria->Text();
+ // Next search argument will be the text criteria. The search
+ // criteria must specify at least one attribute which is searched
+ if (text)
+ {
+ CPosLmTextCriteria* criteria = CPosLmTextCriteria::NewLC();
+ criteria->SetTextL(*text);
+ // Currently only name attribute is supported for searching
+ criteria->SetAttributesToSearch(aCriteria->TextAttributes());
+ // The ownership of the criteria is transferred to criterias
+ // and the value is popped from the cleanup stack
+ AddCriteriaAndPopL(*criterias, criteria);
+ }
+
+ // Finally use the match area if specified
+ if (aCriteria->HasValidCoordinates())
+ {
+ TReal64 southLat;
+ TReal64 northLat;
+ TReal64 westLon;
+ TReal64 eastLon;
+
+ aCriteria->GetArea(southLat, northLat, westLon, eastLon);
+ // Match all landmarks within the specified area
+ CPosLmAreaCriteria* criteria = CPosLmAreaCriteria::NewLC(southLat,
+ northLat, westLon, eastLon);
+ // The ownership of the criteria is transferred to criterias
+ // and the value is popped from the cleanup stack
+ AddCriteriaAndPopL(*criterias, criteria);
+ }
+ // Start the search and do not use previous results
+ CPosLmOperation* op = iLmSearch->StartLandmarkSearchL(*criterias);
+ // The ownership is transferred to the following function call which
+ // puts the operation to the clean-up stack so no need to push here
+ ExecuteAndDeleteLD(op);
+ CleanupStack::PopAndDestroy(criterias);
+ // Get the match iterator from the landmark search manager
+ iterator = iLmSearch->MatchIteratorL();
+ }
+
+ // The ownership is transferred to the caller
+ return iterator;
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::AddCriteriaAndPopL
+// ---------------------------------------------------------------------------
+//
+void CLAPILandmarkSearchFactory::AddCriteriaAndPopL(
+ CPosLmCompositeCriteria& aCompositeCriteria,
+ CPosLmSearchCriteria* aCriteria) const
+{
+ JELOG2(EJavaLocation);
+ User::LeaveIfError(aCompositeCriteria.AddArgument(aCriteria));
+ CleanupStack::Pop(aCriteria);
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::CLAPILandmarkSearchFactory
+// ---------------------------------------------------------------------------
+//
+CLAPILandmarkSearchFactory::CLAPILandmarkSearchFactory(
+ CPosLandmarkDatabase& aDatabase) :
+ iDatabase(aDatabase)
+{
+ JELOG2(EJavaLocation);
+}
+
+// ---------------------------------------------------------------------------
+// CLAPILandmarkSearchFactory::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CLAPILandmarkSearchFactory::ConstructL()
+{
+ JELOG2(EJavaLocation);
+ iLmSearch = CPosLandmarkSearch::NewL(iDatabase);
+}
+
+// End of file