Skip to content

Commit eb1b4e9

Browse files
committed
MessageCracker.xsl optimization using hash map. Issue #577
1 parent 0425600 commit eb1b4e9

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

quickfixj-codegenerator/src/main/resources/org/quickfixj/codegenerator/MessageCracker.xsl

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,20 @@ package <xsl:value-of select="$messagePackage"/>;
4949

5050
import quickfix.*;
5151
import <xsl:value-of select="$fieldPackage"/>.*;
52+
import java.util.HashMap;
5253

5354
public class MessageCracker {
5455

56+
private final HashMap&lt;String, MessageConsumer&gt; methodRegistry = new HashMap&lt;&gt;();
57+
private final MessageConsumer defaultFunction = this::onMessage;
58+
59+
public MessageCracker() {
60+
<xsl:for-each select="//fix/messages/message">
61+
methodRegistry.put(<xsl:value-of select="@name"/>.MSGTYPE,
62+
(message, sessionID) -> onMessage((<xsl:value-of select="@name"/>) message, sessionID));
63+
</xsl:for-each>
64+
}
65+
5566
/**
5667
* Callback for quickfix.Message message.
5768
*
@@ -116,13 +127,13 @@ public class MessageCracker {
116127
throws UnsupportedMessageType, FieldNotFound, IncorrectTagValue {
117128

118129
String type = message.getHeader().getString(MsgType.FIELD);
130+
methodRegistry.getOrDefault(type, defaultFunction).accept(message, sessionID);
131+
}
119132

120-
<xsl:for-each select="//fix/messages/message">
121-
<xsl:if test="position()!=1">
122-
else </xsl:if>if (type.equals(<xsl:value-of select="@name"/>.MSGTYPE))
123-
onMessage((<xsl:value-of select="@name"/>)message, sessionID);</xsl:for-each>
124-
else
125-
onMessage(message, sessionID);
133+
@FunctionalInterface
134+
private interface MessageConsumer {
135+
void accept(Message message, SessionID sessionID)
136+
throws UnsupportedMessageType, IncorrectTagValue, FieldNotFound;
126137
}
127138
</xsl:template>
128139

0 commit comments

Comments
 (0)