ConsoleProgressReporter.java

  1. /*
  2.  * Copyright (C) 2021 B3Partners B.V.
  3.  *
  4.  * SPDX-License-Identifier: MIT
  5.  */

  6. package nl.b3p.brmo.bgt.loader.cli;

  7. import static nl.b3p.brmo.bgt.loader.Utils.formatTimeSince;
  8. import static nl.b3p.brmo.bgt.loader.Utils.getBundleString;
  9. import static nl.b3p.brmo.schema.ObjectTableWriter.Stage.FINISHED;

  10. import java.time.Instant;
  11. import nl.b3p.brmo.bgt.loader.ProgressReporter;
  12. import nl.b3p.brmo.bgt.schema.BGTObjectTableWriter;
  13. import nl.b3p.brmo.schema.ObjectTableWriter;

  14. public class ConsoleProgressReporter extends ProgressReporter {
  15.   Instant totalStart = Instant.now();

  16.   @Override
  17.   protected void log(String msg) {
  18.     System.out.print("\r" + msg);
  19.   }

  20.   @Override
  21.   protected void status(String msg) {
  22.     System.out.print("\r" + msg + " ".repeat(40));
  23.   }

  24.   @Override
  25.   public void reportTotalSummary() {
  26.     super.reportTotalSummary();
  27.     System.out.println();
  28.   }

  29.   @Override
  30.   public void accept(ObjectTableWriter.Progress genericProgress) {
  31.     super.accept(genericProgress);
  32.     BGTObjectTableWriter.BGTProgress progress = (BGTObjectTableWriter.BGTProgress) genericProgress;

  33.     if (progress.getStage() == FINISHED) {
  34.       System.out.println();
  35.     } else if (progress.getStage() == BGTObjectTableWriter.Stage.LOAD_OBJECTS) {

  36.       String total = "";
  37.       if (getTotalBytes() != null) {
  38.         total =
  39.             String.format(
  40.                 " - %s %4.1f%%   %s",
  41.                 getBundleString("progress.total"),
  42.                 100.0 / getTotalBytes() * getTotalBytesReadFunction().get(),
  43.                 formatTimeSince(totalStart));
  44.       }

  45.       String current;
  46.       if (getCurrentFileSize() != null) {
  47.         current = String.format("%4.1f%% ", 100.0 / getCurrentFileSize() * progress.getBytesRead());
  48.       } else {
  49.         current = String.format("%,6d MB", progress.getBytesRead() / 1024 / 1024);
  50.       }
  51.       System.out.printf(
  52.           "\r%s: %s  %s, %,10d %s%s",
  53.           getCurrentFileName(),
  54.           current,
  55.           formatTimeSince(getCurrentFileStart()),
  56.           progress.getObjectCount(),
  57.           getBundleString("progress.objects"),
  58.           total);
  59.     }
  60.   }
  61. }