85 lines
1.9 KiB
Java
85 lines
1.9 KiB
Java
package de.ph87.data.series;
|
|
|
|
import de.ph87.data.log.AbstractEntityLog;
|
|
import jakarta.annotation.Nullable;
|
|
import jakarta.persistence.Column;
|
|
import jakarta.persistence.Entity;
|
|
import jakarta.persistence.EnumType;
|
|
import jakarta.persistence.Enumerated;
|
|
import jakarta.persistence.GeneratedValue;
|
|
import jakarta.persistence.GenerationType;
|
|
import jakarta.persistence.Id;
|
|
import jakarta.persistence.Version;
|
|
import lombok.Getter;
|
|
import lombok.NoArgsConstructor;
|
|
import lombok.NonNull;
|
|
import lombok.Setter;
|
|
import lombok.ToString;
|
|
|
|
import java.time.ZonedDateTime;
|
|
|
|
@Entity
|
|
@Getter
|
|
@ToString
|
|
@NoArgsConstructor
|
|
public class Series extends AbstractEntityLog {
|
|
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
private long id;
|
|
|
|
@Version
|
|
private long version;
|
|
|
|
@NonNull
|
|
@Column(nullable = false, unique = true)
|
|
private String name;
|
|
|
|
@Setter
|
|
@NonNull
|
|
@Column(nullable = false)
|
|
private String unit;
|
|
|
|
@Setter
|
|
@Column(nullable = false)
|
|
private int decimals;
|
|
|
|
@Column
|
|
@Nullable
|
|
private ZonedDateTime first = null;
|
|
|
|
@Column
|
|
@Nullable
|
|
private ZonedDateTime last = null;
|
|
|
|
@Nullable
|
|
@Column(name = "`value`")
|
|
private Double value = null;
|
|
|
|
@Setter
|
|
@Column(nullable = false)
|
|
private int expectedEverySeconds = 5;
|
|
|
|
@Setter
|
|
@NonNull
|
|
@Column(nullable = false)
|
|
@Enumerated(EnumType.STRING)
|
|
private SeriesType type;
|
|
|
|
public Series(@NonNull final String name, @NonNull final String unit, final int decimals, final int expectedEverySeconds, @NonNull final SeriesType type) {
|
|
this.name = name;
|
|
this.unit = unit;
|
|
this.decimals = decimals;
|
|
this.expectedEverySeconds = expectedEverySeconds;
|
|
this.type = type;
|
|
}
|
|
|
|
public void update(@NonNull final ZonedDateTime timestamp, final double value) {
|
|
if (this.last == null || this.last.isBefore(timestamp)) {
|
|
this.last = timestamp;
|
|
this.value = value;
|
|
}
|
|
}
|
|
|
|
}
|