in java/runner/src/intTest/java/com/epam/deltix/data/connectors/validator/L2DataValidator.java [136:182]
private void processSnapshot(PackageHeaderInfo headerInfo) {
for (int i = 0; i < headerInfo.getEntries().size(); ++i) {
if (headerInfo.getEntries().get(i).getExchangeId() != headerInfo.getEntries().get(0).getExchangeId()) {
sendMessageToLogger(headerInfo, TypeConstants.EXCHANGE_NULL, "We support only one exchangeId for snapshots", Severity.ERROR);
}
}
askSnapshotEntries.clear();
bidSnapshotEntries.clear();
for (int i = 0; i < headerInfo.getEntries().size(); ++i) {
if (headerInfo.getEntries().get(i) instanceof BookResetEntry) continue;
if (!(headerInfo.getEntries().get(i) instanceof L2EntryNew)) {
sendMessageToLogger(headerInfo, TypeConstants.EXCHANGE_NULL, "We support only L2EntryNew and BookResetEntry entries for level2 snapshots", Severity.ERROR);
}
L2EntryNew entryNew = (L2EntryNew)headerInfo.getEntries().get(i);
if (entryNew.getSide() == QuoteSide.ASK)
askSnapshotEntries.add(entryNew);
else
bidSnapshotEntries.add(entryNew);
}
checkSnapshotSide(headerInfo, askSnapshotEntries, QuoteSide.ASK);
checkSnapshotSide(headerInfo, bidSnapshotEntries, QuoteSide.BID);
if (headerInfo.getPackageType() == PackageType.PERIODICAL_SNAPSHOT) {
MarketSide<OrderBookQuote> askQuotes = book.getMarketSide(QuoteSide.ASK);
MarketSide<OrderBookQuote> bidQuotes = book.getMarketSide(QuoteSide.BID);
int askCount = askQuotes.depth();
int bidCount = bidQuotes.depth();
if (askCount != askSnapshotEntries.size() || bidCount != bidSnapshotEntries.size()) {
sendMessageToLogger(headerInfo, TypeConstants.EXCHANGE_NULL, "Current state of book doesn't equal to periodical snapshot.", Severity.ERROR);
return;
}
for (int i = 0; i < askCount; ++i) {
if (Decimal64Utils.isNotEqual(askSnapshotEntries.get(i).getPrice(), askQuotes.getQuote(i).getPrice()) || Decimal64Utils.isNotEqual(askSnapshotEntries.get(i).getSize(), askQuotes.getQuote(i).getSize())) {
sendMessageToLogger(headerInfo, TypeConstants.EXCHANGE_NULL, "Current state of book doesn't equal to periodical snapshot.", Severity.ERROR);
return;
}
}
for (int i = 0; i < bidCount; ++i) {
if (Decimal64Utils.isNotEqual(bidSnapshotEntries.get(i).getPrice(), bidQuotes.getQuote(i).getPrice()) || Decimal64Utils.isNotEqual(bidSnapshotEntries.get(i).getSize(), bidQuotes.getQuote(i).getSize())) {
sendMessageToLogger(headerInfo, TypeConstants.EXCHANGE_NULL, "Current state of book doesn't equal to periodical snapshot.", Severity.ERROR);
return;
}
}
}
}