package cc.kune.kunecli.cmds;
/**
* From: https://gist.github.com/nacmartin/703416
*
**/
public class Progressbar {
private int current;
private long lastUpdate;
private final int max;
private final String name;
private final long start;
private String stats = "";
private String status = "";
public Progressbar(final int max, final String name) {
this.start = System.currentTimeMillis();
this.name = name;
this.max = max;
System.out.println(this.name + ":");
this.printBar(false);
}
public void finish() {
this.current = this.max;
this.printBar(true);
}
private void printBar(final boolean finished) {
final double numbar = Math.floor(50 * (double) current / max);
String strbar = "";
int ii = 0;
for (ii = 0; ii < numbar; ii++) {
strbar += "=";
}
for (ii = (int) numbar; ii < 50; ii++) {
strbar += " ";
}
final long elapsed = (System.currentTimeMillis() - this.start);
final int seconds = (int) (elapsed / 1000) % 60;
final int minutes = (int) (elapsed / 1000) / 60;
String strend = String.format("%02d", minutes) + ":" + String.format("%02d", seconds);
String strETA = "";
if (elapsed < 2000) {
strETA = "--:--";
} else {
final long timeETA = elapsed * (long) ((double) max / (double) current);
final int ETAseconds = (int) (timeETA / 1000) % 60;
final int ETAminutes = (int) (timeETA / 1000) / 60;
strETA = String.format("%02d", ETAminutes) + ":" + String.format("%02d", ETAseconds);
}
if (finished) {
strend = "Finished: " + strend + " ";
} else {
strend = "Elapsed: " + strend + " ETA: " + strETA + ", " + status + " " + current + " (" + stats
+ ") ";
}
System.out.print("|" + strbar + "| " + strend);
if (finished) {
System.out.print("\n");
} else {
System.out.print("\r");
}
}
public void setStatus(final String status, final String stats) {
this.status = status;
this.stats = stats;
}
public void setVal(final int i) {
this.current = i;
if ((System.currentTimeMillis() - this.lastUpdate) > 1000) {
this.lastUpdate = System.currentTimeMillis();
this.printBar(false);
}
}
}