in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/GenericWorkflowClientImpl.java [230:266]
public Promise<Void> signalWorkflowExecution(final SignalExternalWorkflowParameters parameters) {
final OpenRequestInfo<Void, Void> context = new OpenRequestInfo<Void, Void>();
String signalId = decisions.getNextId();
final SignalExternalWorkflowExecutionDecisionAttributes attributes = SignalExternalWorkflowExecutionDecisionAttributes.builder()
.control(signalId)
.signalName(parameters.getSignalName())
.input(parameters.getInput())
.runId(parameters.getRunId())
.workflowId(parameters.getWorkflowId()).build();
String taskName = "signalId=" + signalId + ", workflowId=" + parameters.getWorkflowId() + ", workflowRunId="
+ parameters.getRunId();
new ExternalTask() {
@Override
protected ExternalTaskCancellationHandler doExecute(final ExternalTaskCompletionHandle handle) throws Throwable {
decisions.signalExternalWorkflowExecution(attributes);
context.setCompletionHandle(handle);
final String finalSignalId = attributes.control();
scheduledSignals.put(finalSignalId, context);
return new ExternalTaskCancellationHandler() {
@Override
public void handleCancellation(Throwable cause) {
decisions.cancelSignalExternalWorkflowExecution(finalSignalId, null);
OpenRequestInfo<Void, Void> scheduled = scheduledSignals.remove(finalSignalId);
if (scheduled == null) {
throw new IllegalArgumentException("Signal \"" + finalSignalId + "\" wasn't scheduled");
}
handle.complete();
}
};
}
}.setName(taskName);
context.setResultDescription("signalWorkflowExecution " + taskName);
return context.getResult();
}