113 lines
2.6 KiB
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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|