in jetbrains-core/src/software/aws/toolkits/jetbrains/services/cloudformation/stack/EventsFetcher.kt [30:70]
fun fetchEvents(client: CloudFormationClient, pageToSwitchTo: Page?): Pair<List<StackEvent>, Set<Page>> {
assert(!SwingUtilities.isEventDispatchThread())
val pageToFetch: String? = when (pageToSwitchTo) {
Page.NEXT -> nextPage
Page.PREVIOUS -> previousPages.lastOrNull()
else -> currentPage
}
val request = DescribeStackEventsRequest.builder().stackName(stackName).nextToken(pageToFetch).build()
val response = client.describeStackEvents(request)
when (pageToSwitchTo) {
Page.NEXT -> currentPage?.let { previousPages.add(it) } // Store current as prev
Page.PREVIOUS -> if (previousPages.isNotEmpty()) previousPages.removeAt(previousPages.size - 1)
}
nextPage = response.nextToken()
currentPage = pageToFetch
if (pageToSwitchTo != null) { // page changed, last event is not valid
lastEventIdOfCurrentPage = null
}
val eventsUnprocessed = response.stackEvents()
val eventsProcessed = when (lastEventIdOfCurrentPage) {
null -> eventsUnprocessed
else -> eventsUnprocessed.takeWhile { it.id != lastEventIdOfCurrentPage }
}
eventsProcessed.firstOrNull()?.let { lastEventIdOfCurrentPage = it.id }
val availablePages = mutableSetOf<Page>()
if (currentPage != null) { // We only can go prev. if current page is not first (not null)
availablePages.add(Page.PREVIOUS)
}
if (nextPage != null) {
availablePages.add(Page.NEXT)
}
return Pair(eventsProcessed, availablePages)
}