public Promise signalWorkflowExecution()

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();
    }