
com.fluxtion.runtime.dataflow.helpers.DefaultValue Maven / Gradle / Ivy
package com.fluxtion.runtime.dataflow.helpers;
import com.fluxtion.runtime.annotations.builder.SepNode;
import com.fluxtion.runtime.partition.LambdaReflection.SerializableSupplier;
import com.fluxtion.runtime.dataflow.DefaultValueSupplier;
import com.fluxtion.runtime.dataflow.Stateful;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class DefaultValue implements DefaultValueSupplier, Stateful {
@SepNode
private final T defaultValue;
public DefaultValue(T defaultValue) {
this.defaultValue = defaultValue;
}
public T getOrDefault(T input) {
return input == null ? defaultValue : input;
}
@Override
public T reset() {
return defaultValue;
}
public static class DefaultValueFromSupplier implements DefaultValueSupplier, Stateful {
private final SerializableSupplier defaultSupplier;
// @SepNode
private transient final T defaultValue;
public DefaultValueFromSupplier(SerializableSupplier defaultSupplier) {
this.defaultSupplier = defaultSupplier;
this.defaultValue = defaultSupplier.get();
}
public T getOrDefault(T input) {
return input == null ? defaultValue : input;
}
@Override
public T reset() {
return defaultValue;
}
}
public static class DefaultInt implements DefaultValueSupplier, Stateful {
private final int defaultValue;
private boolean inputUpdatedAtLeastOnce;
public DefaultInt(int defaultValue) {
this.defaultValue = defaultValue;
}
public int getOrDefault(int input) {
inputUpdatedAtLeastOnce |= input != 0;
if (inputUpdatedAtLeastOnce) {
return input;
}
return defaultValue;
}
@Override
public Integer reset() {
inputUpdatedAtLeastOnce = false;
return defaultValue;
}
}
public static class DefaultDouble implements DefaultValueSupplier, Stateful {
private final double defaultValue;
private boolean inputUpdatedAtLeastOnce;
public DefaultDouble(double defaultValue) {
this.defaultValue = defaultValue;
}
public double getOrDefault(double input) {
inputUpdatedAtLeastOnce |= input != 0;
if (inputUpdatedAtLeastOnce) {
return input;
}
return defaultValue;
}
@Override
public Double reset() {
inputUpdatedAtLeastOnce = false;
return defaultValue;
}
}
public static class DefaultLong implements DefaultValueSupplier, Stateful {
private final long defaultValue;
private boolean inputUpdatedAtLeastOnce;
public DefaultLong(long defaultValue) {
this.defaultValue = defaultValue;
}
public long getOrDefault(long input) {
inputUpdatedAtLeastOnce |= input != 0;
if (inputUpdatedAtLeastOnce) {
return input;
}
return defaultValue;
}
@Override
public Long reset() {
inputUpdatedAtLeastOnce = false;
return defaultValue;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy