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.neo4j.entities.BasicContainer;
6   import de.dlr.shepard.common.neo4j.io.BasicContainerIO;
7   import de.dlr.shepard.common.search.daos.SearchDAO;
8   import de.dlr.shepard.common.search.io.ContainerSearchBody;
9   import de.dlr.shepard.common.search.io.ContainerSearchParams;
10  import de.dlr.shepard.common.search.io.ContainerSearchResult;
11  import de.dlr.shepard.common.search.query.Neo4jQueryBuilder;
12  import de.dlr.shepard.common.search.query.QueryValidator;
13  import de.dlr.shepard.common.util.PaginationHelper;
14  import de.dlr.shepard.common.util.SortingHelper;
15  import jakarta.enterprise.context.RequestScoped;
16  import jakarta.inject.Inject;
17  import java.util.List;
18  
19  @RequestScoped
20  public class ContainerSearchService {
21  
22    @Inject
23    SearchDAO searchDAO;
24  
25    @Inject
26    UserService userService;
27  
28    public ContainerSearchResult search(
29      ContainerSearchBody containerSearchBody,
30      PaginationHelper pagination,
31      SortingHelper sortOrder
32    ) {
33      User user = userService.getCurrentUser();
34  
35      ContainerSearchParams containerSearchParams = containerSearchBody.getSearchParams();
36      QueryValidator.checkQuery(containerSearchBody.getSearchParams().getQuery());
37      String neo4jSelectionQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
38        containerSearchParams.getQuery(),
39        containerSearchParams.getQueryType(),
40        sortOrder,
41        user.getUsername()
42      );
43      List<BasicContainerIO> resultList = findContainerList(neo4jSelectionQuery, containerSearchParams, pagination);
44      Integer totalResultCount = searchDAO.getContainerTotalCount(
45        neo4jSelectionQuery,
46        containerSearchParams.getQueryType().getTypeAlias()
47      );
48      ContainerSearchResult containerSearchResult = new ContainerSearchResult(
49        resultList,
50        containerSearchBody.getSearchParams(),
51        totalResultCount
52      );
53      return containerSearchResult;
54    }
55  
56    private List<BasicContainerIO> findContainerList(
57      String neo4jSelectionQuery,
58      ContainerSearchParams searchParams,
59      PaginationHelper pagination
60    ) {
61      List<BasicContainer> resultContainers = searchDAO.findContainers(
62        neo4jSelectionQuery,
63        pagination,
64        searchParams.getQueryType().getTypeAlias()
65      );
66      List<BasicContainerIO> ret = resultContainers.stream().map(BasicContainerIO::new).toList();
67      return ret;
68    }
69  }