private void fillNext()

in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/HistoryHelper.java [111:163]


        private void fillNext() {
            boolean decisionTaskTimedOut = false;
            List<HistoryEvent> decisionStartToCompletionEvents = new ArrayList<HistoryEvent>();
            List<HistoryEvent> decisionCompletionToStartEvents = new ArrayList<HistoryEvent>();
            boolean concurrentToDecision = true;
            int lastDecisionIndex = -1;
            long nextReplayCurrentTimeMilliseconds = -1;
            while (events.hasNext()) {
                HistoryEvent event = events.next();
                EventType eventType = EventType.fromValue(event.getEventType());
                if (eventType == EventType.DecisionTaskCompleted) {
                    String executionContext = event.getDecisionTaskCompletedEventAttributes().getExecutionContext();
                    updateWorkflowContextDataAndComponentVersions(executionContext);
                    concurrentToDecision = false;
                }
                else if (eventType == EventType.DecisionTaskStarted) {
                    nextReplayCurrentTimeMilliseconds = event.getEventTimestamp().getTime();
                    if (decisionTaskTimedOut) {
                        current.getDecisionEvents().addAll(decisionStartToCompletionEvents);
                        decisionStartToCompletionEvents = new ArrayList<HistoryEvent>();
                        decisionTaskTimedOut = false;
                    }
                    else {
                        break;
                    }
                }
                else if (eventType.equals(EventType.DecisionTaskTimedOut)) {
                    decisionTaskTimedOut = true;
                }
                else if (eventType == EventType.DecisionTaskScheduled) {
                    // skip
                }
                else if (eventType == EventType.MarkerRecorded) {
                    // ignore
                }
                else if (eventType == EventType.RecordMarkerFailed) {
                    // ignore
                }
                else {
                    if (concurrentToDecision) {
                        decisionStartToCompletionEvents.add(event);
                    }
                    else {
                        if (isDecisionEvent(eventType)) {
                            lastDecisionIndex = decisionCompletionToStartEvents.size();
                        }
                        decisionCompletionToStartEvents.add(event);
                    }
                }
            }
            List<HistoryEvent> nextEvents = reorderEvents(decisionStartToCompletionEvents, decisionCompletionToStartEvents, lastDecisionIndex);
            next = new SingleDecisionData(nextEvents, nextReplayCurrentTimeMilliseconds, workflowContextData);
        }