support for tasks and lessons as separate modules

This commit is contained in:
Liana Bakradze
2016-02-15 13:47:16 +03:00
parent 2166cd0886
commit 0137d2fb92
4 changed files with 30 additions and 18 deletions
@@ -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());
@@ -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()) {
@@ -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);
@@ -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);
}