public HandleDecisionTaskResults handleDecisionTask()

in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/AsyncDecisionTaskHandler.java [103:131]


    public HandleDecisionTaskResults handleDecisionTask(Iterator<PollForDecisionTaskResponse> decisionTaskIterator) throws Exception {
        HistoryHelper historyHelper = new HistoryHelper(decisionTaskIterator);
        AsyncDecider decider = createDecider(historyHelper);
        decider.decide();
        // The workflow context data of history helper might be updated when making decisions, so
        // let's get the latest history helper.
        historyHelper = decider.getHistoryHelper();
        DecisionsHelper decisionsHelper = decider.getDecisionsHelper();
        Collection<Decision> decisions = decisionsHelper.getDecisions();
        PollForDecisionTaskResponse decisionTask = historyHelper.getDecisionTask();
        if (log.isDebugEnabled()) {
            log.debug("WorkflowTask taskId=" + decisionTask.startedEventId() + ", taskToken=" + decisionTask.taskToken()
                    + " completed with " + decisions.size() + " new decisions");
        }
        if (decisions.size() == 0 && asyncThreadDumpLog.isTraceEnabled()) {
            asyncThreadDumpLog.trace("Empty decision list with the following waiting tasks:\n"
                    + decider.getAsynchronousThreadDumpAsString());
        }
        RespondDecisionTaskCompletedRequest.Builder completedRequestBuilder = RespondDecisionTaskCompletedRequest.builder();
        completedRequestBuilder.taskToken(decisionTask.taskToken()).decisions(decisions);
        String contextData = decisionsHelper.getWorkflowContextDataToReturn();
        ComponentVersions componentVersions = historyHelper.getComponentVersions();
        Map<String, Integer> versionsToSave = componentVersions.getVersionsToSave();
        String executionContext = getExecutionContext(contextData, versionsToSave);
        if (historyHelper.getWorkflowContextData() == null || !historyHelper.getWorkflowContextData().equals(executionContext)) {
            completedRequestBuilder.executionContext(executionContext);
        }
        return new HandleDecisionTaskResults(completedRequestBuilder.build(), decider);
    }