add separate class for PyCharm Task (EDU-882)

This commit is contained in:
Liana.Bakradze
2017-04-07 19:40:57 +03:00
parent 6fb957d677
commit ce7f78de5f
9 changed files with 39 additions and 11 deletions
@@ -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<Task> 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);
@@ -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);
@@ -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;
@@ -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);
@@ -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,
@@ -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";
}
}
@@ -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();
}
@@ -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);
}
@@ -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);