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

com.decathlon.tzatziki.utils.Mapper Maven / Gradle / Ivy

The newest version!
package com.decathlon.tzatziki.utils;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.stream.Collectors;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Mapper {
    private static boolean convertDotPropertiesToObject = true;

    public static void shouldConvertDotPropertiesToObject(boolean shouldConvertDotPropertiesToObject) {
        convertDotPropertiesToObject = shouldConvertDotPropertiesToObject;
    }

    private static final MapperDelegate delegate = ServiceLoader.load(MapperDelegate.class)
            .findFirst()
            .orElseThrow();

    public static  E read(String content) {
        content = toYaml(content);
        return delegate.read(content);
    }

    public static  List readAsAListOf(String content, Class clazz) {
        content = toYaml(content);
        if (clazz == Type.class) clazz = (Class) Class.class;
        return delegate.readAsAListOf(content, clazz);
    }

    public static  E read(String content, Class clazz) {
        if (clazz == Type.class) clazz = (Class) Class.class;
        if (clazz == String.class) return (E) content;
        return read(content, (Type) clazz);
    }

    public static  E read(String content, Type type) {
        content = toYaml(content);
        return delegate.read(content, type);
    }

    public static String toJson(Object object) {
        return delegate.toJson(object);
    }

    public static String toNonDefaultJson(Object object) {
        return delegate.toNonDefaultJson(object);
    }

    public static String toYaml(Object object) {
        if (object instanceof String content && convertDotPropertiesToObject) {
            if (isList(content)) content = toYaml(delegate.read(content, List.class));
            else if (isJson(content)) content = toYaml(delegate.read(content, Map.class));
            content = dotNotationToYamlObject(content);
            object = content;
        }
        return delegate.toYaml(object);
    }

    private static String dotNotationToYamlObject(String content) {
        List lines = content.lines().collect(Collectors.toList());

        for (int idx = 0; idx < lines.size(); idx++) {
            String line;
            String matchOnlyIfNonRegexFlag = "(?![ \"']*\\?e)";
            String captureDotNotation = "(?>([ \\-]*))" + matchOnlyIfNonRegexFlag + "([^.:]+)\\.((?>[^:]+)(? characters = Set.of(c);
        for (int i = 0; i < text.length(); i++) {
            char charAt = text.charAt(i);
            if (charAt != ' ' && charAt != '\n') {
                return characters.contains(charAt);
            }
        }
        return false;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy