View Javadoc
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     * Searches the database for references.
18     *
19     * @param dataObjectId identifies the dataObject
20     * @return a List of references
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  }