diff --git a/quickfixj-core/src/main/java/quickfix/FieldMap.java b/quickfixj-core/src/main/java/quickfix/FieldMap.java index f7edfe408..5a80be216 100644 --- a/quickfixj-core/src/main/java/quickfix/FieldMap.java +++ b/quickfixj-core/src/main/java/quickfix/FieldMap.java @@ -37,13 +37,8 @@ import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.TreeMap; /** * Field container used by messages, groups, and composites. @@ -232,6 +227,15 @@ public String getString(int field) throws FieldNotFound { return getField(field).getObject(); } + public Optional getOptionalString(int field) { + final StringField f = (StringField) fields.get(field); + if (f == null) { + return Optional.empty(); + } else { + return Optional.of(f.getValue()); + } + } + public boolean getBoolean(int field) throws FieldNotFound { try { return BooleanConverter.convert(getString(field)); diff --git a/quickfixj-core/src/test/java/quickfix/FieldMapTest.java b/quickfixj-core/src/test/java/quickfix/FieldMapTest.java index 8e40d5e49..c03f2cf7d 100644 --- a/quickfixj-core/src/test/java/quickfix/FieldMapTest.java +++ b/quickfixj-core/src/test/java/quickfix/FieldMapTest.java @@ -11,6 +11,7 @@ import quickfix.field.converter.UtcTimeOnlyConverter; import java.util.Iterator; +import java.util.Optional; /** * Tests the {@link FieldMap} class. @@ -91,6 +92,16 @@ public void testOrdering() { testOrdering(new int[] { 3, 2, 1 }, new int[] { 3, 1 }, new int[] { 3, 1, 2 }); } + public void testOptionalString() { + FieldMap map = new Message(); + map.setField(new StringField(128, "bigbank")); + Optional optValue = map.getOptionalString(128); + assertTrue(optValue.isPresent()); + assertEquals("bigbank", optValue.get()); + assertFalse(map.getOptionalString(129).isPresent()); + } + + private long epochMilliOfLocalDate(LocalDateTime localDateTime) { return localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli(); }