private void processSnapshot()

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;
                }
            }

        }
    }