1 package com.jetbrains.edu.coursecreator;
3 import com.intellij.openapi.application.ApplicationManager;
4 import com.intellij.openapi.project.Project;
5 import com.intellij.openapi.vfs.VirtualFile;
6 import com.intellij.openapi.vfs.VirtualFileAdapter;
7 import com.intellij.openapi.vfs.VirtualFileEvent;
8 import com.intellij.util.Function;
9 import com.jetbrains.edu.EduNames;
10 import com.jetbrains.edu.courseFormat.*;
11 import com.jetbrains.edu.coursecreator.actions.CCRunTestsAction;
12 import org.jetbrains.annotations.NotNull;
14 class CCFileDeletedListener extends VirtualFileAdapter {
16 private final Project myProject;
18 CCFileDeletedListener(@NotNull final Project project) {
23 public void fileDeleted(@NotNull VirtualFileEvent event) {
24 if (myProject.isDisposed() || !myProject.isOpen()) {
27 VirtualFile removedFile = event.getFile();
28 final TaskFile taskFile = CCProjectService.getInstance(myProject).getTaskFile(removedFile);
29 if (taskFile != null) {
30 deleteAnswerFile(removedFile, taskFile);
33 Course course = CCProjectService.getInstance(myProject).getCourse();
37 if (removedFile.getName().contains(EduNames.TASK)) {
38 deleteTask(course, removedFile, myProject);
40 if (removedFile.getName().contains(EduNames.LESSON)) {
41 deleteLesson(course, removedFile);
45 private void deleteLesson(@NotNull final Course course, @NotNull final VirtualFile removedLessonFile) {
46 Lesson removedLesson = course.getLesson(removedLessonFile.getName());
47 if (removedLesson == null) {
50 VirtualFile courseDir = myProject.getBaseDir();
51 CCUtils.updateHigherElements(courseDir.getChildren(), new Function<VirtualFile, StudyOrderable>() {
53 public StudyOrderable fun(VirtualFile file) {
54 return course.getLesson(file.getName());
56 }, removedLesson.getIndex(), EduNames.LESSON, -1);
57 course.getLessons().remove(removedLesson);
60 private static void deleteTask(@NotNull final Course course, @NotNull final VirtualFile removedTask, @NotNull final Project project) {
61 VirtualFile lessonDir = removedTask.getParent();
62 if (lessonDir == null || !lessonDir.getName().contains(EduNames.LESSON)) {
65 final Lesson lesson = course.getLesson(lessonDir.getName());
69 Task task = lesson.getTask(removedTask.getName());
73 CCUtils.updateHigherElements(lessonDir.getChildren(), new Function<VirtualFile, StudyOrderable>() {
75 public StudyOrderable fun(VirtualFile file) {
76 return lesson.getTask(file.getName());
78 }, task.getIndex(), EduNames.TASK, -1);
79 lesson.getTaskList().remove(task);
82 private void deleteAnswerFile(@NotNull final VirtualFile removedAnswerFile, TaskFile taskFile) {
83 ApplicationManager.getApplication().runWriteAction(new Runnable() {
86 VirtualFile taskDir = removedAnswerFile.getParent();
87 if (taskDir != null) {
88 CCRunTestsAction.clearTestEnvironment(taskDir, myProject);
92 String name = CCProjectService.getRealTaskFileName(removedAnswerFile.getName());
93 Task task = taskFile.getTask();
97 task.getTaskFiles().remove(name);