1 package de.dlr.shepard.context.references.dataobject.daos;
2
3 import de.dlr.shepard.common.util.Constants;
4 import de.dlr.shepard.common.util.CypherQueryHelper;
5 import de.dlr.shepard.context.references.dataobject.entities.DataObjectReference;
6 import de.dlr.shepard.context.version.daos.VersionableEntityDAO;
7 import jakarta.enterprise.context.RequestScoped;
8 import java.util.Collections;
9 import java.util.List;
10 import java.util.UUID;
11 import java.util.stream.StreamSupport;
12
13 @RequestScoped
14 public class DataObjectReferenceDAO extends VersionableEntityDAO<DataObjectReference> {
15
16
17
18
19
20
21
22 public List<DataObjectReference> findByDataObjectNeo4jId(long dataObjectId) {
23 String query =
24 String.format(
25 "MATCH (d:DataObject)-[hr:has_reference]->%s WHERE ID(d)=%d ",
26 CypherQueryHelper.getObjectPart("r", "DataObjectReference", false),
27 dataObjectId
28 ) +
29 CypherQueryHelper.getReturnPart("r");
30
31 var queryResult = findByQuery(query, Collections.emptyMap());
32
33 List<DataObjectReference> result = StreamSupport.stream(queryResult.spliterator(), false)
34 .filter(r -> r.getDataObject() != null)
35 .filter(r -> r.getDataObject().getId().equals(dataObjectId))
36 .toList();
37
38 return result;
39 }
40
41 public List<DataObjectReference> findByDataObjectShepardId(long dataObjectShepardId, UUID versionUID) {
42 String query =
43 String.format(
44 "MATCH (d:DataObject)-[hr:has_reference]->%s WHERE d." + Constants.SHEPARD_ID + "=%d ",
45 CypherQueryHelper.getObjectPart("r", "DataObjectReference", false),
46 dataObjectShepardId
47 ) +
48 CypherQueryHelper.getReturnPart("r");
49 StringBuffer queryBuffer = new StringBuffer();
50 queryBuffer.append("MATCH (v:Version)<-[:has_version]-(d:DataObject)-[hr:has_reference]->");
51 queryBuffer.append(CypherQueryHelper.getObjectPart("r", "DataObjectReference", false));
52 queryBuffer.append(" WHERE d." + Constants.SHEPARD_ID + "=" + dataObjectShepardId + " AND ");
53 if (versionUID == null) queryBuffer.append(CypherQueryHelper.getVersionHeadPart("v"));
54 else queryBuffer.append(CypherQueryHelper.getVersionPart("v", versionUID));
55 queryBuffer.append(" " + CypherQueryHelper.getReturnPart("r"));
56 query = queryBuffer.toString();
57 var queryResult = findByQuery(query, Collections.emptyMap());
58 List<DataObjectReference> result = StreamSupport.stream(queryResult.spliterator(), false)
59 .filter(r -> r.getDataObject() != null)
60 .filter(r -> r.getDataObject().getShepardId().equals(dataObjectShepardId))
61 .toList();
62 return result;
63 }
64
65 @Override
66 public Class<DataObjectReference> getEntityType() {
67 return DataObjectReference.class;
68 }
69 }