From 6e11ef26679e0bc5abb69606b40ef8ee87752895 Mon Sep 17 00:00:00 2001 From: Martin Vseticka Date: Mon, 2 Apr 2018 18:46:39 +0200 Subject: [PATCH] Add getOptionalDecimal to FieldMap --- quickfixj-core/src/main/java/quickfix/FieldMap.java | 10 +++++++++- .../src/test/java/quickfix/FieldMapTest.java | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/quickfixj-core/src/main/java/quickfix/FieldMap.java b/quickfixj-core/src/main/java/quickfix/FieldMap.java index 6f5c9ef27..de0cd75ba 100644 --- a/quickfixj-core/src/main/java/quickfix/FieldMap.java +++ b/quickfixj-core/src/main/java/quickfix/FieldMap.java @@ -278,8 +278,16 @@ public double getDouble(int field) throws FieldNotFound { } public BigDecimal getDecimal(int field) throws FieldNotFound { + return getDecimalFromString(field, getString(field)); + } + + public Optional getOptionalDecimal(int field) { + return getOptionalString(field).map(s -> getDecimalFromString(field, s)); + } + + private BigDecimal getDecimalFromString(int field, String s) { try { - return DecimalConverter.convert(getString(field)); + return DecimalConverter.convert(s); } catch (final FieldConvertError e) { throw newIncorrectDataException(e, field); } diff --git a/quickfixj-core/src/test/java/quickfix/FieldMapTest.java b/quickfixj-core/src/test/java/quickfix/FieldMapTest.java index c03f2cf7d..9eb376a5c 100644 --- a/quickfixj-core/src/test/java/quickfix/FieldMapTest.java +++ b/quickfixj-core/src/test/java/quickfix/FieldMapTest.java @@ -1,5 +1,6 @@ package quickfix; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneOffset; @@ -101,6 +102,14 @@ public void testOptionalString() { assertFalse(map.getOptionalString(129).isPresent()); } + public void testOptionalDecimal() { + FieldMap map = new Message(); + map.setField(new DecimalField(44, new BigDecimal("1565.10"))); + Optional optValue = map.getOptionalDecimal(44); + assertTrue(optValue.isPresent()); + assertEquals(0, optValue.get().compareTo(new BigDecimal("1565.10"))); + assertFalse(map.getOptionalDecimal(6).isPresent()); + } private long epochMilliOfLocalDate(LocalDateTime localDateTime) { return localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();