ViewOperationHandler.java

package estore.presentation.command;

import java.util.List;

import estore.data.Book;
import estore.data.Electronics;
import estore.data.IProductCatalogRepository;
import estore.data.Product;
import estore.logging.ILogger;
import estore.presentation.ConsoleMessages;
import estore.presentation.IConsole;

public class ViewOperationHandler implements IOperationHandler {
    private final IProductCatalogRepository catalogRepository;
    private final IConsole console;
    private final ILogger logger;

    public ViewOperationHandler(
        IProductCatalogRepository catalogRepository,
        IConsole console,
        ILogger logger) {
        this.catalogRepository = catalogRepository;
        this.console = console;
        this.logger = logger;
    }

    @Override
    public void execute() {
        logger.info("Executing catalog view operation");
        List<Product> productList = catalogRepository.findAll();
        int bookCount = 0;
        int electronicsCount = 0;
        for (Product product : productList) {
            if (product instanceof Book) {
                bookCount++;
            } else if (product instanceof Electronics) {
                electronicsCount++;
            }
        }

        logger.info("Catalog metadata counts: total=" + productList.size() + ", books=" + bookCount + ", electronics=" + electronicsCount);
        console.printMessage(ConsoleMessages.CATALOG_METADATA);
        console.printMessage(ConsoleMessages.TOTAL_PRODUCTS + productList.size());
        console.printMessage(ConsoleMessages.BOOKS + bookCount);
        console.printMessage(ConsoleMessages.ELECTRONICS + electronicsCount);
    }
}