override fun actionPerformed()

in intellij-plugin/educational-core/src/com/jetbrains/edu/coursecreator/actions/stepik/ExportStepikIds.kt [31:66]


  override fun actionPerformed(e: AnActionEvent) {
    val project = e.project ?: return
    val course = StudyTaskManager.getInstance(project).course ?: return

    val serializer = JsonSerializer<StudyItem> { item, _, context ->
      val jsonObject = JsonObject()
      jsonObject.addProperty("title", item.name)
      jsonObject.addProperty("id", item.id)

      val serializeStudyItem: (StudyItem) -> JsonElement = { itemToSerialize -> context.serialize(itemToSerialize, StudyItem::class.java) }

      if (item is ItemContainer) {
        val itemsName = if (item is Lesson) "task_list" else "items"
        jsonObject.addChildren(itemsName, item.items, serializeStudyItem)
      }
      if (item is StepikLesson) {
        jsonObject.addProperty("unit_id", item.unitId)
      }
      if (item is EduCourse && item.isStepikRemote) {
        if (item.sectionIds.isNotEmpty()) {
          jsonObject.addChildren("sectionIds", item.sectionIds) { id ->
            JsonPrimitive(id)
          }
        }
      }
      jsonObject
    }

    val gson = GsonBuilder().registerTypeAdapter(StudyItem::class.java, serializer).setPrettyPrinting().create()
    val json = gson.toJson(course, StudyItem::class.java)
    runWriteAction {
      val stepikIdsFile = project.courseDir.findOrCreateChildData(this, EduNames.STEPIK_IDS_JSON)
      VfsUtil.saveText(stepikIdsFile, json)
      FileEditorManager.getInstance(project).openFile(stepikIdsFile, true)
    }
  }