From ce7f78de5f72b9ce451a0bf4af5039bfe43f5996 Mon Sep 17 00:00:00 2001 From: "Liana.Bakradze" Date: Fri, 7 Apr 2017 14:26:08 +0300 Subject: [PATCH] add separate class for PyCharm Task (EDU-882) --- .../CCSubtaskEditorNotificationProvider.java | 3 ++- .../jetbrains/edu/coursecreator/CCUtils.java | 3 ++- .../coursecreator/actions/CCCreateTask.java | 3 ++- .../edu/learning/StudySerializationUtils.java | 6 +++++- .../edu/learning/courseFormat/Lesson.java | 2 +- .../courseFormat/tasks/PyCharmTask.java | 21 +++++++++++++++++++ .../edu/learning/courseFormat/tasks/Task.java | 6 ++---- .../learning/stepic/EduStepicConnector.java | 3 ++- .../edu/coursecreator/CCTestCase.java | 3 ++- 9 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/PyCharmTask.java diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCSubtaskEditorNotificationProvider.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCSubtaskEditorNotificationProvider.java index 8c6c2a49b0fa..6189b8c9186f 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCSubtaskEditorNotificationProvider.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCSubtaskEditorNotificationProvider.java @@ -28,6 +28,7 @@ import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder; import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholderSubtaskInfo; import com.jetbrains.edu.learning.courseFormat.Lesson; import com.jetbrains.edu.learning.courseFormat.TaskFile; +import com.jetbrains.edu.learning.courseFormat.tasks.PyCharmTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; import org.jetbrains.annotations.NotNull; @@ -227,7 +228,7 @@ public class CCSubtaskEditorNotificationProvider extends EditorNotifications.Pro final Lesson lesson = myTask.getLesson(); final List list = lesson.getTaskList(); final int i = list.indexOf(myTask); - final Task task = new Task(); + final Task task = new PyCharmTask(); task.copyTaskParameters(myTask); for (TaskFile taskFile : task.getTaskFiles().values()) { taskFile.setTask(task); diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCUtils.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCUtils.java index 0b8815f4aa58..a8be51afe37f 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCUtils.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCUtils.java @@ -29,6 +29,7 @@ import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.Lesson; import com.jetbrains.edu.learning.courseFormat.StudyItem; import com.jetbrains.edu.learning.courseFormat.TaskFile; +import com.jetbrains.edu.learning.courseFormat.tasks.PyCharmTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import org.apache.commons.codec.binary.Base64; import org.jetbrains.annotations.NotNull; @@ -264,7 +265,7 @@ public class CCUtils { final Lesson lesson = new Lesson(); lesson.setName(EduNames.PYCHARM_ADDITIONAL); - final Task task = new Task(); + final Task task = new PyCharmTask(); task.setLesson(lesson); task.setName(EduNames.PYCHARM_ADDITIONAL); task.setIndex(1); diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java index 892f93ba0399..3f64f5dc4588 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java @@ -11,6 +11,7 @@ import com.jetbrains.edu.learning.core.EduUtils; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.Lesson; import com.jetbrains.edu.learning.courseFormat.StudyItem; +import com.jetbrains.edu.learning.courseFormat.tasks.PyCharmTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import icons.EducationalCoreIcons; import org.jetbrains.annotations.NotNull; @@ -109,7 +110,7 @@ public class CCCreateTask extends CCCreateStudyItemActionBase { @Override protected StudyItem createAndInitItem(@NotNull Course course, @Nullable StudyItem parentItem, String name, int index) { - final Task task = new Task(name); + final Task task = new PyCharmTask(name); task.setIndex(index); if (parentItem == null) { return null; 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 043625347769..fb5f151f69dd 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/StudySerializationUtils.java @@ -97,6 +97,7 @@ public class StudySerializationUtils { private static String THEORY_TAG = "theoryTask"; private static String ADAPTIVE_TASK_PARAMETERS = "adaptiveTaskParameters"; private static String ADAPTIVE = "adaptive"; + public static final String PYCHARM_TASK = "PyCharmTask"; private static String TASK_WITH_SUBTASKS = "TaskWithSubtasks"; private static String THEORY_TASK = "TheoryTask"; private static String CHOICE_TASK = "ChoiceTask"; @@ -285,6 +286,9 @@ public class StudySerializationUtils { else if (Boolean.valueOf(adaptive.getAttributeValue(VALUE))) { task.setName(CODE_TASK); } + else { + task.setName(PYCHARM_TASK); + } task.removeContent(adaptiveParams); task.removeContent(theoryTask); } @@ -638,7 +642,7 @@ public class StudySerializationUtils { case "choice": return gson.fromJson(json, ChoiceTask.class); case "theory": return gson.fromJson(json, TheoryTask.class); case "code": return gson.fromJson(json, CodeTask.class); - case "pycharm": return gson.fromJson(json, Task.class); + case "pycharm": return gson.fromJson(json, PyCharmTask.class); case "subtasks": return gson.fromJson(json, TaskWithSubtasks.class); default: { LOG.warn("Unsupported task type " + taskType); diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/Lesson.java b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/Lesson.java index 18692467e3ee..4109a93be0d9 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/Lesson.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/Lesson.java @@ -28,7 +28,7 @@ public class Lesson implements StudyItem { @Expose @SerializedName("task_list") @AbstractCollection(elementTypes = { - Task.class, + PyCharmTask.class, ChoiceTask.class, TheoryTask.class, CodeTask.class, diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/PyCharmTask.java b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/PyCharmTask.java new file mode 100644 index 000000000000..7ec30c7bf90f --- /dev/null +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/PyCharmTask.java @@ -0,0 +1,21 @@ +package com.jetbrains.edu.learning.courseFormat.tasks; + +import org.jetbrains.annotations.NotNull; + +/** + * Original PyCharm Edu tasks with local tests and answer placeholders + */ +public class PyCharmTask extends Task { + + public PyCharmTask() { + } + + public PyCharmTask(@NotNull String name) { + super(name); + } + + @Override + public String getTaskType() { + return "pycharm"; + } +} \ No newline at end of file diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java index 947b2532a4d7..3b6aad423338 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java @@ -29,7 +29,7 @@ import java.util.Map; * - go to Lesson and update elementTypes in taskList AbstractCollection. Needed for proper xml serialization * - Update TaskSerializer and TaskDeserializer in StudySerializationUtil to handle json serialization */ -public class Task implements StudyItem { +public abstract class Task implements StudyItem { @Expose private String name; // index is visible to user number of task from 1 to task number @@ -268,7 +268,5 @@ public class Task implements StudyItem { } // used in json serialization/deserialization - public String getTaskType() { - return "pycharm"; - } + public abstract String getTaskType(); } diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java index a7ead47048fc..c4a1e8f777e0 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java @@ -12,6 +12,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.edu.learning.StudySettings; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.*; +import com.jetbrains.edu.learning.courseFormat.tasks.PyCharmTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; import org.apache.http.HttpEntity; @@ -267,7 +268,7 @@ public class EduStepicConnector { return null; } final int lastSubtaskIndex = block.options.lastSubtaskIndex; - Task task = new Task(); + Task task = new PyCharmTask(); if (lastSubtaskIndex != 0) { task = createTaskWithSubtasks(lastSubtaskIndex); } diff --git a/python/educational-core/testSrc/com/jetbrains/edu/coursecreator/CCTestCase.java b/python/educational-core/testSrc/com/jetbrains/edu/coursecreator/CCTestCase.java index 5be02916f2fe..051964560cc6 100644 --- a/python/educational-core/testSrc/com/jetbrains/edu/coursecreator/CCTestCase.java +++ b/python/educational-core/testSrc/com/jetbrains/edu/coursecreator/CCTestCase.java @@ -19,6 +19,7 @@ import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.StudyUtils; import com.jetbrains.edu.learning.courseFormat.*; +import com.jetbrains.edu.learning.courseFormat.tasks.PyCharmTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -85,7 +86,7 @@ public abstract class CCTestCase extends CodeInsightFixtureTestCase { Lesson lesson = new Lesson(); lesson.setName("lesson1"); - Task task = new Task(); + Task task = new PyCharmTask(); task.setName("task1"); task.setIndex(1); lesson.addTask(task);