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

kr.jm.metric.config.mutator.field.FieldMeta Maven / Gradle / Ivy

There is a newer version: 0.2.7.3
Show newest version
package kr.jm.metric.config.mutator.field;

import kr.jm.utils.datastructure.JMMap;
import kr.jm.utils.exception.JMExceptionManager;
import kr.jm.utils.helper.JMOptional;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@Slf4j
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class FieldMeta {

    @Getter
    protected Map unit;

    private Map fieldMetaMap;

    public FieldMeta(Map unit) {
        this.unit = unit;
    }

    synchronized public Map extractFieldMetaMap() {
        return Objects.requireNonNullElseGet(this.fieldMetaMap,
                () -> this.fieldMetaMap = buildFlatMap(new HashMap<>()));
    }

    private Map buildFlatMap(Map flatMap) {
        buildFlatMap(flatMap, "unit", unit);
        return flatMap;
    }

    private void buildFlatMap(Map flatMap,
            String field, Map nestedMap) {
        JMOptional.getOptional(nestedMap).map(map -> removedNullMap(field, map))
                .ifPresent(map -> flatMap.put(field, map));
    }

    private Map removedNullMap(String field, Map map) {
        return JMMap.newFilteredChangedValueWithEntryMap(map, entry ->
                        checkNull(field, entry.getKey(), entry.getValue()),
                Map.Entry::getValue);
    }

    private boolean checkNull(String field, String key, Object value) {
        return Objects.nonNull(value) || JMExceptionManager
                .handleExceptionAndReturnFalse(log,
                        new NullPointerException("value"), "checkNull", field,
                        key, null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy