override fun deleteElement()

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