1 package de.dlr.shepard.data.timeseries.model;
2
3 import de.dlr.shepard.common.neo4j.entities.Annotatable;
4 import de.dlr.shepard.common.util.HasId;
5 import de.dlr.shepard.common.util.Neo4jLabels;
6 import de.dlr.shepard.context.semantic.entities.SemanticAnnotation;
7 import de.dlr.shepard.data.timeseries.model.enums.DataPointValueType;
8 import jakarta.persistence.EnumType;
9 import jakarta.persistence.Enumerated;
10 import jakarta.persistence.GeneratedValue;
11 import jakarta.persistence.Id;
12 import jakarta.validation.constraints.NotBlank;
13 import java.util.ArrayList;
14 import java.util.List;
15 import lombok.Data;
16 import lombok.EqualsAndHashCode;
17 import lombok.NoArgsConstructor;
18 import lombok.NonNull;
19 import lombok.RequiredArgsConstructor;
20 import org.neo4j.ogm.annotation.Index;
21 import org.neo4j.ogm.annotation.NodeEntity;
22 import org.neo4j.ogm.annotation.Relationship;
23 import org.neo4j.ogm.annotation.Relationship.Direction;
24
25 @NodeEntity
26 @Data
27 @NoArgsConstructor(force = true)
28 @RequiredArgsConstructor
29 public class Timeseries implements HasId, Annotatable {
30
31 @Id
32 @GeneratedValue
33 @EqualsAndHashCode.Exclude
34 private Long id;
35
36 @Index
37 @NotBlank
38 private boolean deleted;
39
40 @NotBlank
41 @NonNull
42 @Relationship(type = Neo4jLabels.IS_IN_CONTAINER, direction = Direction.OUTGOING)
43 private TimeseriesContainer container;
44
45 @NotBlank
46 @NonNull
47 @Relationship(type = Neo4jLabels.HAS_TIMESERIES_TUPLE, direction = Direction.OUTGOING)
48 private TimeseriesTuple timeseriesTuple;
49
50 @NotBlank
51 @Enumerated(EnumType.STRING)
52 private final DataPointValueType valueType;
53
54 @NotBlank
55 private final Long timeseriesId;
56
57 @NotBlank
58 @Relationship(type = Neo4jLabels.HAS_ANNOTATION, direction = Direction.OUTGOING)
59 private final List<SemanticAnnotation> annotations = new ArrayList<>();
60
61 @Override
62 public String getUniqueId() {
63 return "timeseries-" + getTimeseriesId();
64 }
65
66 @Override
67 public void addAnnotation(SemanticAnnotation annotation) {
68 annotations.add(annotation);
69 }
70 }