bool LandmarkFilterDialog::setupFetchRequest()
{
    if (filterAllCheckBox->checkState() == Qt::Checked) {
        fetchRequest->setFilter(QLandmarkFilter());
        fetchRequest->setSorting(QLandmarkNameSort());
    } else {
        QLandmarkIntersectionFilter filter;
        QLandmarkSortOrder sortOrder = QLandmarkNameSort();

        if (filterNameCheckBox->checkState() == Qt::Checked) {
            QLandmarkNameFilter nameFilter;
            nameFilter.setName(nameLineEdit->text());
            if (startsWithRadioButton->isChecked())
                nameFilter.setMatchFlags(QLandmarkFilter::MatchStartsWith);
            else
                nameFilter.setMatchFlags(QLandmarkFilter::MatchContains);
            filter.append(nameFilter);
        }

        if (filterCategoryCheckBox->checkState() == Qt::Checked) {
            QLandmarkCategoryFilter categoryFilter;
            if (categoryComboBox->count() > 0) {
                oldCategoryId = categoryComboBox->itemData(categoryComboBox->currentIndex())
                            .value<QLandmarkCategoryId>();
                categoryFilter.setCategoryId(oldCategoryId);
            }
            filter.append(categoryFilter);
        }

        if (filterBoxCheckBox->checkState() == Qt::Checked) {

            if (!isValidLatitude(boxTopLeftLatitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Top left latitude is invalid.  Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }
            else if (!isValidLongitude(boxTopLeftLongitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Top left longitude is invalid. Must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }
            else if (!isValidLatitude(boxBottomRightLatitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Bottom right latitude is invalid. (Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }
            else if (!isValidLongitude(boxBottomRightLongitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Bottom right longitude is invalid. (Must be between -180 and 180 (inclusive)", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }

            QGeoCoordinate topLeft;
            topLeft.setLatitude(boxTopLeftLatitudeLineEdit->text().toDouble());
            topLeft.setLongitude(boxTopLeftLongitudeLineEdit->text().toDouble());
            QGeoCoordinate bottomRight;
            bottomRight.setLatitude(boxBottomRightLatitudeLineEdit->text().toDouble());
            bottomRight.setLongitude(boxBottomRightLongitudeLineEdit->text().toDouble());

            QGeoBoundingBox box;
            box.setTopLeft(topLeft);
            box.setBottomRight(bottomRight);
            QLandmarkBoxFilter boxFilter;
            boxFilter.setBoundingBox(box);
            filter.append(boxFilter);
        }

        if (filterProximityCheckBox->checkState() == Qt::Checked) {
            if (!isValidLatitude(proximityLatitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Proximity latitude is invalid.  It must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            } else if (!isValidLongitude(proximityLongitudeLineEdit->text())) {
                QMessageBox::warning(this,"Warning", "Proximity longitude is invalid. It must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }
            bool ok;
            qreal radius = radiusLineEdit->text().toDouble(&ok);
            if (!ok) {
                QMessageBox::warning(this,"Warning", "Proximity radius is invalid. It must be a number", QMessageBox::Ok, QMessageBox::NoButton);
                return false;
            }

            QLandmarkProximityFilter proximityFilter;
            QGeoCoordinate center;
            center.setLatitude(proximityLatitudeLineEdit->text().toDouble());
            center.setLongitude(proximityLongitudeLineEdit->text().toDouble());
            proximityFilter.setCenter(center);
            proximityFilter.setRadius(radiusLineEdit->text().toDouble());
            filter.append(proximityFilter);
            sortOrder = QLandmarkSortOrder();
        }

        fetchRequest->setFilter(filter);
        fetchRequest->setSorting(sortOrder);
    }
    return true;
}
    void testFilterName()
    {
        //test for match - case matches, filter-case insensitive
        QLandmarkNameFilter nameFilter;
        QLandmark lm;
        lm.setName("madara");

        //test case insensitive, start with
        nameFilter.setName("mad");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchStartsWith);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Mad");
        QVERIFY(MockEngine::testFilter(nameFilter,lm));

        //test case sensitive starts with
        nameFilter.setName("mad");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchCaseSensitive | QLandmarkFilter::MatchStartsWith);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Mad");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));

        //test case insensitive, ends with
        nameFilter.setName("ara");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchEndsWith);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Ara");
        QVERIFY(MockEngine::testFilter(nameFilter,lm));

        //test case sensitive, ends with
        nameFilter.setName("ara");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchCaseSensitive | QLandmarkFilter::MatchEndsWith);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Ara");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));

        //test case insensitive, contains
        nameFilter.setName("ada");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchContains);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Ada");
        QVERIFY(MockEngine::testFilter(nameFilter,lm));

        //test case sensitive, contains
        nameFilter.setName("ada");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchCaseSensitive | QLandmarkFilter::MatchContains);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Ada");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));

        //test case insensitive, fixed string
        nameFilter.setName("madara");
        nameFilter.setMatchFlags( QLandmarkFilter::MatchFixedString);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Madara");
        QVERIFY(MockEngine::testFilter(nameFilter,lm));

        //test case sensitive, fixed string
        nameFilter.setName("madara");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchCaseSensitive | QLandmarkFilter::MatchFixedString);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Madara");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));


        //test case variant match
        nameFilter.setName("madara");
        nameFilter.setMatchFlags(0);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Madara");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));

        nameFilter.setName("madara");
        nameFilter.setMatchFlags(QLandmarkFilter::MatchCaseSensitive);
        QVERIFY(MockEngine::testFilter(nameFilter,lm));
        nameFilter.setName("Madara");
        QVERIFY(!MockEngine::testFilter(nameFilter,lm));
    }