Timeseries.java

package de.dlr.shepard.data.timeseries.model;

import de.dlr.shepard.common.neo4j.entities.Annotatable;
import de.dlr.shepard.common.util.HasId;
import de.dlr.shepard.common.util.Neo4jLabels;
import de.dlr.shepard.context.semantic.entities.SemanticAnnotation;
import de.dlr.shepard.data.timeseries.model.enums.DataPointValueType;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.neo4j.ogm.annotation.Index;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.Relationship.Direction;

@NodeEntity
@Data
@NoArgsConstructor(force = true)
@RequiredArgsConstructor
public class Timeseries implements HasId, Annotatable {

  @Id
  @GeneratedValue
  @EqualsAndHashCode.Exclude
  private Long id;

  @Index
  @NotBlank
  private boolean deleted;

  @NotBlank
  @NonNull
  @Relationship(type = Neo4jLabels.IS_IN_CONTAINER, direction = Direction.OUTGOING)
  private TimeseriesContainer container;

  @NotBlank
  @NonNull
  @Relationship(type = Neo4jLabels.HAS_TIMESERIES_TUPLE, direction = Direction.OUTGOING)
  private TimeseriesTuple timeseriesTuple;

  @NotBlank
  @Enumerated(EnumType.STRING)
  private final DataPointValueType valueType;

  @NotBlank
  private final Long timeseriesId;

  @NotBlank
  @Relationship(type = Neo4jLabels.HAS_ANNOTATION, direction = Direction.OUTGOING)
  private final List<SemanticAnnotation> annotations = new ArrayList<>();

  @Override
  public String getUniqueId() {
    return "timeseries-" + getTimeseriesId();
  }

  @Override
  public void addAnnotation(SemanticAnnotation annotation) {
    annotations.add(annotation);
  }
}