All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hidetake.groovy.ssh.util.Utility.groovy Maven / Gradle / Ivy

There is a newer version: 2.11.2
Show newest version
package org.hidetake.groovy.ssh.util

import com.jcraft.jsch.JSchException
import groovy.util.logging.Slf4j

/**
 * Provides utility methods.
 *
 * @author Hidetake Iwata
 */
@Slf4j
class Utility {
    static  T callWithDelegate(Closure closure, delegate, ... arguments) {
        def cloned = closure.clone() as Closure
        cloned.resolveStrategy = Closure.DELEGATE_FIRST
        cloned.delegate = delegate
        cloned.call(*arguments)
    }

    /**
     * Curry a method with self for recursive.
     *
     * @param closure
     * @return curried closure
     */
    static  Closure currySelf(Closure closure) {
        def curried
        curried = closure.curry {
            closure.call(curried)
        }
    }

    /**
     * Execute the closure with retrying.
     * This method catches only {@link com.jcraft.jsch.JSchException}s.
     *
     * @param retryCount
     * @param retryWaitSec
     * @param closure
     */
    static  T retry(int retryCount, int retryWaitSec, Closure closure) {
        assert closure != null, 'closure should be set'
        if (retryCount > 0) {
            try {
                closure()
            } catch (JSchException e) {
                log.warn("Retrying: ${e.getClass().name}: ${e.localizedMessage}")
                ManagedBlocking.sleep(retryWaitSec * 1000L)
                retry(retryCount - 1, retryWaitSec, closure)
            }
        } else {
            closure()
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy