001package gu.dtalk; 002 003import com.alibaba.fastjson.parser.ParserConfig; 004import com.alibaba.fastjson.util.TypeUtils; 005import static com.google.common.base.Preconditions.*; 006import static gu.dtalk.CommonConstant.*; 007import java.util.Map; 008 009/** 010 * 菜单选项类型 011 * @author guyadong 012 * 013 */ 014public enum ItemType { 015 /** 参数类型 */OPTION, 016 /** 命令 */CMD, 017 /** 菜单*/MENU; 018 /** 019 * @param jsonObject 020 * @return {@code jsonObject}反序列化为{@link BaseItem}实例 021 * @throws IllegalArgumentException 反序列化失败 022 */ 023 public static final BaseItem parseItem(Map<String,Object> jsonObject) { 024 ItemType catalog =TypeUtils.castToEnum( 025 checkNotNull(jsonObject.get(ITEM_FIELD_CATALOG),"NOT FOUND %s field",ITEM_FIELD_CATALOG), 026 ItemType.class, 027 ParserConfig.getGlobalInstance()); 028 switch(catalog){ 029 case OPTION: 030 return OptionType.parseOption(jsonObject); 031 case CMD: 032 return TypeUtils.castToJavaBean(jsonObject, CmdItem.class); 033 case MENU: 034 return TypeUtils.castToJavaBean(jsonObject, MenuItem.class); 035 default: 036 throw new IllegalArgumentException("UNSUPPORTED CATALOG: " + catalog); 037 } 038 } 039}