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 "MATCH (d:DataObject)-[hr:has_reference]->%s WHERE ID(d)=%d ".formatted(
25 CypherQueryHelper.getObjectPart("r", "DataObjectReference", false),
26 dataObjectId
27 ) +
28 CypherQueryHelper.getReturnPart("r");
29
30 var queryResult = findByQuery(query, Collections.emptyMap());
31
32 List<DataObjectReference> result = StreamSupport.stream(queryResult.spliterator(), false)
33 .filter(r -> r.getDataObject() != null)
34 .filter(r -> r.getDataObject().getId().equals(dataObjectId))
35 .toList();
36
37 return result;
38 }
39
40 @SuppressWarnings({ "PMD.ConsecutiveAppendsShouldReuse", "PMD.InefficientStringBuffering" })
41 public List<DataObjectReference> findByDataObjectShepardId(long dataObjectShepardId, UUID versionUID) {
42 StringBuilder queryStringBuilder = new StringBuilder(90)
43 .append("MATCH (v:Version)<-[:has_version]-(d:DataObject)-[hr:has_reference]->")
44 .append(CypherQueryHelper.getObjectPart("r", "DataObjectReference", false))
45 .append(" WHERE d." + Constants.SHEPARD_ID + "=")
46 .append(dataObjectShepardId)
47 .append(" AND ");
48 if (versionUID == null) queryStringBuilder.append(CypherQueryHelper.getVersionHeadPart("v"));
49 else queryStringBuilder.append(CypherQueryHelper.getVersionPart("v", versionUID));
50 queryStringBuilder.append(' ').append(CypherQueryHelper.getReturnPart("r"));
51 var query = queryStringBuilder.toString();
52 var queryResult = findByQuery(query, Collections.emptyMap());
53 List<DataObjectReference> result = StreamSupport.stream(queryResult.spliterator(), false)
54 .filter(r -> r.getDataObject() != null)
55 .filter(r -> r.getDataObject().getShepardId().equals(dataObjectShepardId))
56 .toList();
57 return result;
58 }
59
60 @Override
61 public Class<DataObjectReference> getEntityType() {
62 return DataObjectReference.class;
63 }
64 }