Package org.fao.geonet.kernel.search

Source Code of org.fao.geonet.kernel.search.LuceneQueryTest

package org.fao.geonet.kernel.search;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import jeeves.server.ServiceConfig;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
import org.apache.lucene.search.Query;
import org.fao.geonet.kernel.GeonetworkDataDirectory;
import org.fao.geonet.kernel.search.LuceneConfig.LuceneConfigNumericField;
import org.jdom.DefaultJDOMFactory;
import org.jdom.Element;
import org.jdom.JDOMFactory;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Unit test for building Lucene queries.
*
* @author heikki doeleman
*/
public class LuceneQueryTest {

    private Set<String> _tokenizedFieldSet;
    private Map<String, LuceneConfigNumericField> _numericFieldSet;
    private PerFieldAnalyzerWrapper _analyzer;

    @Before
    public void before() throws Exception {
        Map<String, Analyzer> analyzers = new HashMap<String, Analyzer>();
        analyzers.put("_uuid", new GeoNetworkAnalyzer());
        analyzers.put("parentUuid", new GeoNetworkAnalyzer());
        analyzers.put("operatesOn", new GeoNetworkAnalyzer());
        analyzers.put("subject", new KeywordAnalyzer());

        _analyzer = new PerFieldAnalyzerWrapper(new GeoNetworkAnalyzer(), analyzers);

        final String configFile = "/WEB-INF/config-lucene.xml";
        final String appDir = new File(LuceneQueryTest.class.getResource(configFile).getFile()).getParentFile().getParent()+"/";
        final GeonetworkDataDirectory dataDirectory = new GeonetworkDataDirectory();
        dataDirectory.init("test", appDir, new ServiceConfig(), null);
        LuceneConfig lc = new LuceneConfig();
        lc._geonetworkDataDirectory = dataDirectory;
        final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
        lc._appContext = context;
        context.refresh();
        lc.configure(configFile);

        _tokenizedFieldSet = lc.getTokenizedField();
        _numericFieldSet = lc.getNumericFields();
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORSingleValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_title");
        OR.addContent("xxx");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx any:xxx) +_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testMoreThanOneORParamSingleValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("inspiretheme_OR_title");
        OR.addContent("xxx");
        request.addContent(OR);

        Element OR2 = factory.element("any_OR_category");
        OR2.addContent("yyy");
        request.addContent(OR2);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(category:yyy inspiretheme:xxx title:xxx any:yyy) +_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORSingleValueAndANDparam() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("inspiretheme_OR_title");
        OR.addContent("xxx");
        request.addContent(OR);

