All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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