This repository has been archived by the owner on Sep 12, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Clock.java
240 lines (222 loc) · 5.67 KB
/
Clock.java
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
import java.util.*;
/**
* Clock class
* @author Joris Berthelot <admin@eexit.net>
* @copyright Copyright (c) 2010, Joris Berthelot
* @version 1.01
*/
public class Clock extends CounterCollector
{
/**
* Clock start values (sec, min, hrs)
* @since 1.00
* @version 1.01
*/
private static int start[] = {0, 0, 0};
/**
* Clock end values (sec, min, hrs)
* @since 1.00
* @version 1.00
*/
private static int end[] = {60, 60, 24};
/**
* Clock step values (sec, min, hrs)
* @since 1.00
* @version 1.01
*/
private static int step[] = {1, 1, 1};
/**
* Clock default output format
* @since 1.00
* @version 1.00
*/
private String format = "%h%:%m%:%s%";
/**
* Clock constructor
* @since 1.00
* @version 1.01
*/
public Clock()
{
super(3, start, end, step);
}
/**
* Clock work method (this makes the clock working)
* @return Clock The current instance
* @throws InterruptedException Thread.sleep() error
* @since 1.00
* @version 1.01
*/
public Clock work()
{
try {
while (true) {
System.out.println(this);
Thread.sleep(1000);
this.increment();
}
} catch (InterruptedException e) {
System.out.println("ERROR: " + e);
}
return this;
}
/**
* Clock work once method (same as Clock.work() but loops one time). Useful
* when manual incrementation needed (tests, suitable cases).
* @return Clock The current instance
* @throws InterruptedException Thread.sleep() error
* @since 1.00
* @version 1.01
*/
public Clock workOnce()
{
try {
System.out.println(this);
Thread.sleep(1000);
this.increment();
} catch (InterruptedException e) {
System.out.println("ERROR: " + e);
}
return this;
}
/**
* Clock output format setter
* @param String format The new output format (need to include %h%, %m% and %s%)
* @return Clock The current instance
* @since 1.00
* @version 1.00
*/
public Clock setFormat(String format)
{
this.format = format;
return this;
}
/**
* Clock hour value setter
* @param int hrs The new hour value to set
* @return Clock The current instance
* @since 1.00
* @version 1.00
*/
public Clock setHrs(int hrs)
{
this.getCounter(2)
.setValue(hrs);
return this;
}
/**
* Clock minute value setter
* @param int min The new minute value to set
* @return Clock The current instance
*/
public Clock setMin(int min)
{
this.getCounter(1)
.setValue(min);
return this;
}
/**
* Clock second value setter
* @param int sec The new second value to set
* @return Clock The current instance
* @since 1.00
* @version 1.00
*/
public Clock setSec(int sec)
{
this.getCounter(0)
.setValue(sec);
return this;
}
/**
* Clock global value (hours, minute, second) setter
* @param int hrs The new hour value to set
* @param int min The new minute value to set
* @param int sec The new second value to set
* @since 1.00
* @version 1.00
*/
public Clock setValue(int hrs, int min, int sec)
{
this.setHrs(hrs)
.setMin(min)
.setSec(sec);
return this;
}
/**
* Clock hour value getter
* @return String The current hour formatted ("%02d") value
* @since 1.00
* @version 1.00
*/
public String getHrs()
{
return String.format("%02d",
this.getCounter(2)
.getValue()
);
}
/**
* Clock minute value getter
* @return String The current minute formatted ("%02d") value
* @since 1.00
* @version 1.00
*/
public String getMin()
{
return String.format("%02d",
this.getCounter(1)
.getValue()
);
}
/**
* Clock second value getter
* @return String The current second formatted ("%02d") value
* @since 1.00
* @version 1.00
*/
public String getSec()
{
return String.format("%02d",
this.getCounter(0)
.getValue()
);
}
/**
* Clock global value (hour, minute, second) getter
* @return String The current clock formatted ({@link Clock.format}) value
* @since 1.00
* @version 1.00
*/
public String getValue()
{
return this.format
.replaceAll("%h%", this.getHrs())
.replaceAll("%m%", this.getMin())
.replaceAll("%s%", this.getSec());
}
/**
* Clock global value (hour, minute, second) getter with format arg
* @param String format The on-demand wanted format value (see {@link Clock.setFormat}).
* @return String The current clock formatted value
* @since 1.00
* @version 1.01
*/
public String getValue(String format)
{
return format
.replaceAll("%h%", this.getHrs())
.replaceAll("%m%", this.getMin())
.replaceAll("%s%", this.getSec());
}
/**
* Clock default output method (outputs with {@link Clock.format})
* @return String The current clock formatted ({@link Clock.format}) value
* @since 1.00
* @version 1.00
*/
public String toString()
{
return this.getValue();
}
}