UserRole.java

package org.darkroomlibrary.domain.type;

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

public enum UserRole {
    SUPER_ADMIN(0, "超级管理员", true),
    ADMIN(1, "管理员", true),
    READER(2, "读者", false),
    ACQUISITIONS(3, "采购员", false),
    LOGISTICS(4, "物流员", false);

    private static final Map<Integer, UserRole> BY_CODE = Arrays.stream(values())
            .collect(Collectors.toUnmodifiableMap(UserRole::code, Function.identity()));
    private static final Map<String, UserRole> BY_NAME = Arrays.stream(values())
            .collect(Collectors.toUnmodifiableMap(UserRole::displayName, Function.identity()));

    private final int code;
    private final String displayName;
    private final boolean administrator;

    UserRole(int code, String displayName, boolean administrator) {
        this.code = code;
        this.displayName = displayName;
        this.administrator = administrator;
    }

    public Integer code() {
        return code;
    }

    public String displayName() {
        return displayName;
    }

    public boolean isAdministrator() {
        return administrator;
    }

    public static Optional<UserRole> fromCode(Integer code) {
        return Optional.ofNullable(code).map(BY_CODE::get);
    }

    public static String displayNameOf(Integer code) {
        return fromCode(code).map(UserRole::displayName).orElse(null);
    }

    public static Integer codeOf(String displayName) {
        UserRole role = BY_NAME.get(displayName);
        return role == null ? null : role.code();
    }
}