in java/runner/src/intTest/java/com/epam/deltix/data/connectors/validator/L2DataValidator.java [378:433]
private void validateIncrementEntry(PackageHeaderInfo headerInfo, L2EntryNew entryNew) {
MarketSide<OrderBookQuote> quotes = book.getMarketSide(entryNew.getSide());
if (entryNew.getLevel() > quotes.depth()) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect level. Greater than level's count + 1", Severity.ERROR);
return;
}
if (entryNew.getLevel() == 0) {
if (quotes.depth() == 0) return;
if (entryNew.getSide() == QuoteSide.ASK) {
if (Decimal64Utils.isGreater(entryNew.getPrice(), quotes.getQuote(0).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
} else {
if (Decimal64Utils.isLess(entryNew.getPrice(), quotes.getQuote(0).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
}
if (checkEqualLevels) {
if (Decimal64Utils.isEqual(entryNew.getPrice(), quotes.getQuote(0).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be strictly sorted (without equal levels)", Severity.ERROR);
}
}
} else if (entryNew.getLevel() == quotes.depth()) {
if (entryNew.getSide() == QuoteSide.ASK) {
if (Decimal64Utils.isLess(entryNew.getPrice(), quotes.getQuote(quotes.depth() - 1).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
} else {
if (Decimal64Utils.isGreater(entryNew.getPrice(), quotes.getQuote(quotes.depth() - 1).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
}
if (checkEqualLevels) {
if (Decimal64Utils.isEqual(entryNew.getPrice(), quotes.getQuote(quotes.depth() - 1).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be strictly sorted (without equal levels)", Severity.ERROR);
}
}
} else {
if (entryNew.getSide() == QuoteSide.ASK) {
if (Decimal64Utils.isLess(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel() - 1).getPrice()) || Decimal64Utils.isGreater(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel()).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
} else {
if (Decimal64Utils.isGreater(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel() - 1).getPrice()) || Decimal64Utils.isLess(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel()).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be sorted", Severity.ERROR);
}
}
if (checkEqualLevels) {
if (Decimal64Utils.isEqual(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel() - 1).getPrice()) || Decimal64Utils.isEqual(entryNew.getPrice(), quotes.getQuote(entryNew.getLevel()).getPrice())) {
sendMessageToLogger(headerInfo, entryNew.getExchangeId(), "Incorrect price. Prices after this entry wouldn't be strictly sorted (without equal levels)", Severity.ERROR);
}
}
}
}