1 package de.dlr.shepard.neo4Core.dao;
2
3 import java.util.Collections;
4 import java.util.List;
5 import java.util.stream.StreamSupport;
6
7 import de.dlr.shepard.neo4Core.entities.StructuredDataReference;
8 import de.dlr.shepard.util.Constants;
9 import de.dlr.shepard.util.CypherQueryHelper;
10 import de.dlr.shepard.util.TraversalRules;
11
12 public class StructuredDataReferenceDAO extends VersionableEntityDAO<StructuredDataReference> {
13
14
15
16
17
18
19
20 public List<StructuredDataReference> findByDataObjectNeo4jId(long dataObjectId) {
21 String query = String.format("MATCH (d:DataObject)-[hr:has_reference]->%s WHERE ID(d)=%d ",
22 CypherQueryHelper.getObjectPart("r", "StructuredDataReference", false), dataObjectId)
23 + CypherQueryHelper.getReturnPart("r");
24 var queryResult = findByQuery(query, Collections.emptyMap());
25 List<StructuredDataReference> result = StreamSupport.stream(queryResult.spliterator(), false)
26 .filter(r -> r.getDataObject() != null).filter(r -> r.getDataObject().getId().equals(dataObjectId))
27 .toList();
28 return result;
29 }
30
31 public List<StructuredDataReference> findReachableReferencesByShepardId(TraversalRules traversalRule,
32 long collectionShepardId, long startShepardId, String userName) {
33 String query = getSearchForReachableReferencesByShepardIdQuery(traversalRule, collectionShepardId,
34 startShepardId, userName);
35 var queryResult = findByQuery(query, Collections.emptyMap());
36 List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
37 return ret;
38 }
39
40 public List<StructuredDataReference> findReachableReferencesByNeo4jId(long collectionId, long startId,
41 String userName) {
42 String query = getSearchForReachableReferencesQuery(collectionId, startId, userName);
43 var queryResult = findByQuery(query, Collections.emptyMap());
44 List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
45 return ret;
46 }
47
48 public List<StructuredDataReference> findReachableReferencesByShepardId(long collectionShepardId,
49 long startShepardId, String userName) {
50 String query = getSearchForReachableReferencesByShepardIdQuery(collectionShepardId, startShepardId, userName);
51 var queryResult = findByQuery(query, Collections.emptyMap());
52 List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
53 return ret;
54 }
55
56 public List<StructuredDataReference> findReachableReferencesByNeo4jId(long collectionId, String userName) {
57 String query = getSearchForReachableReferencesQuery(collectionId, userName);
58 var queryResult = findByQuery(query, Collections.emptyMap());
59 List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
60 return ret;
61 }
62
63 public List<StructuredDataReference> findReachableReferencesByShepardId(long collectionShepardId, String userName) {
64 String query = getSearchForReachableReferencesByShepardIdQuery(collectionShepardId, userName);
65 var queryResult = findByQuery(query, Collections.emptyMap());
66 List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
67 return ret;
68 }
69
70 public List<StructuredDataReference> findByDataObjectShepardId(long dataObjectShepardId) {
71 String query = String.format(
72 "MATCH (d:DataObject)-[hr:has_reference]->%s WHERE d." + Constants.SHEPARD_ID + "=%d ",
73 CypherQueryHelper.getObjectPart("r", "StructuredDataReference", false), dataObjectShepardId)
74 + CypherQueryHelper.getReturnPart("r");
75 var queryResult = findByQuery(query, Collections.emptyMap());
76 List<StructuredDataReference> result = StreamSupport.stream(queryResult.spliterator(), false)
77 .filter(r -> r.getDataObject() != null)
78 .filter(r -> r.getDataObject().getShepardId().equals(dataObjectShepardId)).toList();
79 return result;
80 }
81
82 @Override
83 public Class<StructuredDataReference> getEntityType() {
84 return StructuredDataReference.class;
85 }
86 }