in intellij-plugin/educational-core/src/com/jetbrains/edu/coursecreator/CCStudyItemDeleteProvider.kt [33:85]
override fun deleteElement(dataContext: DataContext) {
val project = dataContext.getData(CommonDataKeys.PROJECT) ?: return
val virtualFile = dataContext.getData(CommonDataKeys.VIRTUAL_FILE) ?: return
val studyItem = dataContext.getData(CourseViewPane.STUDY_ITEM) ?: return
// currently, only gradle projects have module for study items
val module = dataContext.getData(LangDataKeys.MODULE_CONTEXT)
val itemType = when (studyItem) {
is Section -> EduCoreBundle.message("item.section.title")
is Lesson -> EduCoreBundle.message("item.lesson.title")
is Task -> EduCoreBundle.message("item.task.title")
else -> return
}
val (containingTasks, dependentTasks) = when (studyItem) {
is Section -> {
val allTasks = studyItem.lessons.flatMapTo(HashSet(), Lesson::taskList)
allTasks to allTasks.flatMapTo(HashSet(), Task::getDependentTasks) - allTasks
}
is Lesson -> {
val allTasks = studyItem.taskList.toSet()
allTasks to allTasks.flatMapTo(HashSet(), Task::getDependentTasks) - allTasks
}
is Task -> setOf(studyItem) to studyItem.getDependentTasks()
else -> emptySet<Task>() to emptySet()
}
val title = IdeBundle.message("prompt.delete.elements", itemType)
val message = getDeleteItemsDialogMessage(dependentTasks,
IdeBundle.message("warning.delete.all.files.and.subdirectories", studyItem.name),
EduCoreBundle.message("course.creator.warning.removing.dependencies"),
"${EduCoreBundle.message("course.creator.warning.dependent.tasks")}:")
val result = showOkCancelDialog(project, message, title, getOkButton(), getCancelButton(), getQuestionIcon())
if (result != OK) return
removeDependentPlaceholders(project, dependentTasks, containingTasks)
val modifiableModel = ModuleManager.getInstance(project).getModifiableModel()
if (module != null) {
ModuleDeleteProvider.removeModule(module, Collections.emptyList(), modifiableModel)
}
runWriteAction {
modifiableModel.commit()
CommandProcessor.getInstance().executeCommand(project, {
virtualFile.delete(CCStudyItemDeleteProvider::class.java)
val parent = studyItem.parent
val parentDir = parent.getDir(project.courseDir) ?: return@executeCommand
CCUtils.updateHigherElements(parentDir.children, { parent.getItem(it.name) }, studyItem.index, -1)
}, "", Object())
}
}