001package gu.dtalk;
002
003import static gu.dtalk.CommonConstant.*;
004
005import com.alibaba.fastjson.JSONObject;
006
007import net.gdface.utils.FaceUtilits;
008
009public class CommonUtils {
010
011        /**
012         * 返回响应通道名
013         * @param mac
014         * @return
015         */
016        public static String getAckChannel(String mac){
017                return mac + ACK_SUFFIX;
018        }
019        public static String getAckChannel(byte[] mac){
020                return getAckChannel(FaceUtilits.toHex(mac));
021        }
022        /**
023         * 生成连接频道名
024         * @param mac
025         * @return
026         */
027        public static String getConnChannel(String mac){
028                return mac + CONNECT_SUFFIX;
029        }
030        public static String getConnChannel(byte[] mac){
031                return getConnChannel(FaceUtilits.toHex(mac));
032        }
033        private static boolean hasField(Object resp,String name){
034                return resp instanceof JSONObject &&  ((JSONObject) resp).containsKey(name);
035        }
036        public static boolean isAck(Object resp){
037                return resp instanceof JSONObject &&  hasField((JSONObject) resp,ACK_FIELD_STATUS);
038        }
039        public static boolean isItem(Object resp){
040                return hasField(resp,ITEM_FIELD_NAME) 
041                                &&  hasField(resp,ITEM_FIELD_PATH) 
042                                && hasField(resp,ITEM_FIELD_CATALOG);
043        }       
044
045        public static CmdItem makeQuit(){
046                CmdItem item = new CmdItem();
047                item.setName(QUIT_NAME);
048                return item;
049        }
050        public static CmdItem makeBack(){
051                CmdItem item = new CmdItem();
052                item.setName(BACK_NAME);
053                return item;
054        }
055        public static boolean isBack(BaseItem item){
056                return (item instanceof BaseItem) && BACK_NAME.equals(item.getName());
057        }
058        public static boolean isRoot(JSONObject item){
059                return (item instanceof JSONObject) && "/".equals(item.getString(ITEM_FIELD_PATH));
060        }
061        public static boolean isRoot(BaseItem item){
062                return (item instanceof BaseItem) && null == item.getParent();
063        }
064        public static boolean isQuit(BaseItem item){
065                return (item instanceof BaseItem) && QUIT_NAME.equals(item.getName());
066        }
067        public static boolean isQuit(JSONObject item){
068                return (item instanceof JSONObject) && QUIT_NAME.equals(((JSONObject)item).getString(ITEM_FIELD_NAME));
069        }
070        public static boolean isQuit(Object item){
071                return isQuit((BaseItem) item)  || isQuit((JSONObject)item);
072        }
073        public static boolean isImage(JSONObject item){
074                return item == null ? false : OptionType.IMAGE.name().equals(item.getString(OPTION_FIELD_TYPE));
075        }
076}