package org.infinispan.query.helper;
import static org.testng.AssertJUnit.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.util.Version;
import org.hibernate.search.spi.SearchIntegrator;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.cache.Index;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
import org.infinispan.factories.ComponentRegistry;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.query.CacheQuery;
import org.infinispan.query.Search;
import org.infinispan.query.SearchManager;
import org.infinispan.query.queries.faceting.Car;
import org.infinispan.query.test.Person;
import org.infinispan.test.AbstractCacheTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
/**
* Creates a test query helper
*
* @author Manik Surtani
* @author Sanne Grinovero
* @since 4.0
*/
public class TestQueryHelperFactory {
public static final Analyzer STANDARD_ANALYZER = new StandardAnalyzer();
public static QueryParser createQueryParser(String defaultFieldName) {
return new QueryParser(defaultFieldName, STANDARD_ANALYZER);
}
public static Version getLuceneVersion() {
return Version.LATEST; //Change as needed
}
public static <E> CacheQuery<E> createCacheQuery(Cache m_cache, String fieldName, String searchString) throws ParseException {
QueryParser qp = createQueryParser(fieldName);
Query parsedQuery = qp.parse(searchString);
SearchManager queryFactory = Search.getSearchManager(m_cache);
return queryFactory.getQuery(parsedQuery);
}
public static SearchIntegrator extractSearchFactory(Cache cache) {
ComponentRegistry componentRegistry = cache.getAdvancedCache().getComponentRegistry();
SearchIntegrator component = componentRegistry.getComponent(SearchIntegrator.class);
assertNotNull(component);
return component;
}
public static List createTopologyAwareCacheNodes(int numberOfNodes, CacheMode cacheMode, boolean transactional,
boolean indexLocalOnly, boolean isRamDirectoryProvider, String defaultCacheName, Class... indexedTypes) {
return createTopologyAwareCacheNodes(numberOfNodes, cacheMode, transactional, indexLocalOnly,
isRamDirectoryProvider, defaultCacheName, f -> {}, indexedTypes);
}
public static List createTopologyAwareCacheNodes(int numberOfNodes, CacheMode cacheMode, boolean transactional,
boolean indexLocalOnly, boolean isRamDirectoryProvider, String defaultCacheName,
Consumer<ConfigurationBuilderHolder> holderConsumer, Class... indexedTypes) {
List caches = new ArrayList();
ConfigurationBuilder builder = AbstractCacheTest.getDefaultClusteredCacheConfig(cacheMode, transactional);
builder.indexing().index(indexLocalOnly ? Index.LOCAL : Index.ALL);
if (isRamDirectoryProvider) {
builder.indexing()
.addProperty("default.directory_provider", "ram")
.addProperty("lucene_version", "LUCENE_CURRENT")
.addProperty("error_handler", "org.infinispan.query.helper.StaticTestingErrorHandler");
} else {
builder.indexing()
.addProperty("default.indexmanager", "org.infinispan.query.indexmanager.InfinispanIndexManager")
.addProperty("lucene_version", "LUCENE_CURRENT")
.addProperty("error_handler", "org.infinispan.query.helper.StaticTestingErrorHandler");
if (cacheMode.isClustered()) {
builder.clustering().stateTransfer().fetchInMemoryState(true);
}
}
for (Class indexedType : indexedTypes) {
builder.indexing().addIndexedEntity(indexedType);
}
for (int i = 0; i < numberOfNodes; i++) {
ConfigurationBuilderHolder holder = new ConfigurationBuilderHolder();
GlobalConfigurationBuilder globalConfigurationBuilder = holder.getGlobalConfigurationBuilder().clusteredDefault();
globalConfigurationBuilder.transport().machineId("a" + i).rackId("b" + i).siteId("test" + i).defaultCacheName(defaultCacheName);
holderConsumer.accept(holder);
holder.newConfigurationBuilder(defaultCacheName).read(builder.build());
EmbeddedCacheManager cm1 = TestCacheManagerFactory.createClusteredCacheManager(holder);
caches.add(cm1.getCache());
}
return caches;
}
}