diff --git a/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java b/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java index 7087e4dc5e0c..a6e45bbd7c03 100644 --- a/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java +++ b/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java @@ -99,17 +99,18 @@ public class EduStepicConnector { } public static List getLessons(int sectionId) throws IOException { - final List lessons = - HttpRequests.request(stepicApiUrl + "sections/" + String.valueOf(sectionId)) - .connect(new HttpRequests.RequestProcessor>() { - @Override - public List process(@NotNull HttpRequests.Request request) throws IOException { - final BufferedReader reader = request.getReader(); - Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); - return gson.fromJson(reader, Course.class).getLessons(); - } - }); + final SectionWrapper sectionWrapper = HttpRequests.request(stepicApiUrl + "sections/" + String.valueOf(sectionId)) + .connect(new HttpRequests.RequestProcessor() { + + @Override + public SectionWrapper process(@NotNull HttpRequests.Request request) throws IOException { + final BufferedReader reader = request.getReader(); + Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); + return gson.fromJson(reader, SectionWrapper.class); + } + }); + final List lessons = getSortedLessons(sectionWrapper); for (Lesson lesson : lessons) { lesson.taskList = new ArrayList(); for (Integer s : lesson.steps) { @@ -133,6 +134,27 @@ public class EduStepicConnector { return lessons; } + @NotNull + private static List getSortedLessons(SectionWrapper sectionWrapper) { + final List lessons = sectionWrapper.lessons; + + final List units = sectionWrapper.sections.get(0).units; + final List wrapperUnits = sectionWrapper.units; + + final HashMap unitsMap = new HashMap(); + for (SectionWrapper.Unit unit : wrapperUnits) { + unitsMap.put(unit.lesson, unit.id); + } + Collections.sort(lessons, new Comparator() { + @Override + public int compare(Lesson l1, Lesson l2) { + + return units.indexOf(unitsMap.get(l1.id)) - units.indexOf(unitsMap.get(l2.id)); + } + }); + return lessons; + } + public static Step getStep(Integer step) throws IOException { return HttpRequests.request(stepicApiUrl + "steps/" + String.valueOf(step)).connect(new HttpRequests.RequestProcessor() { @@ -321,4 +343,20 @@ public class EduStepicConnector { } } + static class SectionWrapper { + static class Section { + List units; + } + + List
sections; + List lessons; + + static class Unit { + int id; + int lesson; + } + + List units; + + } }