package fr.openwide.core.jpa.search.service;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.common.collect.Sets;
import fr.openwide.core.jpa.business.generic.model.GenericEntity;
import fr.openwide.core.jpa.business.generic.model.GenericEntityReference;
import fr.openwide.core.jpa.business.generic.service.IEntityService;
import fr.openwide.core.jpa.exception.ServiceException;
import fr.openwide.core.jpa.search.dao.IHibernateSearchDao;
import fr.openwide.core.spring.util.lucene.search.LuceneUtils;
@Service("hibernateSearchService")
public class HibernateSearchServiceImpl implements IHibernateSearchService {
@Autowired
private IHibernateSearchDao hibernateSearchDao;
@Autowired
private IEntityService entityService;
@Override
public void reindexAll() throws ServiceException {
hibernateSearchDao.reindexAll();
}
@Override
public void reindexClasses(Collection<Class<?>> classes) throws ServiceException {
if (classes != null && !classes.isEmpty()) {
hibernateSearchDao.reindexClasses(classes.toArray(new Class<?>[ classes.size() ]));
}
}
@Override
public <K extends Serializable & Comparable<K>, E extends GenericEntity<K, ?>> void reindexEntity(E entity) {
hibernateSearchDao.reindexEntity(entity);
}
@Override
public <K extends Serializable & Comparable<K>, E extends GenericEntity<K, ?>> void reindexEntity(GenericEntityReference<K, E> reference) {
hibernateSearchDao.reindexEntity(entityService.getEntity(reference));
}
@Override
public <K extends Serializable & Comparable<K>, E extends GenericEntity<K, ?>> void reindexEntity(Class<E> clazz, K id) {
hibernateSearchDao.reindexEntity(entityService.getEntity(clazz, id));
}
@Override
public Set<Class<?>> getIndexedRootEntities() throws ServiceException {
return hibernateSearchDao.getIndexedRootEntities(Object.class);
}
@Override
public Set<Class<?>> getIndexedRootEntities(Collection<Class<?>> classes) throws ServiceException {
if (classes != null && !classes.isEmpty()) {
return hibernateSearchDao.getIndexedRootEntities(classes.toArray(new Class<?>[ classes.size() ]));
} else {
return Sets.newHashSet();
}
}
@Override
public void flushToIndexes() {
hibernateSearchDao.flushToIndexes();
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, String analyzerName) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, analyzerName);
}
@Override
@Deprecated
public <T> List<T> search(Collection<Class<? extends T>> classes, String[] fields, String searchPattern, String analyzerName) throws ServiceException {
return hibernateSearchDao.search(classes, fields, searchPattern, analyzerName);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern));
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, String analyzerName) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), analyzerName);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, Query additionalLuceneQuery) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, additionalLuceneQuery);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, analyzerName, additionalLuceneQuery);
}
@Override
@Deprecated
public <T> List<T> search(Collection<Class<? extends T>> classes, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery) throws ServiceException {
return hibernateSearchDao.search(classes, fields, searchPattern, analyzerName, additionalLuceneQuery);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, Query additionalLuceneQuery) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), additionalLuceneQuery);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), analyzerName, additionalLuceneQuery);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, analyzerName, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> search(Collection<Class<? extends T>> classes, String[] fields, String searchPattern, String analyzerName, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(classes, fields, searchPattern, analyzerName, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), analyzerName, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, Query additionalLuceneQuery, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, additionalLuceneQuery, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> search(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, searchPattern, analyzerName, additionalLuceneQuery, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> search(Collection<Class<? extends T>> classes, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(classes, fields, searchPattern, analyzerName, additionalLuceneQuery, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, Query additionalLuceneQuery, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), additionalLuceneQuery, limit, offset, sort);
}
@Override
@Deprecated
public <T> List<T> searchAutocomplete(Class<T> clazz, String[] fields, String searchPattern, String analyzerName, Query additionalLuceneQuery, Integer limit, Integer offset, Sort sort) throws ServiceException {
return hibernateSearchDao.search(clazz, fields, LuceneUtils.getAutocompleteQuery(searchPattern), analyzerName, additionalLuceneQuery, limit, offset, sort);
}
}