fun refreshTable()

in src/org/jetbrains/r/run/visualize/RDataFrameTablePage.kt [364:416]


  fun refreshTable() {
    val oldColumns = List(viewer.nColumns) { viewer.getColumnName(it) }

    RPluginCoroutineScope.getApplicationScope().launch(Dispatchers.EDT + ModalityState.defaultModalityState().asContextElement()) {
      val refreshed = viewer.refresh()

      if (!refreshed) return@launch
      val rowSorter = table.rowSorter as RDataFrameRowSorter
      rowSorter.updatesSuspended = true
      try {
        val newColumns = List(viewer.nColumns) { viewer.getColumnName(it) }
        val columnMapping = getColumnMapping(oldColumns, newColumns)
        val newSortKeys = rowSorter.sortKeys.mapNotNull {
          columnMapping[it.column]?.let { newColumn ->
            RowSorter.SortKey(newColumn, it.sortOrder)
          }
        }
        val newFilters = filterHeader?.let { header ->
          val filters = MutableList(newColumns.size) { "" }
          columnMapping.forEachIndexed { old, new ->
            if (new != null) {
              filters[new] = (header.getFilterEditor(old).content as? String).orEmpty()
            }
          }
          filters
        }

        removeTableFilterHeader()

        table.columnModel = RVisualizeTableUtil.createColumnModel(viewer)
        (table.model as RDataFrameTableModel).apply {
          fireTableStructureChanged()
          fireTableDataChanged()
        }
        rowSorter.restore()

        if (newFilters != null) {
          addTableFilterHeader()
          newFilters.forEachIndexed { index, it -> filterHeader?.getFilterEditor(index)?.content = it }
          filtersHandler?.updateTableFilter()
        }

        rowSorter.setSortKeys(newSortKeys.takeIf { it.isNotEmpty() }?.toMutableList())
        paginator?.updateShownRange()
      } finally {
        rowSorter.updatesSuspended = false
      }
      rowSorter.update()

      repaint()
      filterTableButton.update()
    }
  }