1 package com.jetbrains.edu.coursecreator.actions;
3 import com.intellij.ide.projectView.ProjectView;
4 import com.intellij.openapi.application.ApplicationManager;
5 import com.intellij.openapi.command.undo.BasicUndoableAction;
6 import com.intellij.openapi.command.undo.UnexpectedUndoException;
7 import com.intellij.openapi.diagnostic.Logger;
8 import com.intellij.openapi.editor.Editor;
9 import com.intellij.openapi.fileEditor.FileEditor;
10 import com.intellij.openapi.fileEditor.FileEditorManager;
11 import com.intellij.openapi.fileEditor.TextEditor;
12 import com.intellij.openapi.project.Project;
13 import com.intellij.openapi.vfs.VirtualFile;
14 import com.jetbrains.edu.coursecreator.CCUtils;
15 import com.jetbrains.edu.learning.StudyUtils;
16 import com.jetbrains.edu.learning.core.EduUtils;
17 import com.jetbrains.edu.learning.courseFormat.Course;
18 import com.jetbrains.edu.learning.courseFormat.Task;
19 import com.jetbrains.edu.learning.courseFormat.TaskFile;
21 import java.io.IOException;
24 public class CCHideFromStudent extends CCTaskFileActionBase {
26 private static final Logger LOG = Logger.getInstance(CCHideFromStudent.class);
27 private static final String ACTION_NAME = "Hide from Student";
29 public CCHideFromStudent() {
34 protected void performAction(VirtualFile file, Task task, Course course, Project project) {
35 TaskFile taskFile = StudyUtils.getTaskFile(project, file);
36 if (taskFile == null) {
39 EduUtils.runUndoableAction(project, ACTION_NAME, new HideTaskFile(project, course, file, task, taskFile));
42 private static class HideTaskFile extends BasicUndoableAction {
44 private final Project myProject;
45 private final Course myCourse;
46 private final VirtualFile myFile;
47 private final Task myTask;
48 private final TaskFile myTaskFile;
50 public HideTaskFile(Project project, Course course, VirtualFile file, Task task, TaskFile taskFile) {
56 myTaskFile = taskFile;
60 public void undo() throws UnexpectedUndoException {
61 myTask.getTaskFiles().put(myFile.getName(), myTaskFile);
62 CCUtils.createResourceFile(myFile, myCourse, StudyUtils.getTaskDir(myFile));
63 if (!myTaskFile.getAnswerPlaceholders().isEmpty() && FileEditorManager.getInstance(myProject).isFileOpen(myFile)) {
64 for (FileEditor fileEditor : FileEditorManager.getInstance(myProject).getEditors(myFile)) {
65 if (fileEditor instanceof TextEditor) {
66 Editor editor = ((TextEditor)fileEditor).getEditor();
67 StudyUtils.drawAllWindows(editor, myTaskFile);
71 ProjectView.getInstance(myProject).refresh();
75 public void redo() throws UnexpectedUndoException {
76 hideFromStudent(myFile, myProject, myTask.getTaskFiles(), myTaskFile);
77 ProjectView.getInstance(myProject).refresh();
81 public boolean isGlobal() {
86 public static void hideFromStudent(VirtualFile file, Project project, Map<String, TaskFile> taskFiles, TaskFile taskFile) {
87 if (!taskFile.getAnswerPlaceholders().isEmpty() && FileEditorManager.getInstance(project).isFileOpen(file)) {
88 for (FileEditor fileEditor : FileEditorManager.getInstance(project).getEditors(file)) {
89 if (fileEditor instanceof TextEditor) {
90 Editor editor = ((TextEditor)fileEditor).getEditor();
91 editor.getMarkupModel().removeAllHighlighters();
95 String name = file.getName();
96 VirtualFile patternFile = StudyUtils.getPatternFile(taskFile, name);
97 ApplicationManager.getApplication().runWriteAction(() -> {
98 if (patternFile != null) {
100 patternFile.delete(CCHideFromStudent.class);
102 catch (IOException e) {
107 taskFiles.remove(name);
111 protected boolean isAvailable(Project project, VirtualFile file) {
112 return StudyUtils.getTaskFile(project, file) != null;