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}