프로그램/Java

java enum tree

milktea.kang 2021. 5. 14. 15:00

자식 enum 이 이런 것들이 있다고 치고

public enum EnumDataTableName {
    Map_Building_Info {
        @Override public String getCode() { return "TI_SPBD_BULD"; }
        @Override public String getDesc() { return "건물정보"; }
    }
    ,Map_Building_Group {
        @Override public String getCode() { return "TI_SPBD_EQB"; }
        @Override public String getDesc() { return "건물군정보"; }
    }
    ,Map_Road_Info {
        @Override public String getCode() { return "TI_SPRD_MANAGE"; }
        @Override public String getDesc() { return "도로구간"; }
    }
    ,Map_Road_Detail {
        @Override public String getCode() { return "TI_SPRD_RW"; }
        @Override public String getDesc() { return "실폭도로"; }
    }
    ,Map_Road_Detail_Split {
        @Override public String getCode() { return "TI_SPRD_INTRVL"; }
        @Override public String getDesc() { return "기초구간"; }
    }
    ,Map_Building_Gate {
        @Override public String getCode() { return "TI_SPBD_ENTRC"; }
        @Override public String getDesc() { return "출입구"; }
    }
    ,Addr_Building_Info {
        @Override public String getCode() { return "TI_SPBD_BULD"; }
        @Override public String getDesc() { return "건물정보"; }
    }
    ,Addr_Building_Jibon {
        @Override public String getCode() { return "TI_SCCO_MVMN"; }
        @Override public String getDesc() { return "건물지번"; }
    }
    ,Addr_Road_Code {
        @Override public String getCode() { return "TI_SPRD_STRET"; }
        @Override public String getDesc() { return "도로명코드"; }
    }
    ,Addr_Juso_Road_Code {
        @Override public String getCode() { return "MATCHING_ROAD"; }
        @Override public String getDesc() { return "도로명코드"; }
    }
    ,Addr_Juso_Road_Addr {
        @Override public String getCode() { return "MATCHING_JUSO"; }
        @Override public String getDesc() { return "도로명주소"; }
    }
    ,Addr_Juso_Jibon {
        @Override public String getCode() { return "MATCHING_JIBUN"; }
        @Override public String getDesc() { return "지번주소"; }
    }
    ,Addr_Juso_Add_Info {
        @Override public String getCode() { return "MATCHING_ADDINFO"; }
        @Override public String getDesc() { return "부가정보"; }
    }
    ,Addr_Road_Split {
        @Override public String getCode() { return "TH_SPRD_INTRVL_POSITION"; }
        @Override public String getDesc() { return "기초번호위치정보"; }
    }
    ,Addr_Navi_Building {
        @Override public String getCode() { return "MATCH_ENTRC_BULD"; }
        @Override public String getDesc() { return "내비게이션 건물정보"; }
    }
    ,Addr_Navi_Jibon {
        @Override public String getCode() { return "MATCH_ENTRC_JIBUN"; }
        @Override public String getDesc() { return "내비게이션 지번정보"; }
    }
    ,Addr_Navi_Gate_Extra {
        @Override public String getCode() { return "TH_SGCO_ADR_ENTRC"; }
        @Override public String getDesc() { return "내비게이션 보조출입구"; }
    }
    ;

    public String getCode() {
        throw new AbstractMethodError();
    }
    public String getDesc() {
        throw new AbstractMethodError();
    }

    public static EnumDataTableName findByCode(String code) {
        if(code != null) {
            for(EnumDataTableName entity : EnumDataTableName.values()) {
                if(entity.getCode().equals(code)) {
                    return entity;
                }
            }
        }
        return Addr_Road_Code;
    }
}

 

부모 enum 을 선택하면 하위 enum 을 구할 수 있다

예를 들면 콤보박스1을 선택했을 때 콤보박스2의 내용이 바뀌어야 하는 시나리오?

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@SuppressWarnings("unchecked")
public enum EnumDataCode {
    D001000("001000","JUSUBU","지도정보(건물)",Arrays.asList(EnumDataTableName.Map_Building_Info))
    ,D002000("002000","JUSUBC","지도정보(건물군)",Arrays.asList(EnumDataTableName.Map_Building_Group))
    ,D003000("003000","JUSULS","지도정보(도로구간)",Arrays.asList(EnumDataTableName.Map_Road_Info))
    ,D004000("004000","JUSURD","지도정보(실폭도로/기초구간)",Arrays.asList(EnumDataTableName.Map_Road_Detail,EnumDataTableName.Map_Road_Detail_Split))
    ,D005000("005000","JUSUBD","지도정보(출입구)",Arrays.asList(EnumDataTableName.Map_Building_Gate))
    ,Building("009000","JUSUBM","건물DB(대표지번+도로명주소, 관련지번)",Arrays.asList(EnumDataTableName.Addr_Building_Info,EnumDataTableName.Addr_Building_Jibon))
    ,Road_Code("009003","JUSUZC","도로명코드",Arrays.asList(EnumDataTableName.Addr_Road_Code))
    ,Addr("009004","JUSUMT","주소DB(도로명코드, 주소, 지번, 부가정보)",Arrays.asList(EnumDataTableName.Addr_Juso_Road_Code,EnumDataTableName.Addr_Juso_Road_Addr,EnumDataTableName.Addr_Juso_Jibon,EnumDataTableName.Addr_Juso_Add_Info))
    ,Road_Split("009021","JUSUIP","기초번호 위치정보DB",Arrays.asList(EnumDataTableName.Addr_Road_Split))
    ,Navi("009011","JUSUPE","내비게이션(건물+지번+보조출입구)",Arrays.asList(EnumDataTableName.Addr_Navi_Building,EnumDataTableName.Addr_Navi_Jibon,EnumDataTableName.Addr_Navi_Gate_Extra))
    ,Empty("000000","empty","empty",Collections.EMPTY_LIST)
    ;

    private String code;
    private String codeDocu;
    private String desc;
    private List<EnumDataTableName> listEnumDataTableName;

    EnumDataCode(String code,String codeDocu,String desc,List<EnumDataTableName> listEnumDataTableName){
        this.code = code;
        this.codeDocu = codeDocu;
        this.desc = desc;
        this.listEnumDataTableName = listEnumDataTableName;
    }
    
    public String getCode() {
        return this.code;
    }
    public String getCodeDocu() {
        return this.codeDocu;
    }
    public String getDesc() {
        return this.desc;
    }
    
    public boolean hasTableName(EnumDataTableName enumDataTableName) {
        return listEnumDataTableName.stream()
                .anyMatch(tableName -> tableName == enumDataTableName);
    }

    public static EnumDataCode findByEnumTableName(EnumDataTableName enumDataTableName) {
        return Arrays.stream(EnumDataCode.values())
                .filter(enumDataCode -> enumDataCode.hasTableName(enumDataTableName))
                .findAny()
                .orElse(Empty);
    }
    
    public static EnumDataCode findByCode(String code) {
        return Arrays.stream(EnumDataCode.values())
                .filter(enumDataCode -> enumDataCode.getCode().equals(code))
                .findFirst()
                .orElse(Empty);
    }
}

'프로그램 > Java' 카테고리의 다른 글

logback 설정 일부  (0) 2021.05.14
spring boot mongo query  (0) 2021.05.14
spring boot mongodb  (0) 2021.05.14
좌표계 변환  (0) 2021.05.14
jar/war 파일을 직접 실행할 수 있게 만드는 옵션  (0) 2021.05.14