ActionIdEnum.java

package com.mycim.valueobject.consts;

import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;

import java.util.*;


/**
 * @author Qiansheng.Wang
 * @since 2020-02-28
 */
public enum ActionIdEnum {

    APPROVE(1, "Approve"),

    REJECT(2, "Reject"),

    YES(3, "Yes"),

    NO(4, "No"),

    CONFIRM(5, "Confirm"),

    SKIP(6, "Skip"),

    DEFAULT(7, "Default");

    private Integer sequence;

    private String description;

    private ActionIdEnum(Integer sequence, String desc) {
        this.sequence = sequence;
        this.description = desc;
    }

    /**
     * Convert the {@code ActionIdEnum} to {@code List<Map<String, String>>} sort by {@code sequence}
     * <p>
     * Key is element string, value is element description
     *
     * @return {"key": "element.toString", "value": "element.description", "sequence": "element.sequence"}
     */
    public static List<Map<String, String>> toMapList() {
        List<Map<String, String>> list = new ArrayList<>();

        for (ActionIdEnum element : ActionIdEnum.values()) {
            Map<String, String> map = new HashMap<>();
            map.put("key", element.toString());
            map.put("value", element.getDescription());
            map.put("sequence", StringUtils.toString(element.getSequence()));
            list.add(map);
        }

        Collections.sort(list, new Comparator<Map<String, String>>() {

            @Override
            public int compare(Map<String, String> o1, Map<String, String> o2) {
                int o1Seq = MapUtils.getIntValue(o1, "sequence");
                int o2Seq = MapUtils.getIntValue(o2, "sequence");

                return o1Seq - o2Seq;
            }
        });

        return list;
    }

    public static Boolean allowsOperation(String btnName) {
        return StringUtils.equals(ActionIdEnum.APPROVE.toString(), btnName) ||
                StringUtils.equals(ActionIdEnum.YES.toString(), btnName) ||
                StringUtils.equals(ActionIdEnum.CONFIRM.toString(), btnName);
    }

    public Integer getSequence() {
        return sequence;
    }

    public String getDescription() {
        return description;
    }
}