add virtual file listener on course creation

This commit is contained in:
Ekaterina Tuzova
2017-04-10 18:30:09 +03:00
parent 42324efe82
commit a5c2608205
3 changed files with 21 additions and 12 deletions
@@ -26,7 +26,7 @@ import java.util.Map;
public class CCProjectComponent extends AbstractProjectComponent {
private static final Logger LOG = Logger.getInstance(CCProjectComponent.class);
private final CCVirtualFileListener myTaskFileLifeListener = new CCVirtualFileListener();
private CCVirtualFileListener myTaskFileLifeListener;
private final Project myProject;
protected CCProjectComponent(Project project) {
@@ -106,11 +106,18 @@ public class CCProjectComponent extends AbstractProjectComponent {
public void projectOpened() {
migrateIfNeeded();
if (CCUtils.isCourseCreator(myProject)) {
VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener);
registerListener();
EduUsagesCollector.projectTypeOpened(CCUtils.COURSE_MODE);
}
}
public void registerListener() {
if (myTaskFileLifeListener == null) {
myTaskFileLifeListener = new CCVirtualFileListener(myProject);
VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener);
}
}
public void projectClosed() {
VirtualFileManager.getInstance().removeVirtualFileListener(myTaskFileLifeListener);
}
@@ -17,6 +17,11 @@ import com.jetbrains.edu.learning.courseFormat.tasks.Task;
import org.jetbrains.annotations.NotNull;
public class CCVirtualFileListener implements VirtualFileListener {
private final Project myProject;
public CCVirtualFileListener(Project project) {
myProject = project;
}
@Override
public void fileCreated(@NotNull VirtualFileEvent event) {
@@ -27,18 +32,14 @@ public class CCVirtualFileListener implements VirtualFileListener {
if (createdFile.getPath().contains(CCUtils.GENERATED_FILES_FOLDER)) {
return;
}
Project project = ProjectUtil.guessProjectForFile(createdFile);
if (project == null) {
if (myProject.getBasePath() !=null && !FileUtil.isAncestor(myProject.getBasePath(), createdFile.getPath(), true)) {
return;
}
if (project.getBasePath() !=null && !FileUtil.isAncestor(project.getBasePath(), createdFile.getPath(), true)) {
return;
}
Course course = StudyTaskManager.getInstance(project).getCourse();
Course course = StudyTaskManager.getInstance(myProject).getCourse();
if (course == null) {
return;
}
TaskFile taskFile = StudyUtils.getTaskFile(project, createdFile);
TaskFile taskFile = StudyUtils.getTaskFile(myProject, createdFile);
if (taskFile != null) {
return;
}
@@ -50,7 +51,7 @@ public class CCVirtualFileListener implements VirtualFileListener {
return;
}
if (CCUtils.isTestsFile(project, createdFile)
if (CCUtils.isTestsFile(myProject, createdFile)
|| StudyUtils.isTaskDescriptionFile(createdFile.getName())
|| taskRelativePath.contains(EduNames.WINDOW_POSTFIX)
|| taskRelativePath.contains(EduNames.WINDOWS_POSTFIX)
@@ -61,7 +62,7 @@ public class CCVirtualFileListener implements VirtualFileListener {
if (taskVF == null) {
return;
}
Task task = StudyUtils.getTask(project, taskVF);
Task task = StudyUtils.getTask(myProject, taskVF);
if (task == null) {
return;
}
@@ -58,7 +58,8 @@ public class PyCCProjectGenerator extends PythonProjectGenerator<PyNewProjectSet
@Nullable final PyProjectSynchronizer synchronizer) {
final Course course = getCourse(project, mySettingsPanel);
EduUsagesCollector.projectTypeCreated(CCUtils.COURSE_MODE);
final CCProjectComponent component = project.getComponent(CCProjectComponent.class);
component.registerListener();
final PsiDirectory projectDir = PsiManager.getInstance(project).findDirectory(baseDir);
if (projectDir == null) return;
new WriteCommandAction.Simple(project) {