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

com.moon.data.registry.LayerEnum Maven / Gradle / Ivy

package com.moon.data.registry;


import com.moon.core.enums.Level;
import com.moon.data.accessor.BaseAccessor;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * @author moonsky
 */
public enum LayerEnum implements Function {
    // dao 数据库层
    REPOSITORY(Level.LOWEST),
    MAPPER(Level.LOWEST),
    DAO(Level.LOWEST),

    // synchronizer 同步器
    SYNCHRONIZER(Level.L1),

    // manager 管理
    MANAGER(Level.L4),

    // service 业务服务
    SERVICE(Level.L7),

    // controller web 接口
    CONTROLLER(Level.HIGHEST),
    ;

    private final Level level;

    private final Map cached = new HashMap<>();

    private final static class Values {

        private final static LayerEnum[] ALL = LayerEnum.values();

        static {
            Arrays.sort(ALL, Comparator.comparing(LayerEnum::getLevel).thenComparing(o -> o));
        }
    }

    LayerEnum(Level level) { this.level = level; }

    public void registry(Class domainClass, BaseAccessor accessor) { cached.put(domainClass, accessor); }

    Level getLevel() { return level; }

    public BaseAccessor get(Class domainClass) { return apply(domainClass); }

    @Override
    public BaseAccessor apply(Class domainClass) { return cached.get(domainClass); }

    static void forEachReversed(Predicate consumer) {
        final LayerEnum[] layers = Values.ALL;
        for (int i = layers.length - 1; i > -1; i--) {
            if (!consumer.test(layers[i])) {
                return;
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy