ReferencedTimeseriesNodeEntityDAO.java

package de.dlr.shepard.context.references.timeseriesreference.daos;

import de.dlr.shepard.common.neo4j.daos.GenericDAO;
import de.dlr.shepard.common.util.CypherQueryHelper;
import de.dlr.shepard.context.references.timeseriesreference.model.ReferencedTimeseriesNodeEntity;
import jakarta.enterprise.context.RequestScoped;
import java.util.Map;

@RequestScoped
public class ReferencedTimeseriesNodeEntityDAO extends GenericDAO<ReferencedTimeseriesNodeEntity> {

  /**
   * Find a timeseries by properties
   *
   * @param measurement  measurement
   * @param device       device
   * @param location     location
   * @param symbolicName symbolicName
   * @param field        field
   *
   * @return the found timeseries or null
   */
  public ReferencedTimeseriesNodeEntity find(
    String measurement,
    String device,
    String location,
    String symbolicName,
    String field
  ) {
    var query = String.format(
      "MATCH (t:Timeseries { measurement: $measurement, device: $device, location: $location, symbolicName: $symbolicName, field: $field }) %s",
      CypherQueryHelper.getReturnPart("t")
    );
    Map<String, Object> params = Map.of(
      "measurement",
      measurement,
      "device",
      device,
      "location",
      location,
      "symbolicName",
      symbolicName,
      "field",
      field
    );
    var results = findByQuery(query, params);
    return results.iterator().hasNext() ? results.iterator().next() : null;
  }

  @Override
  public Class<ReferencedTimeseriesNodeEntity> getEntityType() {
    return ReferencedTimeseriesNodeEntity.class;
  }
}