multiple bundled courses available

This commit is contained in:
Ekaterina Tuzova
2017-04-06 14:54:32 +03:00
parent 20685771ba
commit dcb5454532
4 changed files with 21 additions and 13 deletions
@@ -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<EduPluginConfigurator> INSTANCE = new LanguageExtension<>(EP_NAME);
@@ -126,7 +129,7 @@ public interface EduPluginConfigurator {
@Nullable String moduleDir) {
}
default String getBundledCoursePath() {
return null;
default List<String> getBundledCoursePaths() {
return Collections.emptyList();
}
}
@@ -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<Course> getBundledCourses() {
final ArrayList<Course> courses = new ArrayList<>();
final LanguageExtensionPoint<EduPluginConfigurator>[] extensions = Extensions.getExtensions(EduPluginConfigurator.EP_NAME, null);
for (LanguageExtensionPoint<EduPluginConfigurator> extension : extensions) {
final EduPluginConfigurator configurator = extension.getInstance();
final String path = configurator.getBundledCoursePath();
if (path != null) {
return getCourse(path);
final List<String> paths = configurator.getBundledCoursePaths();
for (String path : paths) {
courses.add(getCourse(path));
}
}
return null;
return courses;
}
@Nullable
@@ -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<String> 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());
}
}
@@ -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<String> 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;