1 package de.dlr.shepard.neo4Core.dao;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.stream.StreamSupport;
9
10 import de.dlr.shepard.neo4Core.entities.BasicReference;
11 import de.dlr.shepard.util.CypherQueryHelper;
12 import de.dlr.shepard.util.QueryParamHelper;
13
14 public class BasicReferenceDAO extends VersionableEntityDAO<BasicReference> {
15
16 @Override
17 public Class<BasicReference> getEntityType() {
18 return BasicReference.class;
19 }
20
21
22
23
24
25
26
27
28 public List<BasicReference> findByDataObjectNeo4jId(long dataObjectId, QueryParamHelper params) {
29 String query;
30 Map<String, Object> paramsMap = new HashMap<>();
31 paramsMap.put("name", params.getName());
32 if (params.hasPagination()) {
33 paramsMap.put("offset", params.getPagination().getOffset());
34 paramsMap.put("size", params.getPagination().getSize());
35 }
36 query = String.format("MATCH (d:DataObject)-[hr:has_reference]->%s WHERE ID(d)=%d WITH r",
37 CypherQueryHelper.getObjectPart("r", "BasicReference", params.hasName()), dataObjectId);
38 if (params.hasOrderByAttribute()) {
39 query += " " + CypherQueryHelper.getOrderByPart("r", params.getOrderByAttribute(), params.getOrderDesc());
40 }
41 if (params.hasPagination()) {
42 query += " " + CypherQueryHelper.getPaginationPart();
43 }
44 query += " " + CypherQueryHelper.getReturnPart("r");
45 var result = new ArrayList<BasicReference>();
46 for (var ref : findByQuery(query, paramsMap)) {
47 if (matchDataObject(ref, dataObjectId) && matchName(ref, params.getName())) {
48 result.add(ref);
49 }
50 }
51 return result;
52 }
53
54
55
56
57
58
59
60
61 public List<BasicReference> findByDataObjectShepardId(long dataObjectShepardId, QueryParamHelper params) {
62 String query;
63 Map<String, Object> paramsMap = new HashMap<>();
64 paramsMap.put("name", params.getName());
65 if (params.hasPagination()) {
66 paramsMap.put("offset", params.getPagination().getOffset());
67 paramsMap.put("size", params.getPagination().getSize());
68 }
69 query = String.format("MATCH (d:DataObject)-[hr:has_reference]->%s WHERE d.shepardId=%d WITH br",
70 CypherQueryHelper.getObjectPart("br", "BasicReference", params.hasName()), dataObjectShepardId);
71 if (params.hasOrderByAttribute()) {
72 query += " " + CypherQueryHelper.getOrderByPart("br", params.getOrderByAttribute(), params.getOrderDesc());
73 }
74 if (params.hasPagination()) {
75 query += " " + CypherQueryHelper.getPaginationPart();
76 }
77 query += " " + CypherQueryHelper.getReturnPart("br");
78 var result = new ArrayList<BasicReference>();
79 for (var ref : findByQuery(query, paramsMap)) {
80 if (matchDataObjectByShepardId(ref, dataObjectShepardId) && matchName(ref, params.getName())) {
81 result.add(ref);
82 }
83 }
84 return result;
85 }
86
87 private boolean matchDataObject(BasicReference ref, long dataObjectId) {
88 return ref.getDataObject() != null && ref.getDataObject().getId().equals(dataObjectId);
89 }
90
91 private boolean matchDataObjectByShepardId(BasicReference ref, long dataObjectShepardId) {
92 return ref.getDataObject() != null && ref.getDataObject().getShepardId().equals(dataObjectShepardId);
93 }
94
95 private boolean matchName(BasicReference ref, String name) {
96 return name == null || ref.getName().equalsIgnoreCase(name);
97 }
98
99 public List<BasicReference> getBasicReferencesByQuery(String query) {
100 var queryResult = findByQuery(query, Collections.emptyMap());
101 List<BasicReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
102 return ret;
103 }
104
105 }