Skip to the content.
package com.bookshop.behavioral.chainofresponsibility;

import com.bookshop.domain.Book;
import java.util.Set;

/** Rejects orders containing books the shop doesn't have. */
public class StockCheck extends OrderCheck {

    private final Set<String> inStockIsbns;

    public StockCheck(Set<String> inStockIsbns) {
        this.inStockIsbns = Set.copyOf(inStockIsbns);
    }

    @Override
    protected ValidationResult check(OrderRequest request) {
        for (Book book : request.books()) {
            if (!inStockIsbns.contains(book.isbn())) {
                return ValidationResult.rejected("stock", "out of stock: " + book.title());
            }
        }
        return ValidationResult.ok();
    }
}

Raw file