-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProgressBar.java
More file actions
147 lines (118 loc) · 4.01 KB
/
Copy pathProgressBar.java
File metadata and controls
147 lines (118 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.eternalcode.commons.progressbar;
public class ProgressBar {
private final String filledToken;
private final String emptyToken;
private final boolean showBrackets;
private final String leftBracket;
private final String rightBracket;
private final String bracketColor;
private final int length;
private ProgressBar(Builder builder) {
this.leftBracket = builder.leftBracket;
this.rightBracket = builder.rightBracket;
this.bracketColor = builder.bracketColor;
this.length = builder.length;
this.showBrackets = builder.showBrackets;
this.filledToken = builder.filledColor + builder.filledChar;
this.emptyToken = builder.emptyColor + builder.emptyChar;
}
public String render(double progress) {
double clampedProgress = Math.max(0, Math.min(1, progress));
int filled = (int) (this.length * clampedProgress);
StringBuilder bar = new StringBuilder();
if (this.showBrackets) {
bar.append(this.bracketColor).append(this.leftBracket);
}
for (int i = 0; i < this.length; i++) {
if (i < filled) {
bar.append(this.filledToken);
}
else {
bar.append(this.emptyToken);
}
}
if (this.showBrackets) {
bar.append(this.bracketColor).append(this.rightBracket);
}
return bar.toString();
}
public String render(int current, int max) {
if (max <= 0) {
return this.render(1.0);
}
double progress = (double) current / max;
return this.render(progress);
}
public String render(long current, long max) {
if (max <= 0) {
return this.render(1.0);
}
double progress = (double) current / max;
return this.render(progress);
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String filledChar = "█";
private String emptyChar = "░";
private String filledColor = "";
private String emptyColor = "";
private String leftBracket = "[";
private String rightBracket = "]";
private String bracketColor = "";
private int length = 10;
private boolean showBrackets = true;
public Builder filledChar(String filledChar) {
this.filledChar = filledChar;
return this;
}
public Builder emptyChar(String emptyChar) {
this.emptyChar = emptyChar;
return this;
}
public Builder filledColor(String filledColor) {
this.filledColor = filledColor;
return this;
}
public Builder emptyColor(String emptyColor) {
this.emptyColor = emptyColor;
return this;
}
public Builder leftBracket(String leftBracket) {
this.leftBracket = leftBracket;
return this;
}
public Builder rightBracket(String rightBracket) {
this.rightBracket = rightBracket;
return this;
}
public Builder brackets(String left, String right) {
this.leftBracket = left;
this.rightBracket = right;
return this;
}
public Builder bracketColor(String bracketColor) {
this.bracketColor = bracketColor;
return this;
}
public Builder length(int length) {
if (length <= 0) {
throw new IllegalArgumentException("Length must be positive");
}
this.length = length;
return this;
}
public Builder showBrackets(boolean showBrackets) {
this.showBrackets = showBrackets;
return this;
}
public Builder hideBrackets() {
this.showBrackets = false;
return this;
}
public ProgressBar build() {
return new ProgressBar(this);
}
}
}