es.webbeta.serializer.TypeChecker   A
last analyzed

Complexity

Total Complexity 35

Size/Duplication

Total Lines 131
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 93
dl 0
loc 131
c 1
b 0
f 0
rs 9.6
wmc 35

19 Methods

Rating   Name   Duplication   Size   Complexity  
A isShort(T) 0 2 1
A isUnserializableObject(T) 0 9 1
A isString(T) 0 2 1
A isByte(T) 0 2 1
A isStringParseable(T) 0 2 1
A isDate(T) 0 2 1
F check(T,TypeCallback) 0 41 17
A isBigDecimal(T) 0 2 1
A isDouble(T) 0 2 1
A isBoolean(T) 0 2 1
A isIterable(T) 0 2 1
A isSerializableObject(T) 0 2 1
A isNumeric(T) 0 9 1
A isMap(T) 0 2 1
A isBigInteger(T) 0 2 1
A isFloat(T) 0 2 1
A isInteger(T) 0 2 1
A isLong(T) 0 2 1
A TypeChecker(SerializerMetadataProvider) 0 2 1
1
package es.webbeta.serializer;
2
3
import es.webbeta.serializer.base.SerializerMetadataProvider;
4
import es.webbeta.serializer.base.TypeCallback;
5
6
import java.io.IOException;
7
import java.math.BigDecimal;
8
import java.math.BigInteger;
9
import java.util.Date;
10
import java.util.Map;
11
import java.util.UUID;
12
13
public class TypeChecker {
14
15
    private SerializerMetadataProvider provider;
16
17
    public TypeChecker(SerializerMetadataProvider provider) {
18
        this.provider = provider;
19
    }
20
21
    public <T> Boolean isByte(T value) {
22
        return value instanceof Byte;
23
    }
24
25
    public <T> Boolean isShort(T value) {
26
        return value instanceof Short;
27
    }
28
29
    public <T> Boolean isInteger(T value) {
30
        return value instanceof Integer;
31
    }
32
33
    public <T> Boolean isBigInteger(T value) {
34
        return value instanceof BigInteger;
35
    }
36
37
    public <T> Boolean isLong(T value) {
38
        return value instanceof Long;
39
    }
40
41
    public <T> Boolean isFloat(T value) {
42
        return value instanceof Float;
43
    }
44
45
    public <T> Boolean isDouble(T value) {
46
        return value instanceof Double;
47
    }
48
49
    public <T> Boolean isBigDecimal(T value) {
50
        return value instanceof BigDecimal;
51
    }
52
53
    public <T> Boolean isNumeric(T value) {
54
        return isByte(value) ||
55
                isShort(value) ||
56
                isInteger(value) ||
57
                isBigInteger(value) ||
58
                isLong(value) ||
59
                isFloat(value) ||
60
                isDouble(value) ||
61
                isBigDecimal(value);
62
    }
63
64
    public <T> Boolean isString(T value) {
65
        return value instanceof String;
66
    }
67
68
    public <T> Boolean isStringParseable(T value) {
69
        return value instanceof Enum<?> || value instanceof UUID;
70
    }
71
72
    public <T> Boolean isBoolean(T value) {
73
        return value instanceof Boolean;
74
    }
75
76
    public <T> Boolean isDate(T value) {
77
        return value instanceof Date;
78
    }
79
80
    public <T> Boolean isSerializableObject(T value) {
81
        return !(value instanceof Iterable) && provider.canProvide(value.getClass());
82
    }
83
84
    public <T> Boolean isUnserializableObject(T value) {
85
        return !isNumeric(value) &&
86
                !isString(value) &&
87
                !isStringParseable(value) &&
88
                !isBoolean(value) &&
89
                !isDate(value) &&
90
                !isIterable(value) &&
91
                !isMap(value) &&
92
                !provider.canProvide(value.getClass());
93
    }
94
95
    public <T> Boolean isIterable(T value) {
96
        return value instanceof Iterable;
97
    }
98
99
    public <T> Boolean isMap(T value) {
100
        return value instanceof Map;
101
    }
102
103
    public <T> void check(T value, TypeCallback callback) throws IOException {
104
        if (isByte(value)) {
105
            callback.itsByte((Byte) value);
106
            callback.itsNumeric(value);
107
        } else if (isShort(value)) {
108
            callback.itsShort((Short) value);
109
            callback.itsNumeric(value);
110
        } else if (isInteger(value)) {
111
            callback.itsInteger((Integer) value);
112
            callback.itsNumeric(value);
113
        } else if (isBigInteger(value)) {
114
            callback.itsBigInteger((BigInteger) value);
115
            callback.itsNumeric(value);
116
        } else if (isLong(value)) {
117
            callback.itsLong((Long) value);
118
            callback.itsNumeric(value);
119
        } else if (isFloat(value)) {
120
            callback.itsFloat((Float) value);
121
            callback.itsNumeric(value);
122
        } else if (isDouble(value)) {
123
            callback.itsDouble((Double) value);
124
            callback.itsNumeric(value);
125
        } else if (isBigDecimal(value)) {
126
            callback.itsBigDecimal((BigDecimal) value);
127
            callback.itsNumeric(value);
128
        } else if (isString(value)) {
129
            callback.itsString((String) value);
130
        } else if (isStringParseable(value))
131
            callback.itsStringParseable(value);
132
        else if (isBoolean(value))
133
            callback.itsBoolean((Boolean) value);
134
        else if (isDate(value))
135
            callback.itsDate((Date) value);
136
        else if (isUnserializableObject(value))
137
            callback.itsUnserializableObject(value);
138
        else if (isSerializableObject(value))
139
            callback.itsSerializableObject(value);
140
        else if (isIterable(value))
141
            callback.itsIterable((Iterable<?>) value);
142
        else if (isMap(value))
143
            callback.itsMap((Map<?, ?>) value);
144
    }
145
146
}
147