create resource files for created task files
[idea/community.git] / python / educational-core / course-creator / src / com / jetbrains / edu / coursecreator / CCVirtualFileListener.java
index 6a7eda601c07d93440b312d68e71a6036c9a963d..2b42574ea9466ea593e2405eecedfdbe42557787 100644 (file)
@@ -1,7 +1,9 @@
 package com.jetbrains.edu.coursecreator;
 
+import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectUtil;
+import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.vfs.VirtualFileAdapter;
 import com.intellij.openapi.vfs.VirtualFileEvent;
@@ -13,8 +15,13 @@ import com.jetbrains.edu.learning.courseFormat.Task;
 import com.jetbrains.edu.learning.courseFormat.TaskFile;
 import org.jetbrains.annotations.NotNull;
 
+import java.io.File;
+import java.io.IOException;
+
 public class CCVirtualFileListener extends VirtualFileAdapter {
 
+  private static final Logger LOG = Logger.getInstance(CCVirtualFileListener.class);
+
   @Override
   public void fileCreated(@NotNull VirtualFileEvent event) {
     VirtualFile createdFile = event.getFile();
@@ -43,6 +50,31 @@ public class CCVirtualFileListener extends VirtualFileAdapter {
     if (task == null) {
       return;
     }
+
+    createResourceFile(createdFile, course, taskVF);
+
     task.addTaskFile(createdFile.getName(), 1);
   }
+
+  private static void createResourceFile(VirtualFile createdFile, Course course, VirtualFile taskVF) {
+    VirtualFile lessonVF = taskVF.getParent();
+    if (lessonVF == null) {
+      return;
+    }
+
+    String taskResourcesPath = FileUtil.join(course.getCourseDirectory(), lessonVF.getName(), taskVF.getName());
+    File taskResourceFile = new File(taskResourcesPath);
+    if (!taskResourceFile.exists()) {
+      if (!taskResourceFile.mkdirs()) {
+        LOG.info("Failed to create resources for task " + taskResourcesPath);
+      }
+    }
+    try {
+      File toFile = new File(taskResourceFile, createdFile.getName());
+      FileUtil.copy(new File(createdFile.getPath()), toFile);
+    }
+    catch (IOException e) {
+      LOG.info("Failed to copy created task file to resources " + createdFile.getPath());
+    }
+  }
 }