silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/java/io/horizon/util/TV.java

Summary

Maintainability
D
1 day
Test Coverage
package io.horizon.util;

import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author lang : 2023/4/28
 */
class TV {


    static <T> Set<String> vStringSet(final Collection<T> list, final Function<T, String> supplier) {
        return list.stream()
            .filter(Objects::nonNull)
            .map(supplier)
            .filter(HUt::isNotNil)
            .collect(Collectors.toSet());
    }

    static Set<String> vStringSet(final JsonArray array, final String field) {
        Set<String> set = new HashSet<>();
        if (Objects.nonNull(array)) {
            set = array.stream()
                .filter(item -> item instanceof JsonObject)
                .map(item -> (JsonObject) item)
                .filter(item -> item.getValue(field) instanceof String)
                .map(item -> item.getString(field))
                .filter(HUt::isNotNil)
                .collect(Collectors.toSet());
        }
        return set;
    }

    static String vString(final JsonArray array, final String field) {
        final Set<String> set = new HashSet<>();
        HUt.itJArray(array).map(json -> json.getString(field))
            .filter(Objects::nonNull)
            .forEach(set::add);
        if (1 == set.size()) {
            return set.iterator().next();
        } else {
            return null;
        }
    }

    static Set<JsonArray> vArraySet(final JsonArray array, final String field) {
        Set<JsonArray> set = new HashSet<>();
        if (Objects.nonNull(array)) {
            set = array.stream()
                .filter(item -> item instanceof JsonObject)
                .map(item -> (JsonObject) item)
                .filter(item -> item.getValue(field) instanceof JsonArray)
                .map(item -> item.getJsonArray(field))
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
        }
        return set;
    }

    static String vString(final JsonObject json, final String field, final String defaultValue) {
        final JsonObject inputJ = HJson.valueJObject(json, false);
        final Object valueS = inputJ.getValue(field, defaultValue);
        return Objects.isNull(valueS) ? null : valueS.toString();
    }

    static Integer vInt(final JsonObject json, final String field, final Integer defaultInt) {
        final String literal = vString(json, field, String.valueOf(defaultInt));
        if (Objects.isNull(literal) || !TNumeric.isInteger(literal)) {
            return defaultInt;
        }
        return Integer.valueOf(literal);
    }

    static Class<?> vClass(final JsonObject json, final String field, final Class<?> defaultValue) {
        final String clsStr = vString(json, field, null);
        if (TIs.isNil(clsStr)) {
            return defaultValue;
        }
        return HUt.clazz(clsStr, defaultValue);
    }

    static Class<?> vClass(final JsonObject json, final String field,
                           final Class<?> interfaceCls,
                           final Class<?> defaultValue) {
        final String clsStr = vString(json, field, null);
        final Class<?> implCls;
        if (TIs.isNil(clsStr)) {
            implCls = defaultValue;
        } else {
            implCls = HUt.clazz(clsStr, defaultValue);
        }
        if (Objects.isNull(implCls)) {
            return null;
        }
        if (HUt.isImplement(implCls, interfaceCls)) {
            return implCls;
        } else {
            return null;
        }
    }

    @SuppressWarnings("unchecked")
    static <T> T vT(final JsonObject item, final String field, final Class<T> clazz) {
        if (TIs.isNil(item)) {
            return null;
        } else {
            final Object value = item.getValue(field);
            if (Objects.isNull(value)) {
                return null;
            } else {
                if (clazz == value.getClass()) {
                    return (T) value;
                } else {
                    return null;
                }
            }
        }
    }

    @SuppressWarnings("unchecked")
    static <T> T vT(final String literal, final Class<?> type) {
        if (TIs.isNil(literal)) {
            return null;
        }
        if (type == Integer.class || type == int.class) {
            return (T) Integer.valueOf(literal);
        } else if (type == Long.class || type == long.class) {
            return (T) Long.valueOf(literal);
        } else if (type == Float.class || type == float.class) {
            return (T) Float.valueOf(literal);
        } else if (type == Double.class || type == double.class) {
            return (T) Double.valueOf(literal);
        } else if (type == Boolean.class || type == boolean.class) {
            return (T) Boolean.valueOf(literal);
        } else if (type == String.class) {
            return (T) literal;
        } else if (type == BigDecimal.class) {
            return (T) new BigDecimal(literal);
        } else if (type == BigInteger.class) {
            return (T) new BigInteger(literal);
        } else if (type == LocalDate.class) {
            return (T) LocalDate.parse(literal);
        } else if (type == LocalDateTime.class) {
            return (T) LocalDateTime.parse(literal);
        } else if (type == LocalTime.class) {
            return (T) LocalTime.parse(literal);
        } else if (type == JsonArray.class) {
            return (T) HJson.toJArray(literal);
        } else if (type == JsonObject.class) {
            return (T) HJson.toJObject(literal);
        } else if (type == List.class || type == ArrayList.class) {
            return (T) Arrays.asList(literal.split("\\s*,\\s*"));
        } else if (type == Set.class || type == HashSet.class) {
            return (T) new HashSet<>(Arrays.asList(literal.split("\\s*,\\s*")));
        } else if (type == String[].class) {
            return (T) Arrays.stream(literal.split("\\s*,\\s*")).toArray(String[]::new);
        } else {
            throw new IllegalArgumentException("Unsupported type: " + type);
        }
    }
}