com.dtolabs.rundeck.core.execution.utils
Class ResponderTask

java.lang.Object
  extended by com.dtolabs.rundeck.core.execution.utils.ResponderTask
All Implemented Interfaces:
java.util.concurrent.Callable<ResponderTask.ResponderResult>

public class ResponderTask
extends java.lang.Object
implements java.util.concurrent.Callable<ResponderTask.ResponderResult>

ResponderTask interacts with an input and outputstream, using a Responder instance to define the interaction. It looks for lines on the input stream that match the "inputSuccess" regular expression (e.g. password prompt). If it detects the "inputFailure" regular expression, it fails. If successful, it writes the "inputString" to the output stream.

After writing to the output stream, It then looks for a certain "responseSuccess" regular expression. If successful it completes successfully. If it detects a "responseFailure" regular expression in the output, it fails.

If a ResponderTask.ResultHandler is set, it will call the handleResult method after the response logic.

If it the thread running the ResponderTask is interrupted, then the process will stop as soon as it is detected.

Implements Callable so it can be submitted to a ExecutorService.

Example: wait for "[sudo] password for user: ", write a password, and fail on "try again" response:


Nested Class Summary
static class ResponderTask.ResponderResult
          Result from a responder execution, which contains success, the original Responder, a failure reason if unsuccessful and a boolean indicating if the process was interrupted.
static interface ResponderTask.ResultHandler
          Handles result of responder thread run
static class ResponderTask.Sequence<T extends ResponderTask.SuccessResult>
          Creates a callable by executing the first step, and only if successful executing the next step.
static interface ResponderTask.SuccessResult
          Success/failure result interface
 
Constructor Summary
ResponderTask(Responder responder, java.io.InputStream inputStream, java.io.OutputStream outputStream, ResponderTask.ResultHandler resultHandler)
          Create a ResponderTask with a responder, io streams, and result handler which can be null.
 
Method Summary
 ResponderTask.ResponderResult call()
           
 java.util.concurrent.Callable<ResponderTask.ResponderResult> createSequence(Responder responder)
          Create a Callable that will execute another responder if this one is successful, with the same resultHandler for the second one.
 java.util.concurrent.Callable<ResponderTask.ResponderResult> createSequence(Responder responder, ResponderTask.ResultHandler resultHandler)
          Create a Callable that will execute another responder if this one is successful, with a specified resultHandler for the second one.
 java.lang.String getFailureReason()
           
 boolean isFailed()
           
 boolean isSuccess()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ResponderTask

public ResponderTask(Responder responder,
                     java.io.InputStream inputStream,
                     java.io.OutputStream outputStream,
                     ResponderTask.ResultHandler resultHandler)
Create a ResponderTask with a responder, io streams, and result handler which can be null.

Method Detail

call

public ResponderTask.ResponderResult call()
                                   throws java.lang.Exception
Specified by:
call in interface java.util.concurrent.Callable<ResponderTask.ResponderResult>
Throws:
java.lang.Exception

isFailed

public boolean isFailed()

createSequence

public java.util.concurrent.Callable<ResponderTask.ResponderResult> createSequence(Responder responder)
Create a Callable that will execute another responder if this one is successful, with the same resultHandler for the second one.


createSequence

public java.util.concurrent.Callable<ResponderTask.ResponderResult> createSequence(Responder responder,
                                                                                   ResponderTask.ResultHandler resultHandler)
Create a Callable that will execute another responder if this one is successful, with a specified resultHandler for the second one.


isSuccess

public boolean isSuccess()

getFailureReason

public java.lang.String getFailureReason()