        Element any = factory.element("any");
        any.addContent("yyy");
        request.addContent(any);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(inspiretheme:xxx title:xxx) +_isTemplate:n +any:yyy", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORMultipleValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_title");
        OR.addContent("xxx zzz");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx title:zzz (+any:xxx +any:zzz)) +_isTemplate:n", query.toString());

    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testMultiORSingleValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_title_OR_inspiretheme");
        OR.addContent("xxx");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx inspiretheme:xxx any:xxx) +_isTemplate:n", query.toString());
    }


    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testMultiORMultipleValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_title_OR_inspiretheme");
        OR.addContent("xxx zzz");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx title:zzz inspiretheme:xxx zzz (+any:xxx +any:zzz)) +_isTemplate:n",
                query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testMultiORWithSecurityField() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_owner");
        OR.addContent("xxx");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(any:xxx) +_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testMultiORMultipleNonTokenizedValuesWithOr() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("any_OR_title_OR_inspiretheme");
        OR.addContent("xxx or zzz");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx title:zzz inspiretheme:xxx inspiretheme:zzz any:xxx any:zzz) " +
                                                "+_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORSingleTokenWithUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("_uuid_OR_title");
        OR.addContent("xxx");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx _uuid:xxx) +_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORMultipleTokenWithUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("_uuid_OR_title");
        OR.addContent("xxx or yyy");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx title:yyy _uuid:xxx _uuid:yyy) +_isTemplate:n", query.toString());
    }

    @Test
    public void testSingleORWithBB() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL_OR_title");
        anyE.addContent("55");
        request.addContent(anyE);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        // (no BBox supported for FIELD OR: query is stripped)
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORSingleValueWithALL() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("all_OR_title");
        OR.addContent("xxx");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx any:xxx) +_isTemplate:n", query.toString());
    }


    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORMultiValueWithOR() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("or_OR_title");
        OR.addContent("xxx yyy");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        LuceneQueryBuilder luceneQueryBuilder = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null);
        Query query = luceneQueryBuilder.build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(title:xxx title:yyy (+any:xxx +any:yyy)) +_isTemplate:n", query.toString());
    }


    /**
     * Tests parameters for disjunctions. They are of the form paramA_OR_paramB.
     */
    @Test
    public void testSingleORMultiValueWithWithout() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element OR = factory.element("without_OR_title");
        OR.addContent("xxx yyy");
        request.addContent(OR);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        // (no 'without' supported for FIELD OR: query is stripped)
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'phrase' parameter with a multiple token value.
     */
    @Test
    public void testSingleORWithMultipleTokenPhrase() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("phrase_OR_title");
        any.addContent("xxx yyy");
        request.addContent(any);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        // (no phrase queries supported for FIELD OR: query is stripped)
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'phrase' parameter with a multiple token value.
     */
    @Test
    public void testSingleORWithTemporal() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("extFrom_OR_title");
        any.addContent("xxx yyy");
        request.addContent(any);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);

        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        // (no temporal queries supported for FIELD OR: query is stripped)
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }


    /**
     * 'any' parameter with a single token value.
     */
    @Test
    public void testSingleTokenAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeperdepoep +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a single token value.
     */
    @Test
    public void testMultiAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        Element any2 = factory.element("any");
        any2.addContent("demo");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+any:demo +any:hoeperdepoep) +_isTemplate:n", query.toString());
    }

    @Test
    public void testSingleTokenQMarkWildcardAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeper?poep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeper?poep +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a single token value that has a wildcard.
     */
    @Test
    public void testSingleTokenWildcardAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeper*poep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeper*poep +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a single token value that has a wildcard.
     */
    @Test
    public void testSingleTokenWildcardWhitespace() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeper *");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+any:hoeper +any:*) +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a no value.
     */
    @Test
    public void testNoTokenAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter check case insensitivity..
     */
    @Test
    public void testSingleTokenAnyCaseInsensitive() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hOeperdEpoeP");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeperdepoep +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a single token value and with fuzziness.
     */
    @Test
    public void testSingleTokenAnyFuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("asjemenou");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.5740458015267176");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:asjemenou~2 +_isTemplate:n", query.toString());
    }

    /**
     * 'uuid' parameter with a single token value.
     */
    @Test
    public void testSingleTokenUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element uuid = factory.element("uuid");
        uuid.addContent("ad2aa2c7-f099-47cb-8a38-4effe2a2d250");
        request.addContent(uuid);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_uuid:ad2aa2c7-f099-47cb-8a38-4effe2a2d250 +_isTemplate:n", query.toString());
    }

    /**
     * 'uuid' parameter with a double token value.
     */
    @Test
    public void testDoubleTokenUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element uuid = factory.element("uuid");
        uuid.addContent("63C2378A-17A7-B863-BFF4-CC3EF507D10D or ad2aa2c7-f099-47cb-8a38-4effe2a2d250");
        request.addContent(uuid);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_uuid:63C2378A-17A7-B863-BFF4-CC3EF507D10D " +
                                                "_uuid:ad2aa2c7-f099-47cb-8a38-4effe2a2d250) +_isTemplate:n", query.toString());
    }

    /**
     * 'uuid' parameter with a double token value.
     */
    @Test
    public void testDoubleTokenUUIDWithNonStandardUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element uuid = factory.element("uuid");
        uuid.addContent("63C2378A-17A7-B863-BFF4-CC3EF507D10D or BAR_DEN");
        request.addContent(uuid);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_uuid:63C2378A-17A7-B863-BFF4-CC3EF507D10D _uuid:BAR_DEN) +_isTemplate:n",
                query.toString());
    }


    /**
     * 'any' parameter with a single token value and with fuzziness 1.
     */
    @Test
    public void testSingleTokenAnyFuzzy1() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("asjemenou");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("1");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:asjemenou +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with multiple token values.
     */
    @Test
    public void testMultipleTokensAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("deze die");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+any:deze +any:die) +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with multiple token values and with fuzziness.
     */
    @Test
    public void testMultipleTokensAnyFuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("bloody hell");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.6885496183206108");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+any:bloody~2 +any:hell~2) +_isTemplate:n", query.toString());
    }

    /**
     * 'or' parameter with a single token value.
     */
    @Test
    public void testSingleTokenOr() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("or");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(any:hoeperdepoep) +_isTemplate:n", query.toString());
    }

    /**
     * 'or' parameter with a multiple token value.
     */
    @Test
    public void testMultipleTokenOr() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("or");
        any.addContent("hoep poep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(any:hoep any:poep) +_isTemplate:n", query.toString());
    }

    /**
     * 'or' parameter with a multiple token value and fuzziness.
     */
    @Test
    public void testMultipleTokenOrFuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("or");
        any.addContent("hoep poep");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.5969465648854961");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(any:hoep~2 any:poep~2) +_isTemplate:n", query.toString());
    }

    /**
     * 'all' parameter with a single token value.
     */
    @Test
    public void testSingleTokenAll() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("all");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeperdepoep +_isTemplate:n", query.toString());
    }

    /**
     * 'all' parameter with multiple token values and with fuzziness.
     */
    @Test
    public void testMultipleTokensAllFuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("all");
        any.addContent("bloody hell");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.6885496183206108");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+any:bloody~2 +any:hell~2) +_isTemplate:n", query.toString());
    }

    /**
     * 'without' parameter with a single token value.
     */
    @Test
    public void testSingleTokenWithout() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("without");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        //assertEquals("+(+MatchAllDocsQuery -any:hoeperdepoep) +_isTemplate:n", query.toString());
        assertEquals("unexpected Lucene query", "+(+*:* -any:hoeperdepoep) +_isTemplate:n", query.toString());
    }

    /**
     * 'without' parameter with a multiple token value.
     */
    @Test
    public void testMultipleTokenWithout() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("without");
        any.addContent("hip hop");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+*:* -any:hip -any:hop) +_isTemplate:n", query.toString());
    }

    /**
     * 'without' parameter with a multiple token value and fuzziness.
     */
    @Test
    public void testMultipleTokenWithoutfuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("without");
        any.addContent("hip hop");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.6885496183206108");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+*:* -any:hip -any:hop) +_isTemplate:n", query.toString());
    }

    /**
     * 'phrase' parameter with a single token value.
     */
    @Test
    public void testSingleTokenPhrase() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("phrase");
        any.addContent("humph");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:\"humph\" +_isTemplate:n", query.toString());
    }

    /**
     * 'phrase' parameter with a multiple token value.
     */
    @Test
    public void testMultipleTokenPhrase() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("phrase");
        any.addContent("that one");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:\"that one\" +_isTemplate:n", query.toString());
    }

    /**
     * 'phrase' parameter with a multiple token value and fuzziness.
     */
    @Test
    public void testMultipleTokenPhraseFuzzy() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("phrase");
        any.addContent("that one");
        request.addContent(any);
        Element similarity = factory.element("similarity");
        similarity.addContent("0.6885496183206108");
        request.addContent(similarity);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:\"that one\" +_isTemplate:n", query.toString());
    }

    /**
     * 'topic-category' parameter with single value.
     */
    @Test
    public void testSingleTopicCategory() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element tc = factory.element("topic-category");
        tc.addContent("biota*");
        request.addContent(tc);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+topicCat:biota* +_isTemplate:n", query.toString());
    }

    /**
     * 'topic-category' parameter with multiple values.
     */
    @Test
    public void testMultipleAndTopicCategories() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element tc = factory.element("topic-category");
        tc.addContent("biota*");
        request.addContent(tc);
        Element tc2 = factory.element("topic-category");
        tc2.addContent("boundaries");
        request.addContent(tc2);
        Element tc3 = factory.element("topic-category");
        tc3.addContent("environment*");
        request.addContent(tc3);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+topicCat:environment* +topicCat:boundaries +topicCat:biota*) +_isTemplate:n",
                query.toString());
    }

    /**
     * 'any' parameter with a single token value that has a wildcard.
     */
    @Test
    public void testSingleTokenStarWildcardAtTheEndAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeper*");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeper* +_isTemplate:n", query.toString());
    }

    /**
     * 'any' parameter with a single token value that has a wildcard.
     */
    @Test
    public void testSingleTokenQMarkWildcardAtTheEndAny() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("any");
        any.addContent("hoeper?");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+any:hoeper? +_isTemplate:n", query.toString());
    }

    @Test
    public void testMultipleOrTopicCategories() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element tc = factory.element("topic-category");
        tc.addContent("biota* or boundaries or environment");
        request.addContent(tc);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(topicCat:biota* topicCat:boundaries topicCat:environment) +_isTemplate:n",
                query.toString());
    }

    /**
     * 'template' parameter with value 'y'.
     */
    @Test
    public void testIsTemplateY() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("template");
        any.addContent("y");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:y", query.toString());
    }

    /**
     * 'template' parameter with value 's'.
     */
    @Test
    public void testIsTemplateS() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("template");
        any.addContent("s");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:s", query.toString());
    }

    /**
     * 'template' parameter with value 'WTF'.
     */
    @Test
    public void testIsTemplateWTF() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("template");
        any.addContent("WTF");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'template' parameter with no value.
     */
    @Test
    public void testIsTemplateNoValue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'dateFrom' parameter.
     */
    @Test
    public void testDateFrom() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("dateFrom");
        any.addContent("12-05-1989");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+changeDate:[12-05-1989 TO *] +_isTemplate:n", query.toString());
    }

    /**
     * 'dateTo' parameter.
     */
    @Test
    public void testDateTo() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("dateTo");
        any.addContent("12-05-1989");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+changeDate:[* TO 12-05-1989T23:59:59] +_isTemplate:n", query.toString());
    }


    /**
     * 'dateTo' and 'dateFrom' parameter.
     */
    @Test
    public void testDateToFrom() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("dateTo");
        any.addContent("12-05-1989");
        request.addContent(any);
        Element any2 = factory.element("dateFrom");
        any2.addContent("11-05-1989");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+changeDate:[11-05-1989 TO 12-05-1989T23:59:59] +_isTemplate:n", query.toString());
    }

    /**
     * 'siteId' parameter.
     */
    @Test
    public void testSource() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("siteId");
        any.addContent("f74e4ccf-755a-48ef-bedf-990f9872298b");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_source:f74e4ccf-755a-48ef-bedf-990f9872298b +_isTemplate:n", query.toString());
    }

    /**
     * 'title' parameter.
     */
    @Test
    public void testTitle() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("title");
        any.addContent("humph");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+title:humph +_isTemplate:n", query.toString());
    }
   
     /** 
     * 'altTitle' parameter. 
     */ 
    @Test
    public void testAltTitle() { 
        // create request object 
        JDOMFactory factory = new DefaultJDOMFactory()
        Element request = factory.element("request")
        Element altTitle = factory.element("altTitle")
        altTitle.addContent("humph")
        request.addContent(altTitle)
        // build lucene query input 
        LuceneQueryInput lQI = new LuceneQueryInput(request)
        // build lucene query 
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet,
                _analyzer, null).build(lQI)
        // verify query 
        assertEquals("unexpected Lucene query", "+altTitle:humph +_isTemplate:n",
                query.toString())
    }

    /**
     * 'protocol' parameter.
     */
    @Test
    public void testProtocol() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("protocol");
        any.addContent("download");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+protocol:download +_isTemplate:n", query.toString());
    }

    /**
     * 'type' parameter.
     */
    @Test
    public void testType() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("type");
        any.addContent("dataset");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+type:dataset +_isTemplate:n", query.toString());
    }

    /**
     * 'inspire' parameter with a single value.
     */
    @Test
    public void testSingleInspire() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("inspire");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+inspirecat:true +_isTemplate:n", query.toString());
    }

    /**
     * 'inspiretheme' parameter with a single value.
     */
    @Test
    public void testSingleInspireTheme() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("inspiretheme");
        any.addContent("Addresses");
        // CHANGED any.addContent("Addresses*");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+inspiretheme:Addresses +_isTemplate:n", query.toString());
    }

    /**
     * 'inspiretheme' parameter with a single multi-token value.
     */
    @Test
    public void testSingleMultiTokenInspireTheme() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("inspiretheme");
        any.addContent("\"Administrative units\"");
        // CHANGE any.addContent("Administrative units*");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+inspiretheme:\"Administrative units\" +_isTemplate:n", query.toString());
    }

    /**
     * 'inspiretheme' parameter with multiple values.
     */
    @Test
    public void testMultipleInspireTheme() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("inspiretheme");
        any.addContent("\"Cadastral parcels\"");
        request.addContent(any);
        Element any2 = factory.element("inspiretheme");
        any2.addContent("Hydrography*");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+inspiretheme:Hydrography* +inspiretheme:\"Cadastral parcels\") +_isTemplate:n",
                query.toString());
    }

    /**
     * 'inspireannex' parameter with a single token value.
     */
    @Test
    public void testSingleTokenInspireAnnex() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("inspireannex");
        any.addContent("joostmaghetweten");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+inspireannex:joostmaghetweten +_isTemplate:n", query.toString());
    }

    /**
     * 'themekey' parameter with a single value.
     */
    @Test
    public void testSingleThemeKey() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("themekey");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+keyword:hoeperdepoep +_isTemplate:n", query.toString());
    }

    /**
     * 'themekey' parameter with multiple values.
     */
    @Test
    public void testMultipleThemeKey() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("themekey");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        Element any2 = factory.element("themekey");
        any2.addContent("\"zat op de stoep\"");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+keyword:\"zat op de stoep\" +keyword:hoeperdepoep) +_isTemplate:n", query.toString());
    }

    /**
     * 'themekey' parameter in a single element separating multiple themekeys by ' [keywordseparator] '.
     * This is how the search page JS delivers themekey; that's unwanted behaviour, it's better
     * to have it deliver multiple themekey elements as in the testcase above.
     */
    @Test
    public void testMultipleThemeKeyOrSeparated() {
        String keywordSeparator = " or ";
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("themekey");
        any.addContent("\"hoeperdepoep\"" + keywordSeparator + "\"zat op de stoep\"");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(keyword:\"hoeperdepoep\" keyword:\"zat op de stoep\") +_isTemplate:n",
                query.toString());

    }

    /**
     * 'category' parameter with a single value.
     */
    @Test
    public void testSingleCategory() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("category");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_cat:hoeperdepoep +_isTemplate:n", query.toString());
    }

    /**
     * 'parentUUID' parameter.
     */
    @Test
    public void testParentUUID() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("parentUuid");
        any.addContent("as432f-s45hj3-vcx35s-fsd8sf");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+parentUuid:as432f-s45hj3-vcx35s-fsd8sf +_isTemplate:n", query.toString());
    }

    /**
     * 'operatesOn' parameter.
     */
    @Test
    public void testOperatesOn() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("operatesOn");
        any.addContent("value");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+operatesOn:value +_isTemplate:n", query.toString());
    }

    /**
     * '_schema' parameter.
     */
    @Test
    public void testSchema() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("_schema");
        any.addContent("value");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_schema:value +_isTemplate:n", query.toString());
    }

    /**
     * 'temporalExtent' parameters
     */
    @Test
    public void testTemporalExtent() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();

        // test extFrom
        Element request = factory.element("request");
        Element extFrom = factory.element("extFrom");
        extFrom.addContent("2010-04-01T17:35:00");
        request.addContent(extFrom);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);

        String expected = "+(tempExtentBegin:[2010-04-01T17:35:00 TO *] tempExtentEnd:[2010-04-01T17:35:00 TO *]) +_isTemplate:n";
        assertEquals("unexpected Lucene query", expected, query.toString());

        // test extTo
        request = factory.element("request");
        Element extTo = factory.element("extTo");
        extTo.addContent("2010-04-27T17:43:00");
        request.addContent(extTo);
        // build lucene query input
        LuceneQueryInput lQI2 = new LuceneQueryInput(request);
        // build lucene query
        query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI2);

        expected = "+(tempExtentBegin:[* TO 2010-04-27T17:43:00] tempExtentEnd:[* TO 2010-04-27T17:43:00]) +_isTemplate:n";
        assertEquals("unexpected Lucene query", expected, query.toString());

        // test extfrom and extTo
        request = factory.element("request");

        extFrom = factory.element("extFrom");
        extFrom.addContent("2010-04-08T17:46:00");
        request.addContent(extFrom);

        extTo = factory.element("extTo");
        extTo.addContent("2010-04-27T17:43:00");
        request.addContent(extTo);
        // build lucene query input
        LuceneQueryInput lQI3 = new LuceneQueryInput(request);
        // build lucene query
        query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI3);

        expected = "+(tempExtentBegin:[2010-04-08T17:46:00 TO 2010-04-27T17:43:00] tempExtentEnd:[2010-04-08T17:46:00 TO " +
                   "2010-04-27T17:43:00] (+tempExtentEnd:[2010-04-27T17:43:00 TO *] +tempExtentBegin:[* TO 2010-04-08T17:46:00])) " +
                   "+_isTemplate:n";
        assertEquals("unexpected Lucene query", expected, query.toString());

        // create request object
        /*JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element extFrom = factory.element("extFrom");
        extFrom.addContent("2010-04-27T16:40:00");
        request.addContent(extFrom);
        Element extTo = factory.element("extTo");
        extTo.addContent("2010-04-29T16:40:00");
        request.addContent(extTo);
        // build lucene query
        Query query = new LuceneQueryBuilder2(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("+_isTemplate:n +(tempExtentBegin:[2010-04-27T16:40:00 TO 2010-04-29T16:40:00]" +
                " tempExtentEnd:[2010-04-27T16:40:00 TO 2010-04-29T16:40:00] " +
                "(+tempExtentEnd:[2010-04-29T16:40:00 TO *] " +
                "+tempExtentBegin:[* TO 2010-04-27T16:40:00]))", query.toString());*/
    }

    /**
     * 'category' parameter with a multiple values.
     */
    @Test
    public void testMultipleCategory() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("category");
        any.addContent("hoeperdepoep");
        request.addContent(any);
        Element any2 = factory.element("category");
        any2.addContent("\"zat op de stoep\"");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+_cat:\"zat op de stoep\" +_cat:hoeperdepoep) +_isTemplate:n", query.toString());
    }

    @Test
    public void testMultipleOrCategory() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("category");
        any.addContent("hoeperdepoep or \"zat op de stoep\"");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_cat:hoeperdepoep _cat:\"zat op de stoep\") +_isTemplate:n", query.toString());
    }


    /**
     * 'editable' parameter true.
     */
    @Test
    public void testEditableTrue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("editable");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }

    /**
     * 'featured' parameter true.
     */
    @Test
    public void testFeaturedTrue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("featured");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(+_op6:1 +_op0:1) +_isTemplate:n", query.toString());
    }

    /**
     * 'featured' parameter not true.
     */
    @Test
    public void testFeaturedNotTrue() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("featured");
        any.addContent("not true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n", query.toString());
    }


    /**
     * 'groups' parameter single.
     */
    @Test
    public void testSingleGroup() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("group");
        any.addContent("hatsjekidee");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:hatsjekidee _op2:hatsjekidee) +_isTemplate:n", query.toString());
    }

    /**
     * 'groups' parameter multi.
     */
    @Test
    public void testMultiGroup() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("group");
        any.addContent("hatsjekidee");
        request.addContent(any);
        Element any2 = factory.element("group");
        any2.addContent("nou moe");
        request.addContent(any2);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:nou moe _op2:nou moe _op0:hatsjekidee _op2:hatsjekidee) +_isTemplate:n",
                query.toString());
    }

    /**
     * 'groups' parameter multi with reviewer.
     */
    @Test
    public void testMultiGroupReviewer() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("group");
        any.addContent("hatsjekidee");
        request.addContent(any);
        Element any2 = factory.element("group");
        any2.addContent("nou moe");
        request.addContent(any2);
        Element any3 = factory.element("isReviewer");
        any3.addContent("yeah!");
        request.addContent(any3);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:nou moe _op2:nou moe _op0:hatsjekidee _op2:hatsjekidee) +_isTemplate:n",
                query.toString());
    }

    /**
     * 'groups' parameter multi with owner.
     */
    @Test
    public void testMultiGroupOwner() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("group");
        any.addContent("hatsjekidee");
        request.addContent(any);
        Element any2 = factory.element("group");
        any2.addContent("nou moe");
        request.addContent(any2);
        Element any3 = factory.element("owner");
        any3.addContent("yeah!");
        request.addContent(any3);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:nou moe _op2:nou moe _op0:hatsjekidee _op2:hatsjekidee _owner:yeah!) " +
                                                "+_isTemplate:n", query.toString());
    }

    /**
     * 'groups' parameter multi with admin.
     */
    @Test
    public void testMultiGroupAdmin() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("group");
        any.addContent("hatsjekidee");
        request.addContent(any);
        Element any2 = factory.element("group");
        any2.addContent("nou moe");
        request.addContent(any2);
        Element any3 = factory.element("isAdmin");
        any3.addContent("yeah!");
        request.addContent(any3);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:nou moe _op2:nou moe _op0:hatsjekidee _op2:hatsjekidee _dummy:0) " +
                                                "+_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter equals.
     * TODO verify with Jose why he put the float values here.
     */
    @Test
    public void testBBEquals() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("55");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("43");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("12");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("9");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("equal");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+eastBL:[55.0 TO 55.0] +westBL:[43.0 TO 43.0] +southBL:[9.0 TO 9.0] +northBL:[12.0 TO " +
                                                "12.0] +_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter overlaps.
     */
    @Test
    public void testBBOverlaps() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("55");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("43");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("12");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("9");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("overlaps");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+westBL:[-180.0 TO 55.0] +eastBL:[43.0 TO 180.0] +northBL:[9.0 TO 90.0] +southBL:[-90" +
                                                ".0 TO 12.0] +_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter encloses.
     */
    @Test
    public void testBBEncloses() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("55");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("43");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("12");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("9");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("encloses");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+eastBL:[55.0 TO 180.0] +westBL:[-180.0 TO 43.0] +southBL:[-90.0 TO 9.0] +northBL:[12" +
                                                ".0 TO 90.0] +_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter fullyEnclosedWithin.
     */
    @Test
    public void testBBFullyEnclosedWithin() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("55");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("43");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("12");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("9");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("fullyEnclosedWithin");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+eastBL:[43.0 TO 55.0] +westBL:[43.0 TO 55.0] +southBL:[9.0 TO 12.0] +northBL:[9.0 TO " +
                                                "12.0] +_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter fullyOutsideOf.
     */
    @Test
    public void testBBFullyOutsideOf() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("55");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("43");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("30");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("0");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("fullyOutsideOf");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "westBL:[55.0 TO 180.0] eastBL:[-180.0 TO 43.0] northBL:[-90.0 TO 0.0] southBL:[30.0 TO" +
                                                " 90.0] +_isTemplate:n", query.toString());
    }

    /**
     * 'bounding box' parameter overlaps - standard values from search page.
     */
    @Test
    public void testBBOverlapsStandard() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element anyE = factory.element("eastBL");
        anyE.addContent("180");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("-180");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("90");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("-90");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("overlaps");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+westBL:[-180.0 TO 180.0] +eastBL:[-180.0 TO 180.0] +northBL:[-90.0 TO 90.0] " +
                                                "+southBL:[-90.0 TO 90.0] +_isTemplate:n", query.toString());
    }

    /**
     * <request>
     * <eastBL>180</eastBL>
     * <title>hoi</title>
     * <sortBy>popularity</sortBy>
     * <southBL>-90</southBL>
     * <northBL>90</northBL>
     * <any />
     * <similarity>1</similarity>
     * <relation>overlaps</relation>
     * <westBL>-180</westBL>
     * <hitsPerPage>10</hitsPerPage>
     * <attrset>geo</attrset>
     * <group>1</group>
     * <group>0</group>
     * </request>
     */
    @Test
    public void testRandomTest1() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");

        Element anyT = factory.element("title");
        anyT.addContent("hoi");
        request.addContent(anyT);

        Element anySB = factory.element("sortBy");
        anySB.addContent("popularity");
        request.addContent(anySB);

        Element any = factory.element("any");
        request.addContent(any);

        Element anySM = factory.element("similarity");
        anySM.addContent("1");
        request.addContent(anySM);

        Element anyHP = factory.element("hitsPerPage");
        anyHP.addContent("10");
        request.addContent(anyHP);

        Element anyAS = factory.element("attrset");
        anyAS.addContent("geo");
        request.addContent(anyAS);

        Element anyG1 = factory.element("group");
        anyG1.addContent("0");
        request.addContent(anyG1);

        Element anyG2 = factory.element("group");
        anyG2.addContent("1");
        request.addContent(anyG2);


        Element anyE = factory.element("eastBL");
        anyE.addContent("180");
        request.addContent(anyE);
        Element anyW = factory.element("westBL");
        anyW.addContent("-180");
        request.addContent(anyW);
        Element anyN = factory.element("northBL");
        anyN.addContent("90");
        request.addContent(anyN);
        Element anyS = factory.element("southBL");
        anyS.addContent("-90");
        request.addContent(anyS);
        Element anyR = factory.element("relation");
        anyR.addContent("overlaps");
        request.addContent(anyR);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+(_op0:1 _op2:1 _op0:0 _op2:0) +westBL:[-180.0 TO 180.0] +eastBL:[-180.0 TO 180.0] " +
                                                "+northBL:[-90.0 TO 90.0] +southBL:[-90.0 TO 90.0] +title:hoi +_isTemplate:n",
                query.toString());
    }

    /**
     * All parameters as sent by the Popular Get service when it searches for metadata. This test
     * includes many parameters that are present, but empty.
     */
    @Test
    public void testPopularGet() {
        // create request object
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element title = factory.element("title");
        title.addContent("");
        request.addContent(title);
        Element abstrakt = factory.element("abstract");
        abstrakt.addContent("");
        request.addContent(abstrakt);
        Element any = factory.element("any");
        any.addContent("");
        request.addContent(any);
        Element region = factory.element("region");
        region.addContent("");
        request.addContent(region);
        Element phrase = factory.element("phrase");
        phrase.addContent("");
        request.addContent(phrase);
        Element all = factory.element("all");
        all.addContent("");
        request.addContent(all);
        Element or = factory.element("or");
        or.addContent("");
        request.addContent(or);
        Element without = factory.element("without");
        without.addContent("");
        request.addContent(without);
        Element siteId = factory.element("siteId");
        siteId.addContent("");
        request.addContent(siteId);
        Element group = factory.element("group");
        group.addContent("");
        request.addContent(group);
        Element profile = factory.element("profile");
        profile.addContent("");
        request.addContent(profile);
        Element servers = factory.element("servers");
        servers.addContent("");
        request.addContent(servers);
        Element protocol = factory.element("protocol");
        protocol.addContent("");
        request.addContent(protocol);
        Element topicCat = factory.element("topicCat");
        topicCat.addContent("");
        request.addContent(topicCat);
        Element category = factory.element("category");
        category.addContent("");
        request.addContent(category);
        Element themekey = factory.element("themekey");
        themekey.addContent("");
        request.addContent(themekey);
        Element keywords = factory.element("keywords");
        keywords.addContent("");
        request.addContent(keywords);
        Element dateTo = factory.element("dateTo");
        dateTo.addContent("");
        request.addContent(dateTo);
        Element dateFrom = factory.element("dateFrom");
        dateFrom.addContent("");
        request.addContent(dateFrom);

        Element southBL = factory.element("southBL");
        southBL.addContent("-90");
        request.addContent(southBL);
        Element northBL = factory.element("northBL");
        northBL.addContent("90");
        request.addContent(northBL);
        Element westBL = factory.element("westBL");
        westBL.addContent("-180");
        request.addContent(westBL);
        Element eastBL = factory.element("eastBL");
        eastBL.addContent("180");
        request.addContent(eastBL);
        Element relation = factory.element("relation");
        relation.addContent("overlaps");
        request.addContent(relation);
        Element template = factory.element("template");
        template.addContent("n");
        request.addContent(template);
        Element extended = factory.element("extended");
        extended.addContent("off");
        request.addContent(extended);
        Element remote = factory.element("remote");
        remote.addContent("off");
        request.addContent(remote);
        Element timeout = factory.element("timeout");
        timeout.addContent("20");
        request.addContent(timeout);
        Element hitsPerPage = factory.element("hitsPerPage");
        hitsPerPage.addContent("10");
        request.addContent(hitsPerPage);
        Element similarity = factory.element("similarity");
        similarity.addContent(".8");
        request.addContent(similarity);
        Element output = factory.element("output");
        output.addContent("full");
        request.addContent(output);
        Element sortBy = factory.element("sortBy");
        sortBy.addContent("popularity");
        request.addContent(sortBy);

        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+_isTemplate:n +westBL:[-180.0 TO 180.0] +eastBL:[-180.0 TO 180.0] +northBL:[-90.0 TO " +
                                                "90.0] +southBL:[-90.0 TO 90.0]", query.toString());
    }


    /**
     * 'dynamic' parameter.
     */
    @Test
    public void testDynamic() {
        // create request object with dynamic=on
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("dynamic");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+dynamic:true +_isTemplate:n", query.toString());
    }

    /**
     * 'download' parameter.
     */
    @Test
    public void testDownload() {
        // create request object with dynamic=on
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("download");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+download:true +_isTemplate:n", query.toString());

    }


    /**
     * 'download' parameter.
     */
    @Test
    public void testDigitalAndPaper() {
        // create request object with digital=on, paper=off
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element any = factory.element("digital");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        // build lucene query
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        // verify query
        assertEquals("unexpected Lucene query", "+digital:true +_isTemplate:n", query.toString());


        // create request object with with digital=off, paper=on
        request = factory.element("request");
        any = factory.element("paper");
        any.addContent("true");
        request.addContent(any);
        // build lucene query input
        LuceneQueryInput lQIa = new LuceneQueryInput(request);
        // build lucene query
        query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQIa);
        // verify query
        assertEquals("unexpected Lucene query", "+paper:true +_isTemplate:n", query.toString());
    }

    /**
     * Tests passing operations (download and/or dynamic for instance) parameters criterias.
     *
     */
    @Test
    public void testDownloadDynamicParameter() {
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element download = factory.element("_operation5").addContent("1 or 2 or 3");
        Element dynamic  = factory.element("_operation1").addContent("1 or 2 or 3");
        request.addContent(download).addContent(dynamic);
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        assertTrue(query.toString().contains("+(_op5:1 _op5:2 _op5:3) +(_op1:1 _op1:2 _op1:3)"));
    }
    /**
     * Same test as above, but only download.
     */
    @Test
    public void testDownloadParameter() {
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element download = factory.element("_operation1").addContent("1 or 2 or 3");
        request.addContent(download);
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        assertTrue(query.toString().contains("+(_op1:1 _op1:2 _op1:3)"));
    }
    /**
     * Only dynamic operation parameter.
     */
    @Test
    public void testDynamicParameter() {
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element dynamic = factory.element("_operation5").addContent("1 or 2 or 3");
        request.addContent(dynamic);
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        assertTrue(query.toString().contains("+(_op5:1 _op5:2 _op5:3)"));
    }
    /**
     * Only editing operation parameter.
     */
    @Test
    public void testEditingParameter() {
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        Element editing = factory.element("_operation2").addContent("1 or 2 or 3");
        request.addContent(editing);
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        assertTrue(query.toString().contains("+(_op2:1 _op2:2 _op2:3)"));
    }   
   
    /**
     * No operation parameter.
     */
    @Test
    public void testWithoutOperationParameter() {
        JDOMFactory factory = new DefaultJDOMFactory();
        Element request = factory.element("request");
        LuceneQueryInput lQI = new LuceneQueryInput(request);
        Query query = new LuceneQueryBuilder(_tokenizedFieldSet, _numericFieldSet, _analyzer, null).build(lQI);
        assertTrue(query.toString().equals("+_isTemplate:n"));
    }
}
TOP

Related Classes of org.fao.geonet.kernel.search.LuceneQueryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.