add new files as task files

This commit is contained in:
liana.bakradze
2016-04-04 15:18:29 +03:00
parent ecaf938cf9
commit b32423a934
7 changed files with 95 additions and 19 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

View 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);
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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());
}
}

View File

@@ -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());
}
}