support for tasks and lessons as separate modules
authorLiana Bakradze <liana.bakradze@jetbrains.com>
Mon, 15 Feb 2016 10:46:26 +0000 (13:46 +0300)
committerLiana Bakradze <liana.bakradze@jetbrains.com>
Mon, 15 Feb 2016 10:47:16 +0000 (13:47 +0300)
python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java
python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java
python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java
python/educational-core/student/src/com/jetbrains/edu/learning/projectView/StudyDirectoryNode.java

index a97e979f06f651b9e4c630a4da75936ba70b4137..a1ed979c5309f42894b6c2b031fb0e120bcf39c9 100644 (file)
@@ -235,10 +235,17 @@ public class StudyUtils {
     if (course == null) {
       return null;
     }
-    final VirtualFile taskDir = file.getParent();
+    VirtualFile taskDir = file.getParent();
     if (taskDir == null) {
       return null;
     }
+    //need this because of multi-module generation
+    if ("src".equals(taskDir.getName())) {
+      taskDir = taskDir.getParent();
+      if (taskDir == null) {
+        return null;
+      }
+    }
     final String taskDirName = taskDir.getName();
     if (taskDirName.contains(EduNames.TASK)) {
       final VirtualFile lessonDir = taskDir.getParent();
@@ -392,6 +399,12 @@ public class StudyUtils {
     }
     if (taskDirectory != null) {
       VirtualFile taskTextFile = taskDirectory.findChild(EduNames.TASK_HTML);
+      if (taskTextFile == null) {
+        VirtualFile srcDir = taskDirectory.findChild("src");
+        if (srcDir != null) {
+           taskTextFile = srcDir.findChild(EduNames.TASK_HTML);
+        }
+      }
       if (taskTextFile != null) {
         try {
           return FileUtil.loadTextAndClose(taskTextFile.getInputStream());
index 54ede8fc64c7c903ccd74f2fa2c07a43e3ebb636..b4e8d16905f055a753d842e30221e8f567efd967 100644 (file)
@@ -92,7 +92,8 @@ abstract public class StudyTaskNavigationAction extends DumbAwareAction {
     for (Map.Entry<String, TaskFile> entry : nextTaskFiles.entrySet()) {
       String name = entry.getKey();
       TaskFile taskFile = entry.getValue();
-      VirtualFile vf = taskDir.findChild(name);
+      VirtualFile srcDir = taskDir.findChild("src");
+      VirtualFile vf = srcDir == null ? taskDir.findChild(name) : srcDir.findChild(name);
       if (vf != null) {
         FileEditorManager.getInstance(project).openFile(vf, true);
         if (!taskFile.getAnswerPlaceholders().isEmpty()) {
index 5d5c0f7b779937635df2245979ec1b55e75f08c2..dc0eb04cee57b10ea0ed3207c0abe8f4667e2454 100644 (file)
@@ -46,10 +46,10 @@ import java.util.Map;
 public class StudyProjectGenerator {
   private static final Logger LOG = Logger.getInstance(StudyProjectGenerator.class.getName());
   private final List<SettingsListener> myListeners = ContainerUtil.newArrayList();
-  private static final File ourCoursesDir = new File(PathManager.getConfigPath(), "courses");
+  protected static final File ourCoursesDir = new File(PathManager.getConfigPath(), "courses");
   private static final String CACHE_NAME = "courseNames.txt";
   private List<CourseInfo> myCourses = new ArrayList<>();
-  private CourseInfo mySelectedCourseInfo;
+  protected CourseInfo mySelectedCourseInfo;
   private static final String COURSE_NAME_ATTRIBUTE = "name";
   private static final String COURSE_DESCRIPTION = "description";
   public static final String AUTHOR_ATTRIBUTE = "authors";
@@ -82,7 +82,7 @@ public class StudyProjectGenerator {
                                                     })));
   }
 
-  private Course getCourse() {
+  protected Course getCourse() {
     Reader reader = null;
     try {
       final File courseFile = new File(new File(ourCoursesDir, mySelectedCourseInfo.getName()), EduNames.COURSE_META_FILE);
index 0a5e37c64709c8121b39c1cae04a7624685131dc..92bb2dfad28029651602c1c784d0fcb6cf877985 100644 (file)
@@ -41,7 +41,7 @@ public class StudyDirectoryNode extends PsiDirectoryNode {
     String valueName = myValue.getName();
     StudyTaskManager studyTaskManager = StudyTaskManager.getInstance(myProject);
     Course course = studyTaskManager.getCourse();
-    if (course == null || valueName == null) {
+    if (course == null) {
       return;
     }
     if (valueName.equals(myProject.getName())) {
@@ -50,19 +50,17 @@ public class StudyDirectoryNode extends PsiDirectoryNode {
       data.addText(course.getName(), new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, JBColor.BLACK));
     }
     else if (valueName.contains(EduNames.TASK)) {
-      TaskFile file = null;
-      for (PsiElement child : myValue.getChildren()) {
-        VirtualFile virtualFile = child instanceof PsiDirectory ? ((PsiDirectory)child).getVirtualFile() :
-                                  child.getContainingFile().getVirtualFile();
-        file = StudyUtils.getTaskFile(myProject, virtualFile);
-        if (file != null) {
-          break;
+      VirtualFile taskVirtualFile = myValue.getVirtualFile();
+      VirtualFile lessonVirtualFile = taskVirtualFile.getParent();
+      if (lessonVirtualFile != null) {
+        Lesson lesson = course.getLesson(lessonVirtualFile.getName());
+        if (lesson != null) {
+          Task task = lesson.getTask(taskVirtualFile.getName());
+          if (task != null) {
+            setStudyAttributes(task, data, task.getName());
+          }
         }
       }
-      if (file != null) {
-        Task task = file.getTask();
-        setStudyAttributes(task, data, task.getName());
-      }
     }
     else if (valueName.contains(EduNames.LESSON)) {
       int lessonIndex = Integer.parseInt(valueName.substring(EduNames.LESSON.length())) - 1;
@@ -73,7 +71,7 @@ public class StudyDirectoryNode extends PsiDirectoryNode {
     else if (valueName.contains(EduNames.SANDBOX_DIR)) {
       if (myValue.getParent() != null) {
         final String parentName = myValue.getParent().getName();
-        if (parentName!= null && !parentName.contains(EduNames.SANDBOX_DIR)) {
+        if (!parentName.contains(EduNames.SANDBOX_DIR)) {
           data.setPresentableText(EduNames.SANDBOX_DIR);
           data.setIcon(InteractiveLearningIcons.Sandbox);
         }