Coverage Summary for Class: ProjectSearchService (org.kitodo.production.services.data.base)
Class |
Class, %
|
Method, %
|
Line, %
|
ProjectSearchService |
100%
(1/1)
|
85,7%
(6/7)
|
88,2%
(15/17)
|
/*
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
*
* This file is part of the Kitodo project.
*
* It is licensed under GNU General Public License version 3 or later.
*
* For the full copyright and license information, please read the
* GPL3-License.txt file that was distributed with this source code.
*/
package org.kitodo.production.services.data.base;
import java.util.List;
import java.util.Objects;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.kitodo.data.database.beans.BaseIndexedBean;
import org.kitodo.data.database.beans.Project;
import org.kitodo.data.database.beans.User;
import org.kitodo.data.database.persistence.BaseDAO;
import org.kitodo.data.elasticsearch.index.Indexer;
import org.kitodo.data.elasticsearch.index.type.BaseType;
import org.kitodo.data.elasticsearch.search.Searcher;
import org.kitodo.data.exceptions.DataException;
import org.kitodo.production.dto.BaseDTO;
import org.kitodo.production.services.ServiceManager;
public abstract class ProjectSearchService<T extends BaseIndexedBean, S extends BaseDTO, V extends BaseDAO<T>>
extends ClientSearchService<T, S, V> {
private final String projectKey;
/**
* Constructor necessary to use searcher in child classes.
*
* @param dao
* DAO object for executing operations on database
* @param type
* Type object for ElasticSearch
* @param indexer
* for executing insert / updates to ElasticSearch
* @param searcher
* for executing queries to ElasticSearch
*/
public ProjectSearchService(V dao, BaseType type, Indexer indexer, Searcher searcher, String clientKey,
String projectKey) {
super(dao, type, indexer, searcher, clientKey);
this.projectKey = projectKey;
}
private QueryBuilder createUserProjectQuery() {
User currentUser = ServiceManager.getUserService().getCurrentUser();
if (Objects.nonNull(currentUser)) {
List<Project> projects = currentUser.getProjects();
return createSetQueryForBeans(projectKey, projects, true);
}
return null;
}
private BoolQueryBuilder queryForProjects(QueryBuilder query) {
BoolQueryBuilder boolQuery = new BoolQueryBuilder();
boolQuery.must(query);
QueryBuilder userProjectQuery = createUserProjectQuery();
if (Objects.nonNull(userProjectQuery)) {
boolQuery.must(userProjectQuery);
}
return boolQuery;
}
@Override
public List<S> findByQuery(QueryBuilder query, boolean related) throws DataException {
return super.findByQuery(queryForProjects(query), related);
}
@Override
public List<S> findByQuery(QueryBuilder query, SortBuilder sort, boolean related) throws DataException {
return super.findByQuery(queryForProjects(query), sort, related);
}
@Override
public List<S> findByQuery(QueryBuilder query, SortBuilder sort, Integer offset, Integer size, boolean related)
throws DataException {
return super.findByQuery(queryForProjects(query), sort, offset, size, related);
}
@Override
public Long countDocuments(QueryBuilder query) throws DataException {
return super.countDocuments(queryForProjects(query));
}
}