yy1717
2021-02-07 cea2a94fc97e79897cdfd217be8250c075974a1a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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;
    }
 
}