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)
}
}