migrate old task with subtasks (task.html -> task_subtask0.html)

This commit is contained in:
Ekaterina Tuzova
2017-03-30 17:23:40 +03:00
parent 3c478b20ec
commit f7d3c384ca
2 changed files with 46 additions and 5 deletions
@@ -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) {
@@ -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;