View Javadoc
1   package de.dlr.shepard.common.search.services;
2   
3   import de.dlr.shepard.auth.users.entities.User;
4   import de.dlr.shepard.auth.users.services.UserService;
5   import de.dlr.shepard.common.search.daos.SearchDAO;
6   import de.dlr.shepard.common.search.endpoints.BasicCollectionAttributes;
7   import de.dlr.shepard.common.search.query.Neo4jQueryBuilder;
8   import de.dlr.shepard.common.search.query.QueryValidator;
9   import de.dlr.shepard.common.util.Constants;
10  import de.dlr.shepard.common.util.PaginationHelper;
11  import de.dlr.shepard.common.util.SortingHelper;
12  import de.dlr.shepard.context.collection.entities.Collection;
13  import jakarta.enterprise.context.RequestScoped;
14  import jakarta.inject.Inject;
15  import java.util.List;
16  import java.util.Optional;
17  
18  @RequestScoped
19  public class CollectionSearchService {
20  
21    @Inject
22    SearchDAO searchDAO;
23  
24    @Inject
25    UserService userService;
26  
27    public PaginatedCollectionList search(
28      String collectionSearchQuery,
29      Optional<Integer> page,
30      Optional<Integer> pageSize,
31      BasicCollectionAttributes orderBy,
32      Boolean orderDesc
33    ) {
34      User user = userService.getCurrentUser();
35  
36      QueryValidator.checkQuery(collectionSearchQuery);
37      PaginationHelper pagination = null;
38      if (page.isPresent() && pageSize.isPresent()) pagination = new PaginationHelper(page.get(), pageSize.get());
39      String neo4jSelectionQuery = Neo4jQueryBuilder.collectionSelectionQueryWithNeo4jId(
40        collectionSearchQuery,
41        user.getUsername(),
42        new SortingHelper(orderBy, orderDesc)
43      );
44      List<Collection> resultList = searchDAO.findCollections(
45        neo4jSelectionQuery,
46        pagination,
47        Constants.COLLECTION_IN_QUERY
48      );
49      Integer totalResultCount = searchDAO.getCollectionTotalCount(neo4jSelectionQuery, Constants.COLLECTION_IN_QUERY);
50      return new PaginatedCollectionList(
51        resultList,
52        totalResultCount,
53        collectionSearchQuery,
54        page,
55        pageSize,
56        orderBy,
57        orderDesc
58      );
59    }
60  }