mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
add new files as task files
This commit is contained in:
@@ -3,6 +3,7 @@ package com.jetbrains.edu.coursecreator;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.lang.LanguageExtension;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -21,4 +22,8 @@ public interface CCLanguageManager {
|
||||
FileTemplate getTestsTemplate(@NotNull final Project project);
|
||||
|
||||
boolean doNotPackFile(File pathname);
|
||||
|
||||
default boolean isTestFile(VirtualFile file) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,13 @@
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.openapi.components.ProjectComponent;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.editor.event.EditorFactoryEvent;
|
||||
import com.intellij.openapi.editor.impl.EditorFactoryImpl;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CCProjectComponent implements ProjectComponent {
|
||||
private final Project myProject;
|
||||
private final CCVirtualFileListener myTaskFileLifeListener = new CCVirtualFileListener();
|
||||
private CCFileDeletedListener myListener;
|
||||
|
||||
public CCProjectComponent(Project project) {
|
||||
@@ -25,6 +15,7 @@ public class CCProjectComponent implements ProjectComponent {
|
||||
}
|
||||
|
||||
public void initComponent() {
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener);
|
||||
}
|
||||
|
||||
public void disposeComponent() {
|
||||
@@ -36,14 +27,15 @@ public class CCProjectComponent implements ProjectComponent {
|
||||
}
|
||||
|
||||
public void projectOpened() {
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener);
|
||||
StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final Course course = CCProjectService.getInstance(myProject).getCourse();
|
||||
if (course != null) {
|
||||
course.initCourse(true);
|
||||
myListener = new CCFileDeletedListener(myProject);
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(myListener);
|
||||
myTaskFileLifeListener = new CCFileDeletedListener(myProject);
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener);
|
||||
final CCEditorFactoryListener editorFactoryListener = new CCEditorFactoryListener();
|
||||
EditorFactory.getInstance().addEditorFactoryListener(editorFactoryListener, myProject);
|
||||
VirtualFile[] files = FileEditorManager.getInstance(myProject).getOpenFiles();
|
||||
@@ -64,8 +56,9 @@ public class CCProjectComponent implements ProjectComponent {
|
||||
}
|
||||
|
||||
public void projectClosed() {
|
||||
VirtualFileManager.getInstance().removeVirtualFileListener(myTaskFileLifeListener);
|
||||
if (myListener != null) {
|
||||
VirtualFileManager.getInstance().removeVirtualFileListener(myListener);
|
||||
VirtualFileManager.getInstance().removeVirtualFileListener(myTaskFileLifeListener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,4 +178,16 @@ public class CCUtils {
|
||||
|
||||
return COURSE_MODE.equals(course.getCourseMode());
|
||||
}
|
||||
|
||||
public static boolean isTestsFile(@NotNull Project project, @NotNull VirtualFile file) {
|
||||
Course course = StudyTaskManager.getInstance(project).getCourse();
|
||||
if (course == null) {
|
||||
return false;
|
||||
}
|
||||
CCLanguageManager manager = getStudyLanguageManager(course);
|
||||
if (manager == null) {
|
||||
return false;
|
||||
}
|
||||
return manager.isTestFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileAdapter;
|
||||
import com.intellij.openapi.vfs.VirtualFileEvent;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import com.jetbrains.edu.learning.courseFormat.TaskFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CCVirtualFileListener extends VirtualFileAdapter {
|
||||
|
||||
@Override
|
||||
public void fileCreated(@NotNull VirtualFileEvent event) {
|
||||
VirtualFile createdFile = event.getFile();
|
||||
Project project = ProjectUtil.guessProjectForContentFile(createdFile);
|
||||
if (project == null) {
|
||||
return;
|
||||
}
|
||||
Course course = StudyTaskManager.getInstance(project).getCourse();
|
||||
if (course == null || !CCUtils.isCourseCreator(project)) {
|
||||
return;
|
||||
}
|
||||
TaskFile taskFile = StudyUtils.getTaskFile(project, createdFile);
|
||||
if (taskFile != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (CCUtils.isTestsFile(project, createdFile) || EduNames.TASK_HTML.equals(createdFile.getName())) {
|
||||
return;
|
||||
}
|
||||
|
||||
VirtualFile taskVF = createdFile.getParent();
|
||||
if (taskVF == null) {
|
||||
return;
|
||||
}
|
||||
Task task = StudyUtils.getTask(project,taskVF);
|
||||
if (task == null) {
|
||||
return;
|
||||
}
|
||||
task.addTaskFile(createdFile.getName(), 1);
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -110,10 +109,6 @@ public class CCCreateTask extends CCCreateStudyItemActionBase {
|
||||
if (defaultExtension != null) {
|
||||
FileTemplate taskFileTemplate = manager.getTaskFileTemplateForExtension(project, defaultExtension);
|
||||
createFromTemplate(taskDirectory.get(), taskFileTemplate, view, true);
|
||||
if (taskFileTemplate != null) {
|
||||
String taskFileName = FileUtil.getNameWithoutExtension(taskFileTemplate.getName());
|
||||
((Task)item).addTaskFile(taskFileName + "." + defaultExtension, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,4 +497,21 @@ public class StudyUtils {
|
||||
public static boolean isStudyProject(Project project) {
|
||||
return StudyTaskManager.getInstance(project).getCourse() != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Task getTask(@NotNull Project project, @NotNull VirtualFile taskVF) {
|
||||
Course course = StudyTaskManager.getInstance(project).getCourse();
|
||||
if (course == null) {
|
||||
return null;
|
||||
}
|
||||
VirtualFile lessonVF = taskVF.getParent();
|
||||
if (lessonVF == null) {
|
||||
return null;
|
||||
}
|
||||
Lesson lesson = course.getLesson(lessonVF.getName());
|
||||
if (lesson == null) {
|
||||
return null;
|
||||
}
|
||||
return lesson.getTask(taskVF.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.jetbrains.edu.coursecreator;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -40,4 +41,9 @@ public class PyCCLanguageManager implements CCLanguageManager {
|
||||
private static FileTemplate getInternalTemplateByName(@NotNull final Project project, String name) {
|
||||
return FileTemplateManager.getInstance(project).getInternalTemplate(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTestFile(VirtualFile file) {
|
||||
return EduNames.TESTS_FILE.equals(file.getName());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user