From f7d3c384ca1ab8cbbe89e2b26ec1591f6c65a675 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Mar 2017 15:05:09 +0300 Subject: [PATCH] migrate old task with subtasks (task.html -> task_subtask0.html) --- .../edu/learning/StudySerializationUtils.java | 44 +++++++++++++++++-- .../edu/learning/stepic/StepicWrappers.java | 7 ++- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java b/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java index 3f528eb32d84..c782034265d9 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java @@ -8,6 +8,7 @@ import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; @@ -441,11 +442,15 @@ public class StudySerializationUtils { public static final String TASK_LIST = "task_list"; public static final String TASK_FILES = "task_files"; public static final String FILES = "files"; + public static final String TESTS = "test"; + public static final String TEXTS = "text"; public static final String HINTS = "hints"; public static final String SUBTASK_INFOS = "subtask_infos"; public static final String FORMAT_VERSION = "format_version"; public static final String INDEX = "index"; public static final String TASK_TYPE = "task_type"; + public static final String NAME = "name"; + public static final String LAST_SUBTASK = "last_subtask_index"; private Json() { } @@ -518,9 +523,11 @@ public class StudySerializationUtils { switch (version) { case 1: stepOptionsJson = convertToSecondVersion(stepOptionsJson); - // uncomment for future versions - //case 2: - // stepOptionsJson = convertToThirdVersion(stepOptionsJson); + case 2: + stepOptionsJson = convertToThirdVersion(stepOptionsJson); + // uncomment for future versions + //case 3: + // stepOptionsJson = convertToFourthVersion(stepOptionsJson); } convertSubtaskInfosToMap(stepOptionsJson); StepicWrappers.StepOptions stepOptions = @@ -530,6 +537,37 @@ public class StudySerializationUtils { return stepOptions; } + private JsonObject convertToThirdVersion(JsonObject stepOptionsJson) { + if (!stepOptionsJson.has(LAST_SUBTASK)) return stepOptionsJson; + final int lastSubtaskIndex = stepOptionsJson.get(LAST_SUBTASK).getAsInt(); + if (lastSubtaskIndex == 0) return stepOptionsJson; + final JsonArray tests = stepOptionsJson.getAsJsonArray(TESTS); + if (tests.size() > 0) { + final JsonObject fileWrapper = tests.get(0).getAsJsonObject(); + if (fileWrapper.has(NAME)) { + replaceWithSubtask(fileWrapper); + } + } + final JsonArray descriptions = stepOptionsJson.getAsJsonArray(TEXTS); + if (descriptions.size() > 0) { + final JsonObject fileWrapper = descriptions.get(0).getAsJsonObject(); + if (fileWrapper.has(NAME)) { + replaceWithSubtask(fileWrapper); + } + } + return stepOptionsJson; + } + + private void replaceWithSubtask(JsonObject fileWrapper) { + final String file = fileWrapper.get(NAME).getAsString(); + final String extension = FileUtilRt.getExtension(file); + final String name = FileUtil.getNameWithoutExtension(file); + if (!name.contains(EduNames.SUBTASK_MARKER)) { + fileWrapper.remove(NAME); + fileWrapper.add(NAME, new JsonPrimitive(name + "_subtask0." + extension)); + } + } + private static JsonObject convertSubtaskInfosToMap(JsonObject stepOptionsJson) { final JsonArray files = stepOptionsJson.getAsJsonArray(FILES); if (files != null) { diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java index b2285b1c7683..a1f84bb0facf 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java @@ -12,7 +12,10 @@ import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.edu.learning.StudyUtils; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.core.EduUtils; -import com.jetbrains.edu.learning.courseFormat.*; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.CourseInfo; +import com.jetbrains.edu.learning.courseFormat.Lesson; +import com.jetbrains.edu.learning.courseFormat.TaskFile; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; import org.apache.commons.codec.binary.Base64; @@ -55,7 +58,7 @@ public class StepicWrappers { @Expose Integer executionTimeLimit; @Expose CodeTemplatesWrapper codeTemplates; @SerializedName("format_version") - @Expose public int formatVersion = 2; + @Expose public int formatVersion = 3; @SerializedName("last_subtask_index") @Expose int lastSubtaskIndex = 0;