package com.safeluck.aykj.annotation; import com.safeluck.aykj.decoder.*; import java.lang.reflect.Field; import java.util.HashMap; /** * Created by zhouwei on 2016/12/1. */ public final class AnnotationRegister { static HashMap hashMap = new HashMap(); static { register(Int16.class,new Int16Coder()); register(Int32.class,new Int32Coder()); register(Int8.class,new ByteCoder()); register(GBK.class,new GBKStringDecoder()); register(Ascii.class,new GBKStringDecoder()); register(BitState.class,new BitStateCoder()); register(Hex.class,new DefaultHexCoder()); register(UTF8.class,new UTF8StringDecoder()); register(Bytes.class,new BytesCoder()); register(Message.class,new BinMessageCoder()); register(BcdDate.class,new BcdDateCoder()); register(BcdDateTime.class,new BcdDateTimeCoder()); register(Int16LE.class,new Int16LECoder()); register(Int32LE.class,new Int32LECoder()); } public static void register(Class annotation, IMessageCoder coder) { hashMap.put(annotation,coder); } public static IMessageCoder getCoder(Class annotation) { IMessageCoder decoder = (IMessageCoder)hashMap.get(annotation); if(decoder instanceof BaseDecoder) { BaseDecoder baseDecoder = (BaseDecoder)decoder; if(!baseDecoder.isSingleton) { try { decoder = decoder.getClass().newInstance(); } catch (Exception e) { throw new RuntimeException(e); } } } return decoder; } }