From 0137d2fb9241966a91fc60be920a0e4a03ca830e Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Mon, 15 Feb 2016 13:46:26 +0300 Subject: [PATCH] support for tasks and lessons as separate modules --- .../jetbrains/edu/learning/StudyUtils.java | 15 +++++++++++- .../actions/StudyTaskNavigationAction.java | 3 ++- .../StudyProjectGenerator.java | 6 ++--- .../projectView/StudyDirectoryNode.java | 24 +++++++++---------- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java index a97e979f06f6..a1ed979c5309 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java @@ -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()); diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java index 54ede8fc64c7..b4e8d16905f0 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java @@ -92,7 +92,8 @@ abstract public class StudyTaskNavigationAction extends DumbAwareAction { for (Map.Entry 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()) { diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java b/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java index 5d5c0f7b7799..dc0eb04cee57 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java @@ -46,10 +46,10 @@ import java.util.Map; public class StudyProjectGenerator { private static final Logger LOG = Logger.getInstance(StudyProjectGenerator.class.getName()); private final List 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 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); diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/projectView/StudyDirectoryNode.java b/python/educational-core/student/src/com/jetbrains/edu/learning/projectView/StudyDirectoryNode.java index 0a5e37c64709..92bb2dfad280 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/projectView/StudyDirectoryNode.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/projectView/StudyDirectoryNode.java @@ -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); }