From 2f01baafbabb2c7a44d1a8c36dfaf0c265d2f6b1 Mon Sep 17 00:00:00 2001 From: "liana.bakradze" Date: Mon, 18 Apr 2016 13:42:33 +0300 Subject: [PATCH] add ability to hide file from student --- .../resources/META-INF/plugin.xml | 6 +- .../actions/CCAddAsTaskFile.java | 42 ++---- .../actions/CCCreateTaskFile.java | 129 ------------------ .../actions/CCHideFromStudent.java | 45 ++++++ .../actions/CCTaskFileActionBase.java | 59 ++++++++ 5 files changed, 114 insertions(+), 167 deletions(-) delete mode 100644 python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java create mode 100644 python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCHideFromStudent.java create mode 100644 python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCTaskFileActionBase.java diff --git a/python/educational-core/course-creator/resources/META-INF/plugin.xml b/python/educational-core/course-creator/resources/META-INF/plugin.xml index def669884579..ed0795f78ba3 100644 --- a/python/educational-core/course-creator/resources/META-INF/plugin.xml +++ b/python/educational-core/course-creator/resources/META-INF/plugin.xml @@ -47,12 +47,10 @@ - - - - + + diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCAddAsTaskFile.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCAddAsTaskFile.java index fa5423922e37..c62bd5e1e069 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCAddAsTaskFile.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCAddAsTaskFile.java @@ -1,46 +1,20 @@ package com.jetbrains.edu.coursecreator.actions; -import com.intellij.ide.projectView.ProjectView; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.edu.coursecreator.CCUtils; import com.jetbrains.edu.learning.StudyUtils; +import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.Task; -public class CCAddAsTaskFile extends AnAction { - @Override - public void actionPerformed(final AnActionEvent e) { - Project project = e.getProject(); - if (project == null) { - return; - } - final VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); - if (file == null) { - return; - } - Task task = StudyUtils.getTask(project, file); - if (task == null) { - return; - } +public class CCAddAsTaskFile extends CCTaskFileActionBase { + + protected void performAction(VirtualFile file, Task task, Course course, Project project) { task.addTaskFile(file.getName(), task.getTaskFiles().size()); - ProjectView.getInstance(project).refresh(); + CCUtils.createResourceFile(file, course, StudyUtils.getTaskDir(file)); } - - @Override - public void update(AnActionEvent e) { - Project project = e.getProject(); - Presentation presentation = e.getPresentation(); - if (project == null) { - presentation.setEnabledAndVisible(false); - return; - } - VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); - if (file == null || file.isDirectory() || StudyUtils.getTaskFile(project, file) != null) { - presentation.setEnabledAndVisible(false); - } + protected boolean isAvailable(Project project, VirtualFile file) { + return StudyUtils.getTaskFile(project, file) == null && !CCUtils.isTestsFile(project, file); } } diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java deleted file mode 100644 index 88e14494ef39..000000000000 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.jetbrains.edu.coursecreator.actions; - -import com.intellij.icons.AllIcons; -import com.intellij.ide.IdeView; -import com.intellij.ide.fileTemplates.FileTemplate; -import com.intellij.ide.fileTemplates.FileTemplateUtil; -import com.intellij.ide.projectView.ProjectView; -import com.intellij.ide.util.DirectoryChooserUtil; -import com.intellij.ide.util.EditorHelper; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.LangDataKeys; -import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.project.DumbAwareAction; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.jetbrains.edu.learning.StudyTaskManager; -import com.jetbrains.edu.learning.core.EduNames; -import com.jetbrains.edu.learning.courseFormat.Course; -import com.jetbrains.edu.learning.courseFormat.Lesson; -import com.jetbrains.edu.learning.courseFormat.Task; -import com.jetbrains.edu.coursecreator.CCLanguageManager; -import com.jetbrains.edu.coursecreator.CCUtils; -import com.jetbrains.edu.coursecreator.ui.CreateTaskFileDialog; -import org.jetbrains.annotations.NotNull; - -import static com.intellij.openapi.ui.DialogWrapper.OK_EXIT_CODE; - -public class CCCreateTaskFile extends DumbAwareAction { - - public CCCreateTaskFile() { - super("Task File", "Create new Task File", AllIcons.FileTypes.Text); - } - - @Override - public void actionPerformed(final AnActionEvent e) { - final IdeView view = e.getData(LangDataKeys.IDE_VIEW); - final Project project = e.getData(CommonDataKeys.PROJECT); - - if (view == null || project == null) { - return; - } - final PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view); - if (taskDir == null) return; - PsiDirectory lessonDir = taskDir.getParent(); - if (lessonDir == null) { - return; - } - final Course course = StudyTaskManager.getInstance(project).getCourse(); - final Lesson lesson = course.getLesson(lessonDir.getName()); - final Task task = lesson.getTask(taskDir.getName()); - - final int index = task.getTaskFiles().size() + 1; - String generatedName = "file" + index; - CreateTaskFileDialog dialog = new CreateTaskFileDialog(project, generatedName, course); - dialog.show(); - if (dialog.getExitCode() != OK_EXIT_CODE) { - return; - } - final String name = dialog.getFileName(); - if (name == null) return; - FileType type = dialog.getFileType(); - if (type == null) { - return; - } - final CCLanguageManager CCLanguageManager = CCUtils.getStudyLanguageManager(course); - if (CCLanguageManager == null) { - return; - } - final String extension = type.getDefaultExtension(); - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - final FileTemplate taskTemplate = CCLanguageManager.getTaskFileTemplateForExtension(project, extension); - final String taskFileName = name + "." + extension; - try { - if (taskTemplate == null) { - VirtualFile file = taskDir.getVirtualFile().createChildData(this, taskFileName); - ProjectView.getInstance(project).select(file, file, false); - FileEditorManager.getInstance(project).openFile(file, true); - } - else { - final PsiElement taskFile = FileTemplateUtil.createFromTemplate(taskTemplate, taskFileName, null, taskDir); - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - EditorHelper.openInEditor(taskFile, false); - view.selectElement(taskFile); - } - }); - } - task.addTaskFile(taskFileName, index); - } - catch (Exception ignored) { - } - } - }); - } - - @Override - public void update(@NotNull AnActionEvent event) { - final Presentation presentation = event.getPresentation(); - presentation.setEnabledAndVisible(false); - final Project project = event.getData(CommonDataKeys.PROJECT); - if (project == null) { - return; - } - final IdeView view = event.getData(LangDataKeys.IDE_VIEW); - if (view == null) { - return; - } - - final PsiDirectory[] directories = view.getDirectories(); - if (directories.length == 0) { - return; - } - final PsiDirectory directory = DirectoryChooserUtil.getOrChooseDirectory(view); - final Course course = StudyTaskManager.getInstance(project).getCourse(); - if (course != null && directory != null && !directory.getName().contains(EduNames.TASK)) { - return; - } - presentation.setEnabledAndVisible(true); - } -} diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCHideFromStudent.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCHideFromStudent.java new file mode 100644 index 000000000000..07cd46cfdf20 --- /dev/null +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCHideFromStudent.java @@ -0,0 +1,45 @@ +package com.jetbrains.edu.coursecreator.actions; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.edu.learning.StudyUtils; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.Task; +import com.jetbrains.edu.learning.courseFormat.TaskFile; + +import java.io.IOException; +import java.util.Map; + +public class CCHideFromStudent extends CCTaskFileActionBase { + + private static final Logger LOG = Logger.getInstance(CCHideFromStudent.class); + + @Override + protected void performAction(VirtualFile file, Task task, Course course, Project project) { + Map taskFiles = task.getTaskFiles(); + TaskFile taskFile = StudyUtils.getTaskFile(project, file); + if (taskFile == null) { + return; + } + String name = file.getName(); + VirtualFile patternFile = StudyUtils.getPatternFile(taskFile, name); + ApplicationManager.getApplication().runWriteAction(() -> { + if (patternFile != null) { + try { + patternFile.delete(CCHideFromStudent.class); + } + catch (IOException e) { + LOG.info(e); + } + } + }); + taskFiles.remove(name); + } + + @Override + protected boolean isAvailable(Project project, VirtualFile file) { + return StudyUtils.getTaskFile(project, file) != null; + } +} diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCTaskFileActionBase.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCTaskFileActionBase.java new file mode 100644 index 000000000000..4f0632e82ee8 --- /dev/null +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCTaskFileActionBase.java @@ -0,0 +1,59 @@ +package com.jetbrains.edu.coursecreator.actions; + +import com.intellij.ide.projectView.ProjectView; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.edu.coursecreator.CCUtils; +import com.jetbrains.edu.learning.StudyTaskManager; +import com.jetbrains.edu.learning.StudyUtils; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.Task; + +public abstract class CCTaskFileActionBase extends AnAction { + + @Override + public void actionPerformed(final AnActionEvent e) { + Project project = e.getProject(); + if (project == null) { + return; + } + final VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); + if (file == null) { + return; + } + VirtualFile taskVF = file.getParent(); + if (taskVF == null) { + return; + } + Task task = StudyUtils.getTask(project, taskVF); + if (task == null) { + return; + } + Course course = StudyTaskManager.getInstance(project).getCourse(); + performAction(file, task, course, project); + ProjectView.getInstance(project).refresh(); + } + + protected abstract void performAction(VirtualFile file, Task task, Course course, Project project); + + + @Override + public void update(AnActionEvent e) { + Project project = e.getProject(); + Presentation presentation = e.getPresentation(); + if (project == null || !CCUtils.isCourseCreator(project)) { + presentation.setEnabledAndVisible(false); + return; + } + VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); + if (file == null || file.isDirectory() || !isAvailable(project, file)) { + presentation.setEnabledAndVisible(false); + } + } + + protected abstract boolean isAvailable(Project project, VirtualFile file); +}