Skip to content

Commit 9f8fb4b

Browse files
authored
Merge pull request #750 from ChoiJunsik/feature/remove-sessionsettings-section
Added function `removeSection` in `SessionSettings`
2 parents 25bbd8a + ff05e55 commit 9f8fb4b

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

quickfixj-core/src/main/java/quickfix/SessionSettings.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,4 +877,22 @@ public static Set<InetAddress> parseRemoteAddresses(String raw) {
877877
return result;
878878
}
879879

880+
public void removeSection(final SessionID sessionID) throws ConfigError {
881+
Properties properties = getSessionProperties(sessionID);
882+
883+
if (properties == null) {
884+
throw new ConfigError("Session not found");
885+
}
886+
sections.remove(sessionID);
887+
}
888+
889+
public void removeSection(final String propertyKey, final String propertyValue) throws ConfigError {
890+
SessionID sessionIdToRemove = sections.entrySet().stream()
891+
.filter(entry -> propertyValue.equals(entry.getValue().get(propertyKey)))
892+
.map(Map.Entry::getKey)
893+
.findFirst()
894+
.orElseThrow(() -> new ConfigError("Session not found"));
895+
896+
sections.remove(sessionIdToRemove);
897+
}
880898
}

quickfixj-core/src/test/java/quickfix/SessionSettingsTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.Iterator;
3232
import java.util.Properties;
3333
import java.util.Set;
34+
import java.util.HashSet;
3435
import java.util.List;
3536
import java.util.Map;
3637
import java.util.HashMap;
@@ -610,6 +611,51 @@ public void testConcurrentAccess() throws ConfigError, InterruptedException {
610611
assertTrue(testHasPassed.get());
611612
}
612613

614+
@Test
615+
public void testRemoveSectionBySessionID() throws ConfigError {
616+
final Map<Object, Object> defaultSettings = createDefaultSettings();
617+
618+
final Map<Object, Object> pricingSection = createPricingSection();
619+
final SessionID pricingSessionID = new SessionID("FIX.4.2:FOOBAR_PRICING->*");
620+
621+
final Map<Object, Object> tradingSection = createTradingSection();
622+
final SessionID tradingSessionID = new SessionID("FIX.4.2:FOOBAR_TRADING->*");
623+
624+
final SessionSettings sessionSettings = new SessionSettings();
625+
sessionSettings.set(new Dictionary(null, defaultSettings));
626+
sessionSettings.set(pricingSessionID, new Dictionary("sessions", pricingSection));
627+
sessionSettings.set(tradingSessionID, new Dictionary("sessions", tradingSection));
628+
629+
while (sessionSettings.sectionIterator().hasNext()) {
630+
SessionID sessionID = sessionSettings.sectionIterator().next();
631+
sessionSettings.removeSection(sessionID);
632+
}
633+
634+
assertFalse(sessionSettings.sectionIterator().hasNext());
635+
}
636+
637+
@Test
638+
public void testRemoveSectionByPropertyKey() throws ConfigError {
639+
final Map<Object, Object> defaultSettings = createDefaultSettings();
640+
641+
final Map<Object, Object> tradingSection = createTradingSection();
642+
final SessionID tradingSessionID = new SessionID("FIX.4.2:FOOBAR_TRADING->*");
643+
644+
final SessionSettings sessionSettings = new SessionSettings();
645+
sessionSettings.set(new Dictionary(null, defaultSettings));
646+
sessionSettings.set(tradingSessionID, new Dictionary("sessions", tradingSection));
647+
648+
sessionSettings.removeSection("SocketAcceptPort", "7566");
649+
650+
Set<SessionID> expectedSessionIdSet = new HashSet<>();
651+
while (sessionSettings.sectionIterator().hasNext()) {
652+
SessionID sessionID = sessionSettings.sectionIterator().next();
653+
expectedSessionIdSet.add(sessionID);
654+
}
655+
656+
assertFalse(expectedSessionIdSet.contains(tradingSessionID));
657+
}
658+
613659
private Map<Object, Object> createTradingSection() {
614660
final Map<Object, Object> tradingSection = new HashMap<>();
615661
tradingSection.put("PersistMessages","Y");

0 commit comments

Comments
 (0)