public class MyTask extends TimerTask{
Closure onFinish
int count, repeat
public MyTask(Closure onFinish = {}, int repeat = 1){
this.onFinish = onFinish
this.repeat = repeat
this.count = 1
}
private void toDo(){
println "count-> ${count}"
}
private void checkFinished() {
if (count > repeat) { //this is the condition when you want to stop the task.
println "DONE-> before ${count}"
onFinish()
return
}
}
@Override
public void run() {
toDo()
count++
checkFinished()
}
}
public class MyScheduler {
public static void doIt( Closure then = {} ) {
Timer timer = new Timer()
MyTask myTask = new MyTask( repeat:3,
onFinish:{
timer.cancel() // stop the timer
then() // do the callback
})
int delayStartMs = 2000
int intervalMs = 1000
timer.schedule(myTask, delayStartMs, intervalMs)
}
}
MyScheduler.doIt( { println "#1 DONE" } )
MyScheduler.doIt( { println "#2 DONE" } )
Monday, January 7, 2013
Simple Timer & TimerTask
Run OS command
//windows String cmd = "ping google.com" String[] command = ["CMD", "/C", cmd] as String[] ProcessBuilder builder = new ProcessBuilder(command) Process process = builder.start() println process.text println "*"*5+"DONE"+"*"*5
Sunday, January 6, 2013
String padding with zeros
String.metaClass.zeropad = { Integer padding = 0 ->
return ("0" * Math.max(0, (padding ?: 0) - delegate.size())) + delegate
}
Integer.metaClass.zeropad = { Integer padding = 0 ->
return delegate.toString().zeropad(padding)
}
assert "123".zeropad() == "123"
assert "123".zeropad(null) == "123"
assert "123".zeropad(5) == "00123"
assert "1234".zeropad(5) == "01234"
assert "12345".zeropad(5) == "12345"
assert "123456".zeropad(5) == "123456"
assert 123.zeropad() == "123"
assert 123.zeropad(null) == "123"
assert 123.zeropad(5) == "00123"
assert 1234.zeropad(5) == "01234"
assert 12345.zeropad(5) == "12345"
assert 123456.zeropad(5) == "123456"
Subscribe to:
Comments (Atom)