1 package de.dlr.shepard.data.structureddata.daos;
2
3 import de.dlr.shepard.common.neo4j.daos.GenericDAO;
4 import de.dlr.shepard.common.util.CypherQueryHelper;
5 import de.dlr.shepard.common.util.CypherQueryHelper.Neighborhood;
6 import de.dlr.shepard.common.util.QueryParamHelper;
7 import de.dlr.shepard.data.structureddata.entities.StructuredDataContainer;
8 import jakarta.enterprise.context.RequestScoped;
9 import java.util.ArrayList;
10 import java.util.HashMap;
11 import java.util.List;
12 import java.util.Map;
13
14 @RequestScoped
15 public class StructuredDataContainerDAO extends GenericDAO<StructuredDataContainer> {
16
17 public List<StructuredDataContainer> findAllStructuredDataContainers(QueryParamHelper params, String username) {
18 String query;
19 Map<String, Object> paramsMap = new HashMap<>();
20 paramsMap.put("name", params.getName());
21 if (params.hasPagination()) {
22 paramsMap.put("offset", params.getPagination().getOffset());
23 paramsMap.put("size", params.getPagination().getSize());
24 }
25 query = String.format(
26 "MATCH %s WHERE %s WITH c",
27 CypherQueryHelper.getObjectPart("c", "StructuredDataContainer", params.hasName()),
28 CypherQueryHelper.getReadableByQuery("c", username)
29 );
30 if (params.hasOrderByAttribute()) {
31 query += " " + CypherQueryHelper.getOrderByPart("c", params.getOrderByAttribute(), params.getOrderDesc());
32 }
33 if (params.hasPagination()) {
34 query += " " + CypherQueryHelper.getPaginationPart();
35 }
36 query += " " + CypherQueryHelper.getReturnPart("c", Neighborhood.ESSENTIAL);
37 var result = new ArrayList<StructuredDataContainer>();
38 for (var container : findByQuery(query, paramsMap)) {
39 if (matchName(container, params.getName())) {
40 result.add(container);
41 }
42 }
43
44 return result;
45 }
46
47 private boolean matchName(StructuredDataContainer container, String name) {
48 return name == null || container.getName().equalsIgnoreCase(name);
49 }
50
51 @Override
52 public Class<StructuredDataContainer> getEntityType() {
53 return StructuredDataContainer.class;
54 }
55 }