From dcb5454532872eca464db895c35da024ceb57481 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 31 Mar 2017 17:51:37 +0300 Subject: [PATCH] multiple bundled courses available --- .../edu/learning/EduPluginConfigurator.java | 7 +++++-- .../courseGeneration/StudyProjectGenerator.java | 13 +++++++------ .../edu/learning/PyEduPluginConfigurator.java | 8 +++++--- .../actions/PyStudyIntroductionCourseAction.java | 6 ++++-- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/python/educational-core/src/com/jetbrains/edu/learning/EduPluginConfigurator.java b/python/educational-core/src/com/jetbrains/edu/learning/EduPluginConfigurator.java index 74dd51a872c8..aaa21bbf5ead 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/EduPluginConfigurator.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/EduPluginConfigurator.java @@ -21,6 +21,9 @@ import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public interface EduPluginConfigurator { String EP_NAME = "Edu.pluginConfigurator"; LanguageExtension INSTANCE = new LanguageExtension<>(EP_NAME); @@ -126,7 +129,7 @@ public interface EduPluginConfigurator { @Nullable String moduleDir) { } - default String getBundledCoursePath() { - return null; + default List getBundledCoursePaths() { + return Collections.emptyList(); } } diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java index 285d8360148c..d3c8e43c37b3 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java @@ -119,7 +119,7 @@ public class StudyProjectGenerator { myCourses = execCancelable(() -> EduStepicConnector.getCourses(StepicUpdateSettings.getInstance().getUser())); } if (myCourses == null || myCourses.isEmpty() || (myCourses.size() == 1 && myCourses.contains(Course.INVALID_COURSE))) { - myCourses = Collections.singletonList(getBundledIntro()); + myCourses = getBundledCourses(); } sortCourses(myCourses); return myCourses; @@ -172,16 +172,17 @@ public class StudyProjectGenerator { } @Nullable - public Course getBundledIntro() { + public List getBundledCourses() { + final ArrayList courses = new ArrayList<>(); final LanguageExtensionPoint[] extensions = Extensions.getExtensions(EduPluginConfigurator.EP_NAME, null); for (LanguageExtensionPoint extension : extensions) { final EduPluginConfigurator configurator = extension.getInstance(); - final String path = configurator.getBundledCoursePath(); - if (path != null) { - return getCourse(path); + final List paths = configurator.getBundledCoursePaths(); + for (String path : paths) { + courses.add(getCourse(path)); } } - return null; + return courses; } @Nullable diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java index 8a8d37ebc5b0..e9039f5565f2 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java @@ -26,6 +26,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; +import java.util.Collections; +import java.util.List; public class PyEduPluginConfigurator implements EduPluginConfigurator { public static final String PYTHON_3 = "3.x"; @@ -129,15 +131,15 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { } @Override - public String getBundledCoursePath() { + public List getBundledCoursePaths() { @NonNls String jarPath = PathUtil.getJarPathForClass(PyEduPluginConfigurator.class); if (jarPath.endsWith(".jar")) { final File jarFile = new File(jarPath); File pluginBaseDir = jarFile.getParentFile(); - return new File(new File(pluginBaseDir, "courses"), "Introduction to Python.zip").getPath(); + return Collections.singletonList(new File(new File(pluginBaseDir, "courses"), "Introduction to Python.zip").getPath()); } - return new File(new File(jarPath, "courses"), "Introduction to Python.zip").getPath(); + return Collections.singletonList(new File(new File(jarPath, "courses"), "Introduction to Python.zip").getPath()); } } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/actions/PyStudyIntroductionCourseAction.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/actions/PyStudyIntroductionCourseAction.java index e2f33e58221a..83e3b70290bc 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/actions/PyStudyIntroductionCourseAction.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/actions/PyStudyIntroductionCourseAction.java @@ -29,6 +29,7 @@ import icons.InteractiveLearningPythonIcons; import org.jetbrains.annotations.NotNull; import java.io.File; +import java.util.List; public class PyStudyIntroductionCourseAction extends AnAction { @@ -46,7 +47,8 @@ public class PyStudyIntroductionCourseAction extends AnAction { return; } final EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(PythonLanguage.getInstance()); - if (configurator.getBundledCoursePath() != null) { + final List paths = configurator.getBundledCoursePaths(); + if (paths.isEmpty()) { return; } Presentation presentation = e.getPresentation(); @@ -63,7 +65,7 @@ public class PyStudyIntroductionCourseAction extends AnAction { else { final PyStudyDirectoryProjectGenerator generator = new PyStudyDirectoryProjectGenerator(true); final EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(PythonLanguage.getInstance()); - final String bundledCoursePath = configurator.getBundledCoursePath(); + final String bundledCoursePath = configurator.getBundledCoursePaths().get(0); Course introCourse = generator.getGenerator().getCourse(bundledCoursePath); if (introCourse == null) { return;