silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/java/io/horizon/fn/HFunction.java

Summary

Maintainability
A
2 hrs
Test Coverage
package io.horizon.fn;

import io.horizon.exception.AbstractException;
import io.horizon.exception.ProgramException;
import io.horizon.specification.uca.HLogger;

import java.util.Objects;
import java.util.function.Function;

/**
 * @author lang : 2023/4/28
 */
class HFunction {
    private HFunction() {
    }

    static <T, R> R jvmAt(final R defaultValue, final ErrorFunction<T, R> function, final HLogger logger) {
        try {
            final R ret = function.apply(null);
            return Objects.isNull(ret) ? defaultValue : ret;
        } catch (final AbstractException ex) {
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            // 自定义异常
            throw ex;
        } catch (final Throwable ex) {
            // 环境变量开启时打印异常堆栈
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            ex.printStackTrace();
            return defaultValue;
        }
    }

    static <T, R> R bugAt(final R defaultValue, final ProgramFunction<T, R> function,
                          final HLogger logger) throws ProgramException {
        try {
            final R ret = function.apply(null);
            return Objects.isNull(ret) ? defaultValue : ret;
        } catch (final ProgramException ex) {
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            // 日志记录器追加
            return defaultValue;
        } catch (final Throwable ex) {
            // 环境变量开启时打印异常堆栈
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            ex.printStackTrace();
            return defaultValue;
        }
    }

    static <T, R> R failAt(final R defaultValue, final ExceptionFunction<T, R> function, final HLogger logger) {
        try {
            final R ret = function.apply(null);
            return Objects.isNull(ret) ? defaultValue : ret;
        } catch (final AbstractException ex) {
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            // 自定义异常
            throw ex;
        } catch (final Exception ex) {
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            ex.printStackTrace();
            // 日志记录器追加
            return defaultValue;
        } catch (final Throwable ex) {
            // 环境变量开启时打印异常堆栈
            if (Objects.nonNull(logger)) {
                logger.fatal(ex);
            }
            ex.printStackTrace();
            return defaultValue;
        }
    }

    static <T, R> R runAt(final R defaultValue, final Function<T, R> function) {
        final R ret = function.apply(null);
        return Objects.isNull(ret) ? defaultValue : ret;
    }
}