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

com.moon.runner.core.GetThree Maven / Gradle / Ivy

package com.moon.runner.core;

import java.util.Objects;

/**
 * @author moonsky
 */
public class GetThree implements AsGetter {

    private final AsRunner assertRunner;
    private final AsRunner falseRunner;
    private final AsRunner trueRunner;

    public GetThree(AsRunner assertRunner, AsRunner trueRunner, AsRunner falseRunner) {
        this.assertRunner = assertRunner;
        this.falseRunner = falseRunner;
        this.trueRunner = trueRunner;
    }

    @Override
    public Object run(Object data) {
        return assertRunner.run(data) ? trueRunner.run(data) : falseRunner.run(data);
    }

    static class Builder {
        private final AsRunner assertRunner;
        private AsRunner trueRunner;
        private AsRunner falseRunner;

        public Builder(AsRunner assertRunner) { this.assertRunner = Objects.requireNonNull(assertRunner); }

        public Builder setTrueRunner(AsRunner trueRunner) {
            this.trueRunner = Objects.requireNonNull(trueRunner);
            return this;
        }

        public Builder setFalseRunner(AsRunner falseRunner) {
            this.falseRunner = Objects.requireNonNull(falseRunner);
            return this;
        }

        public AsRunner build() {
            if (assertRunner.isConst()) {
                if (assertRunner instanceof DataBool) {
                    return assertRunner == DataConst.TRUE
                        ? Objects.requireNonNull(trueRunner)
                        : Objects.requireNonNull(falseRunner);
                }
                throw new IllegalArgumentException("can not cast to boolean of value: " + assertRunner.toString());
            } else {
                return new GetThree(assertRunner, trueRunner, falseRunner);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy