cleanup
[idea/community.git] / python / educational-core / course-creator / src / com / jetbrains / edu / coursecreator / actions / CCAddAsTaskFile.java
1 package com.jetbrains.edu.coursecreator.actions;
2
3 import com.intellij.ide.projectView.ProjectView;
4 import com.intellij.openapi.command.undo.BasicUndoableAction;
5 import com.intellij.openapi.command.undo.UnexpectedUndoException;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import com.jetbrains.edu.coursecreator.CCUtils;
9 import com.jetbrains.edu.learning.StudyUtils;
10 import com.jetbrains.edu.learning.core.EduUtils;
11 import com.jetbrains.edu.learning.courseFormat.Course;
12 import com.jetbrains.edu.learning.courseFormat.Task;
13 import com.jetbrains.edu.learning.courseFormat.TaskFile;
14
15 public class CCAddAsTaskFile extends CCTaskFileActionBase {
16   public static final String ACTION_NAME = "Make Visible to Student";
17
18   public CCAddAsTaskFile() {
19     super(ACTION_NAME);
20   }
21
22
23   protected void performAction(VirtualFile file, Task task, Course course, Project project) {
24     EduUtils.runUndoableAction(project, ACTION_NAME, new AddTaskFile(file, null, course, project, task));
25   }
26
27   protected boolean isAvailable(Project project, VirtualFile file) {
28     return StudyUtils.getTaskFile(project, file) == null && !CCUtils.isTestsFile(project, file);
29   }
30
31   private static class AddTaskFile extends BasicUndoableAction {
32     private final VirtualFile myFile;
33     private TaskFile myTaskFile;
34     private final Course myCourse;
35     private final Project myProject;
36     private final Task myTask;
37
38     public AddTaskFile(VirtualFile file, TaskFile taskFile, Course course, Project project, Task task) {
39       super(file);
40       myFile = file;
41       myTaskFile = taskFile;
42       myCourse = course;
43       myProject = project;
44       myTask = task;
45     }
46
47     @Override
48     public void undo() throws UnexpectedUndoException {
49       CCHideFromStudent.hideFromStudent(myFile, myProject, myTask.getTaskFiles(), myTaskFile);
50       ProjectView.getInstance(myProject).refresh();
51     }
52
53     @Override
54     public void redo() throws UnexpectedUndoException {
55       if (myTaskFile != null) {
56         myTask.addTaskFile(myTaskFile);
57       } else {
58         myTask.addTaskFile(myFile.getName(), myTask.getTaskFiles().size());
59         myTaskFile = myTask.getTaskFile(myFile.getName());
60       }
61       CCUtils.createResourceFile(myFile, myCourse, StudyUtils.getTaskDir(myFile));
62       ProjectView.getInstance(myProject).refresh();
63     }
64
65     @Override
66     public boolean isGlobal() {
67       return true;
68     }
69   }
70 }