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

com.iofairy.pattern.matcher.Null3Matcher Maven / Gradle / Ivy

Go to download

Functional Programming for Java 8+ and compatible with the modular system of Java 9+.

There is a newer version: 0.5.10
Show newest version
/*
 * Copyright (C) 2021 iofairy, 
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.iofairy.pattern.matcher;

import com.iofairy.lambda.R1;
import com.iofairy.lambda.RT1;
import com.iofairy.pattern.type.*;
import com.iofairy.tuple.*;

import java.util.Objects;


/**
 * Null3Matcher
 *
 * @since 0.2.0
 */
public class Null3Matcher implements NullMatcher {
    private final R msg;
    private final T1 value1;
    private final T2 value2;
    private final boolean isMatch;

    Null3Matcher(boolean isMatch, T1 value1, T2 value2, R msg) {
        this.isMatch = isMatch;
        this.value1 = value1;
        this.value2 = value2;
        this.msg = msg;
    }


    public  Null4Matcher whenV(V matchValue, R1 computeValue, R1 action, R1, ? extends R> msgAction) {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            if (matchValue == null) {
                return new Null4Matcher<>(true, value1, value2, null, msg);
            }

            NV newValue = computeValue.$(matchValue);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenV(V matchValue, R1 computeValue, R1, ? extends R> msgAction) {
        return whenV(matchValue, computeValue, null, msgAction);
    }

    public  Null4Matcher whenV(V matchValue, R1 computeValue, R1 action, R msg) {
        Objects.requireNonNull(computeValue);
        if (!isMatch) {
            if (matchValue == null) {
                return new Null4Matcher<>(true, value1, value2, null, msg);
            }

            NV newValue = computeValue.$(matchValue);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenV(V matchValue, R1 computeValue, R msg) {
        return whenV(matchValue, computeValue, null, msg);
    }

    public  Null4Matcher whenW(PatternNull1 patternNull, R1 computeValue, R1 action, R1, ? extends R> msgAction) {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            NV newValue = computeValue.$(value1);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenW(PatternNull1 patternNull, R1 computeValue, R1, ? extends R> msgAction) {
        return whenW(patternNull, computeValue, null, msgAction);
    }

    public  Null4Matcher whenW(PatternNull1 patternNull, R1 computeValue, R1 action, R msg) {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        if (!isMatch) {
            NV newValue = computeValue.$(value1);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenW(PatternNull1 patternNull, R1 computeValue, R msg) {
        return whenW(patternNull, computeValue, null, msg);
    }

    public  Null4Matcher whenW(PatternNull2 patternNull, R1 computeValue, R1 action, R1, ? extends R> msgAction) {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            NV newValue = computeValue.$(value2);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenW(PatternNull2 patternNull, R1 computeValue, R1, ? extends R> msgAction) {
        return whenW(patternNull, computeValue, null, msgAction);
    }

    public  Null4Matcher whenW(PatternNull2 patternNull, R1 computeValue, R1 action, R msg) {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        if (!isMatch) {
            NV newValue = computeValue.$(value2);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher whenW(PatternNull2 patternNull, R1 computeValue, R msg) {
        return whenW(patternNull, computeValue, null, msg);
    }


    /*
     * ########################################################################
     * ************************************************************************
     * ################   NullMatcher with throwing exception   ###############
     * ************************************************************************
     * ########################################################################
     */

    public  Null4Matcher withV(V matchValue, RT1 computeValue, RT1 action, RT1, ? extends R, E> msgAction) throws E {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            if (matchValue == null) {
                return new Null4Matcher<>(true, value1, value2, null, msg);
            }

            NV newValue = computeValue.$(matchValue);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withV(V matchValue, RT1 computeValue, RT1, ? extends R, E> msgAction) throws E {
        return withV(matchValue, computeValue, null, msgAction);
    }

    public  Null4Matcher withV(V matchValue, RT1 computeValue, RT1 action, R msg) throws E {
        Objects.requireNonNull(computeValue);
        if (!isMatch) {
            if (matchValue == null) {
                return new Null4Matcher<>(true, value1, value2, null, msg);
            }

            NV newValue = computeValue.$(matchValue);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withV(V matchValue, RT1 computeValue, R msg) throws E {
        return withV(matchValue, computeValue, null, msg);
    }

    public  Null4Matcher withW(PatternNull1 patternNull, RT1 computeValue, RT1 action, RT1, ? extends R, E> msgAction) throws E {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            NV newValue = computeValue.$(value1);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withW(PatternNull1 patternNull, RT1 computeValue, RT1, ? extends R, E> msgAction) throws E {
        return withW(patternNull, computeValue, null, msgAction);
    }

    public  Null4Matcher withW(PatternNull1 patternNull, RT1 computeValue, RT1 action, R msg) throws E {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        if (!isMatch) {
            NV newValue = computeValue.$(value1);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withW(PatternNull1 patternNull, RT1 computeValue, R msg) throws E {
        return withW(patternNull, computeValue, null, msg);
    }

    public  Null4Matcher withW(PatternNull2 patternNull, RT1 computeValue, RT1 action, RT1, ? extends R, E> msgAction) throws E {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        Objects.requireNonNull(msgAction);
        if (!isMatch) {
            R msg = msgAction.$(Tuple.of(value1, value2));
            NV newValue = computeValue.$(value2);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withW(PatternNull2 patternNull, RT1 computeValue, RT1, ? extends R, E> msgAction) throws E {
        return withW(patternNull, computeValue, null, msgAction);
    }

    public  Null4Matcher withW(PatternNull2 patternNull, RT1 computeValue, RT1 action, R msg) throws E {
        Objects.requireNonNull(computeValue);
        Objects.requireNonNull(patternNull);
        if (!isMatch) {
            NV newValue = computeValue.$(value2);
            boolean doBreak = newValue == null || (action != null && action.$(newValue));
            R localMsg = doBreak ? msg : null;
            return new Null4Matcher<>(doBreak, value1, value2, newValue, localMsg);
        }
        return new Null4Matcher<>(true, value1, value2, null, this.msg);
    }

    public  Null4Matcher withW(PatternNull2 patternNull, RT1 computeValue, R msg) throws E {
        return withW(patternNull, computeValue, null, msg);
    }


    public Tuple3 orElse(R msg) {
        R finalMsg = !isMatch ? msg : this.msg;
        return Tuple.of(value1, value2, finalMsg);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy