override fun doMove()

in intellij-plugin/educational-core/src/com/jetbrains/edu/coursecreator/handlers/move/CCTaskMoveHandlerDelegate.kt [27:75]


  override fun doMove(
    project: Project,
    elements: Array<PsiElement>,
    targetContainer: PsiElement?,
    callback: MoveCallback?
  ) {
    if (targetContainer !is PsiDirectory) {
      return
    }
    val targetVFile = targetContainer.virtualFile
    if (!targetVFile.isTaskDirectory(project) && !targetVFile.isLessonDirectory(project)) {
      Messages.showInfoMessage(
        message("dialog.message.incorrect.movement.task"),
        message("dialog.title.incorrect.target.for.move")
      )
      return
    }
    StudyTaskManager.getInstance(project).course ?: return
    val sourceDirectory = elements[0] as PsiDirectory
    val taskToMove = sourceDirectory.virtualFile.getTask(project) ?: return
    val sourceLesson = taskToMove.lesson
    if (targetVFile.isLessonDirectory(project)) {
      //if user moves task to any lesson, this task is inserted as the last task in this lesson
      val targetLesson = targetVFile.getLesson(project) ?: return
      if (targetVFile.findChild(taskToMove.name) != null) {
        Messages.showInfoMessage(
          message("dialog.message.task.name.conflict.in.lesson"),
          message("dialog.title.incorrect.target.for.move")
        )
        return
      }
      val taskList = targetLesson.taskList
      val targetTask = if (taskList.isEmpty()) null else taskList[taskList.size - 1]
      StudyItemRefactoringHandler.processBeforeTaskMovement(project, taskToMove, targetVFile)
      moveTask(sourceDirectory, taskToMove, targetTask, 1, targetVFile, targetLesson)
      saveItem(sourceLesson)
      saveItem(targetLesson)
    }
    else {
      val lessonDir = targetVFile.parent ?: return
      val targetTask = targetVFile.getTask(project) ?: return
      val delta = getDelta(project, targetTask) ?: return
      StudyItemRefactoringHandler.processBeforeTaskMovement(project, taskToMove, lessonDir)
      moveTask(sourceDirectory, taskToMove, targetTask, delta, lessonDir, targetTask.lesson)
      saveItem(sourceLesson)
      saveItem(targetTask.lesson)
    }
    ProjectView.getInstance(project).refresh()
  }