Data2025/src/main/java/de/ph87/data/topic/query/TopicQuery.java

113 lines
2.6 KiB
Java

package de.ph87.data.topic.query;
import de.ph87.data.series.Series;
import jakarta.annotation.Nullable;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.ManyToOne;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.ToString;
@Getter
@ToString
@Embeddable
@NoArgsConstructor
public class TopicQuery {
@Nullable
@ManyToOne
private Series series;
@NonNull
@Column(nullable = false)
private String valueQuery = "";
@NonNull
@Column(nullable = false)
private String beginQuery = "";
@NonNull
@Column(nullable = false)
private String terminatedQuery = "";
@NonNull
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private TopicQuery.Function function = Function.NONE;
@Column(nullable = false)
private double factor;
public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery
) {
this(series, valueQuery, "", "");
}
public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery,
final double factor
) {
this(series, valueQuery, factor, Function.NONE, "", "");
}
public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery,
final double factor,
@NonNull final TopicQuery.Function function
) {
this(series, valueQuery, factor, function, "", "");
}
public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery,
@NonNull final String beginQuery,
@NonNull final String terminatedQuery
) {
this(series, valueQuery, 1, Function.NONE, beginQuery, terminatedQuery);
}
public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery,
final double factor,
@NonNull final TopicQuery.Function function,
@NonNull final String beginQuery,
@NonNull final String terminatedQuery
) {
this.series = series;
this.valueQuery = valueQuery;
this.beginQuery = beginQuery;
this.terminatedQuery = terminatedQuery;
this.function = function;
this.factor = factor;
}
public enum Function {
NONE(v -> v),
ONLY_POSITIVE(v -> v > 0 ? v : 0),
ONLY_NEGATIVE_BUT_NEGATE(v -> v < 0 ? -v : 0),
;
private final java.util.function.Function<Double, Double> function;
Function(@NonNull java.util.function.Function<Double, Double> function) {
this.function = function;
}
public double apply(final double value) {
return function.apply(value);
}
}
}