package at.ac.univie.mminf.qskos4j.progress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConsoleProgressMonitor implements IProgressMonitor { private final Logger logger = LoggerFactory.getLogger(ConsoleProgressMonitor.class); private final int PROG_BAR_WIDTH = 50; private float prevProgressValue; @Override public void onUpdateProgress(float progress) { if (progress - prevProgressValue > .01) { int percentage = Math.round(progress * 100); System.out.print("|" +createBar(percentage)+ "|" +percentage+ "%\r"); prevProgressValue = progress; } } @Override public void onFinish() { System.out.print(produceBlanks(PROG_BAR_WIDTH + 10) + "\r"); } private String createBar(int percentage) { int numSegments = (int) Math.round((double) (PROG_BAR_WIDTH * percentage) / (double) 100); String bar = ""; for (int i = 0; i < numSegments; i++) { bar += "="; } bar += produceBlanks(PROG_BAR_WIDTH - numSegments); return bar; } private String produceBlanks(int numBlanks) { return new String(new char[numBlanks]).replace('\0', ' '); } @Override public void setTaskDescription(String description) { logger.info(description); } @Override public void reset() { prevProgressValue = 0; } }