StructuredDataReferenceDAO.java
package de.dlr.shepard.neo4Core.dao;
import de.dlr.shepard.neo4Core.entities.StructuredDataReference;
import de.dlr.shepard.util.Constants;
import de.dlr.shepard.util.CypherQueryHelper;
import de.dlr.shepard.util.TraversalRules;
import jakarta.enterprise.context.RequestScoped;
import java.util.Collections;
import java.util.List;
import java.util.stream.StreamSupport;
@RequestScoped
public class StructuredDataReferenceDAO extends VersionableEntityDAO<StructuredDataReference> {
/**
* Searches the database for references.
*
* @param dataObjectId identifies the dataObject
* @return a List of references
*/
public List<StructuredDataReference> findByDataObjectNeo4jId(long dataObjectId) {
String query =
String.format(
"MATCH (d:DataObject)-[hr:has_reference]->%s WHERE ID(d)=%d ",
CypherQueryHelper.getObjectPart("r", "StructuredDataReference", false),
dataObjectId
) +
CypherQueryHelper.getReturnPart("r");
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> result = StreamSupport.stream(queryResult.spliterator(), false)
.filter(r -> r.getDataObject() != null)
.filter(r -> r.getDataObject().getId().equals(dataObjectId))
.toList();
return result;
}
public List<StructuredDataReference> findReachableReferencesByShepardId(
TraversalRules traversalRule,
long collectionShepardId,
long startShepardId,
String userName
) {
String query = getSearchForReachableReferencesByShepardIdQuery(
traversalRule,
collectionShepardId,
startShepardId,
userName
);
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
return ret;
}
public List<StructuredDataReference> findReachableReferencesByNeo4jId(
long collectionId,
long startId,
String userName
) {
String query = getSearchForReachableReferencesQuery(collectionId, startId, userName);
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
return ret;
}
public List<StructuredDataReference> findReachableReferencesByShepardId(
long collectionShepardId,
long startShepardId,
String userName
) {
String query = getSearchForReachableReferencesByShepardIdQuery(collectionShepardId, startShepardId, userName);
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
return ret;
}
public List<StructuredDataReference> findReachableReferencesByNeo4jId(long collectionId, String userName) {
String query = getSearchForReachableReferencesQuery(collectionId, userName);
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
return ret;
}
public List<StructuredDataReference> findReachableReferencesByShepardId(long collectionShepardId, String userName) {
String query = getSearchForReachableReferencesByShepardIdQuery(collectionShepardId, userName);
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> ret = StreamSupport.stream(queryResult.spliterator(), false).toList();
return ret;
}
public List<StructuredDataReference> findByDataObjectShepardId(long dataObjectShepardId) {
String query =
String.format(
"MATCH (d:DataObject)-[hr:has_reference]->%s WHERE d." + Constants.SHEPARD_ID + "=%d ",
CypherQueryHelper.getObjectPart("r", "StructuredDataReference", false),
dataObjectShepardId
) +
CypherQueryHelper.getReturnPart("r");
var queryResult = findByQuery(query, Collections.emptyMap());
List<StructuredDataReference> result = StreamSupport.stream(queryResult.spliterator(), false)
.filter(r -> r.getDataObject() != null)
.filter(r -> r.getDataObject().getShepardId().equals(dataObjectShepardId))
.toList();
return result;
}
@Override
public Class<StructuredDataReference> getEntityType() {
return StructuredDataReference.class;
}
}