CatalogFileWriter.java

package estore.data;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.List;

import estore.logging.ILogger;
import estore.logging.Logger;

/**
 * Writes the repository-backed catalog in the application's text-file format.
 */
public class CatalogFileWriter {

    private final IProductCatalogRepository catalogRepository;
    private final ILogger logger;

    public CatalogFileWriter(IProductCatalogRepository catalogRepository) {
        this(catalogRepository, new Logger());
    }

    public CatalogFileWriter(IProductCatalogRepository catalogRepository, ILogger logger) {
        this.catalogRepository = catalogRepository;
        this.logger = logger;
    }

    /**
     * Writes the catalog to {@code java.txt}, preserving the existing export
     * format and console messages.
     */
    public void write() {
        logger.info("Starting catalog export to java.txt");
        try {
            PrintWriter outputStream = new PrintWriter(new FileOutputStream("java.txt"));
            List<Product> products = catalogRepository.findAll();

            for (Product product : products) {
                outputStream.println(product.toString());
            }

            outputStream.close();
            logger.log("Successful write to file with " + products.size() + " products");
        } catch (FileNotFoundException e) {
            logger.error("Unable to open file for export");
            System.exit(0);
        }
    }
}