ddf.catalog.source.solr.SolrProviderTestCase.java Source code

Java tutorial

Introduction

Here is the source code for ddf.catalog.source.solr.SolrProviderTestCase.java

Source

/**
 * Copyright (c) Codice Foundation
 * <p/>
 * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 * <p/>
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details. A copy of the GNU Lesser General Public License
 * is distributed along with this program and can be found at
 * <http://www.gnu.org/licenses/lgpl.html>.
 */
package ddf.catalog.source.solr;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.codice.solr.factory.ConfigurationFileProxy;
import org.codice.solr.factory.ConfigurationStore;
import org.codice.solr.factory.SolrServerFactory;
import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.opengis.filter.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ddf.catalog.data.Metacard;
import ddf.catalog.data.Result;
import ddf.catalog.filter.proxy.adapter.GeotoolsFilterAdapterImpl;
import ddf.catalog.operation.CreateResponse;
import ddf.catalog.operation.DeleteResponse;
import ddf.catalog.operation.Query;
import ddf.catalog.operation.QueryRequest;
import ddf.catalog.operation.SourceResponse;
import ddf.catalog.operation.UpdateResponse;
import ddf.catalog.operation.impl.CreateRequestImpl;
import ddf.catalog.operation.impl.DeleteRequestImpl;
import ddf.catalog.operation.impl.QueryImpl;
import ddf.catalog.operation.impl.QueryRequestImpl;
import ddf.catalog.operation.impl.UpdateRequestImpl;
import ddf.catalog.source.IngestException;
import ddf.catalog.source.UnsupportedQueryException;

public abstract class SolrProviderTestCase {

    protected static final int ALL_RESULTS = -1;

    protected static final String MASKED_ID = "scp";

    private static final Logger LOGGER = LoggerFactory.getLogger(TestSolrProvider.class);

    private static final int TEST_METHOD_NAME_INDEX = 3;

    private static final int ONE_SECOND = 1;

    private static final int TIME_STEP_10SECONDS = 10 * ONE_SECOND;

    private static final int TIME_STEP_30SECONDS = 30 * ONE_SECOND;

    private static final int A_LITTLE_WHILE = TIME_STEP_10SECONDS;

    protected static TestSolrFilterBuilder filterBuilder = new TestSolrFilterBuilder();

    protected static SolrCatalogProvider provider = null;

    @BeforeClass
    public static void setup() throws Exception {
        LOGGER.info("RUNNING one-time setup.");
        ConfigurationStore.getInstance().setDataDirectoryPath("target/solr");
        ConfigurationStore.getInstance().setForceAutoCommit(true);
        ConfigurationFileProxy configurationFileProxy = new ConfigurationFileProxy(
                ConfigurationStore.getInstance());

        provider = new SolrCatalogProvider(
                SolrServerFactory.getEmbeddedSolrServer("solrconfig.xml", "schema.xml", configurationFileProxy),
                new GeotoolsFilterAdapterImpl(), new SolrFilterDelegateFactoryImpl());

        // Mask the id, this is something that the CatalogFramework would
        // usually do
        provider.setId(MASKED_ID);
    }

    protected static void messageBreak(String string) {
        String stars = StringUtils.repeat("*", string.length() + 2);
        LOGGER.info(stars);
        LOGGER.info("* {}", string);
        LOGGER.info(stars);
    }

    protected static void deleteAllIn(SolrCatalogProvider solrProvider)
            throws IngestException, UnsupportedQueryException {
        deleteAllIn(solrProvider, TEST_METHOD_NAME_INDEX);
    }

    protected static void deleteAllIn(SolrCatalogProvider solrProvider, int methodNameIndex)
            throws IngestException, UnsupportedQueryException {
        messageBreak(Thread.currentThread().getStackTrace()[methodNameIndex].getMethodName() + "()");

        boolean isCaseSensitive = false;
        boolean isFuzzy = false;

        QueryImpl query = null;
        SourceResponse sourceResponse = null;
        CommonQueryBuilder queryBuilder = new CommonQueryBuilder();
        query = queryBuilder.like(Metacard.ID, "*", isCaseSensitive, isFuzzy);
        query.setPageSize(ALL_RESULTS);
        sourceResponse = solrProvider.query(new QueryRequestImpl(query));

        List<String> ids = new ArrayList<String>();
        for (Result r : sourceResponse.getResults()) {
            ids.add(r.getMetacard().getId());
        }

        LOGGER.info("Records found for deletion: {}", ids);

        provider.delete(new DeleteRequestImpl(ids.toArray(new String[ids.size()])));

        LOGGER.info("Deletion complete. -----------");
    }

    protected static CreateResponse createIn(List<Metacard> metacards, SolrCatalogProvider solrProvider)
            throws IngestException {
        CreateResponse createResponse = solrProvider.create(new CreateRequestImpl(metacards));

        return createResponse;
    }

    protected QueryRequest quickQuery(Filter filter) {
        return new QueryRequestImpl(new QueryImpl(filter));
    }

    protected void deleteAll() throws IngestException, UnsupportedQueryException {
        deleteAllIn(provider);
    }

    protected void queryAndVerifyCount(int count, Filter filter) throws UnsupportedQueryException {
        Query query = new QueryImpl(filter);
        QueryRequest request = new QueryRequestImpl(query);
        SourceResponse response = provider.query(request);

        assertEquals(count, response.getResults().size());
    }

    protected DeleteResponse delete(String identifier) throws IngestException {
        return delete(new String[] { identifier });
    }

    protected DeleteResponse delete(String[] identifier) throws IngestException {
        DeleteResponse deleteResponse = provider.delete(new DeleteRequestImpl(identifier));

        return deleteResponse;
    }

    protected UpdateResponse update(String id, Metacard metacard) throws IngestException {
        String[] ids = { id };
        return update(ids, Arrays.asList(metacard));
    }

    protected UpdateResponse update(String[] ids, List<Metacard> list) throws IngestException {
        UpdateResponse updateResponse = provider.update(new UpdateRequestImpl(ids, list));

        return updateResponse;
    }

    protected CreateResponse create(Metacard metacard) throws IngestException {
        return create(Arrays.asList(metacard));
    }

    protected CreateResponse create(List<Metacard> metacards) throws IngestException {
        return createIn(metacards, provider);
    }

    protected List<Metacard> addMetacardWithModifiedDate(DateTime now) throws IngestException {
        List<Metacard> list = new ArrayList<Metacard>();
        MockMetacard m = new MockMetacard(Library.getFlagstaffRecord());
        m.setEffectiveDate(dateNow(now));
        list.add(m);
        create(list);
        return list;
    }

    protected List<Result> getResultsForFilteredQuery(Filter filter) throws UnsupportedQueryException {
        QueryImpl query = new QueryImpl(filter);

        SourceResponse sourceResponse = provider.query(new QueryRequestImpl(query));
        return sourceResponse.getResults();
    }

    protected Date dateAfterNow(DateTime now) {
        return now.plusSeconds(A_LITTLE_WHILE).toDate();
    }

    protected Date dateBeforeNow(DateTime now) {
        return now.minusSeconds(A_LITTLE_WHILE).toDate();
    }

    protected Date dateNow(DateTime now) {
        return now.toDate();
    }
}