Skip to content

Commit f6320cf

Browse files
tim-aeroroimenashe
andauthored
Added support for BigDecimal and BigInteger (#154)
* Added support for BigDecimal and BigInteger * Polish: Code format and reorder params --------- Co-authored-by: roimenashe <[email protected]>
1 parent a62ab12 commit f6320cf

File tree

4 files changed

+96
-0
lines changed

4 files changed

+96
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.aerospike.mapper.tools.mappers;
2+
3+
import com.aerospike.mapper.tools.TypeMapper;
4+
5+
import java.math.BigDecimal;
6+
7+
public class BigDecimalMapper extends TypeMapper {
8+
9+
@Override
10+
public Object toAerospikeFormat(Object value) {
11+
if (value == null) {
12+
return null;
13+
}
14+
BigDecimal bigInt = (BigDecimal) value;
15+
return bigInt.toString();
16+
}
17+
18+
@Override
19+
public Object fromAerospikeFormat(Object value) {
20+
if (value == null) {
21+
return null;
22+
}
23+
return new BigDecimal((String) value);
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.aerospike.mapper.tools.mappers;
2+
3+
import com.aerospike.mapper.tools.TypeMapper;
4+
5+
import java.math.BigInteger;
6+
7+
public class BigIntegerMapper extends TypeMapper {
8+
9+
@Override
10+
public Object toAerospikeFormat(Object value) {
11+
if (value == null) {
12+
return null;
13+
}
14+
BigInteger bigInt = (BigInteger) value;
15+
return bigInt.toString();
16+
}
17+
18+
@Override
19+
public Object fromAerospikeFormat(Object value) {
20+
if (value == null) {
21+
return null;
22+
}
23+
return new BigInteger((String) value);
24+
}
25+
}

src/main/java/com/aerospike/mapper/tools/utils/TypeUtils.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.lang.reflect.Method;
66
import java.lang.reflect.ParameterizedType;
77
import java.lang.reflect.Type;
8+
import java.math.BigDecimal;
9+
import java.math.BigInteger;
810
import java.time.Instant;
911
import java.time.LocalDate;
1012
import java.time.LocalDateTime;
@@ -32,6 +34,8 @@
3234
import com.aerospike.mapper.tools.configuration.EmbedConfig;
3335
import com.aerospike.mapper.tools.configuration.ReferenceConfig;
3436
import com.aerospike.mapper.tools.mappers.ArrayMapper;
37+
import com.aerospike.mapper.tools.mappers.BigDecimalMapper;
38+
import com.aerospike.mapper.tools.mappers.BigIntegerMapper;
3539
import com.aerospike.mapper.tools.mappers.BooleanMapper;
3640
import com.aerospike.mapper.tools.mappers.ByteMapper;
3741
import com.aerospike.mapper.tools.mappers.CharacterMapper;
@@ -94,6 +98,10 @@ private static TypeMapper getMapper(Class<?> clazz, AnnotatedType type, IBaseAer
9498
typeMapper = new LocalTimeMapper();
9599
} else if (Instant.class.isAssignableFrom(clazz)) {
96100
typeMapper = new InstantMapper();
101+
} else if (BigInteger.class.isAssignableFrom(clazz)) {
102+
typeMapper = new BigIntegerMapper();
103+
} else if (BigDecimal.class.isAssignableFrom(clazz)) {
104+
typeMapper = new BigDecimalMapper();
97105
} else if (Byte.class.isAssignableFrom(clazz) || Byte.TYPE.isAssignableFrom(clazz)) {
98106
typeMapper = new ByteMapper();
99107
} else if (Character.class.isAssignableFrom(clazz) || Character.TYPE.isAssignableFrom(clazz)) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.aerospike.mapper;
2+
3+
import com.aerospike.mapper.annotations.AerospikeKey;
4+
import com.aerospike.mapper.annotations.AerospikeRecord;
5+
import com.aerospike.mapper.tools.AeroMapper;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.math.BigDecimal;
12+
import java.math.BigInteger;
13+
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
16+
public class BigIntegerBigDecimalTest extends AeroMapperBaseTest {
17+
18+
@Data
19+
@AllArgsConstructor
20+
@NoArgsConstructor
21+
@AerospikeRecord(namespace = "test", set = "bigType")
22+
public static class BigTypes {
23+
@AerospikeKey
24+
public int id;
25+
public String name;
26+
public BigDecimal bigD;
27+
public BigInteger bigI;
28+
}
29+
30+
@Test
31+
public void runTest() {
32+
AeroMapper mapper = new AeroMapper.Builder(client).build();
33+
BigTypes types = new BigTypes(1, "test", new BigDecimal("123456789.123456789"), new BigInteger("12345678901234567890"));
34+
mapper.save(types);
35+
BigTypes readTypes = mapper.read(BigTypes.class, 1);
36+
assertEquals(types, readTypes);
37+
}
38+
}

0 commit comments

Comments
 (0)