From 5ddb02acc9ab404ccfabf47ce3e16a3af10ad7da Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Mar 2017 16:57:08 +0300 Subject: [PATCH] remove text field from task in favour of tasktexts --- .../stepik/CCStepicConnector.java | 11 ++++-- .../jetbrains/edu/learning/StudyUtils.java | 7 ++-- .../edu/learning/courseFormat/tasks/Task.java | 33 ++++------------- .../StudyProjectGenerator.java | 21 ++--------- .../stepic/EduAdaptiveStepicConnector.java | 35 +++++++++---------- .../learning/stepic/EduStepicConnector.java | 8 +++-- .../edu/learning/stepic/StepicWrappers.java | 1 - .../edu/learning/PyStudyTestRunner.java | 2 +- 8 files changed, 44 insertions(+), 74 deletions(-) diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java index c6305c1090e3..1b45fb108668 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java @@ -15,9 +15,15 @@ import com.intellij.openapi.vfs.VirtualFileFilter; import com.jetbrains.edu.learning.StudySerializationUtils; 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.AnswerPlaceholder; +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.tasks.Task; -import com.jetbrains.edu.learning.stepic.*; +import com.jetbrains.edu.learning.stepic.EduStepicAuthorizedClient; +import com.jetbrains.edu.learning.stepic.EduStepicNames; +import com.jetbrains.edu.learning.stepic.StepicUser; +import com.jetbrains.edu.learning.stepic.StepicWrappers; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; @@ -135,7 +141,6 @@ public class CCStepicConnector { task.setLesson(lesson); task.setName(EduNames.PYCHARM_ADDITIONAL); task.setIndex(1); - task.setText(EduNames.PYCHARM_ADDITIONAL); for (VirtualFile file : files) { try { if (file != null) { diff --git a/python/educational-core/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational-core/src/com/jetbrains/edu/learning/StudyUtils.java index 7266ee194759..e2e06e430d59 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/StudyUtils.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/StudyUtils.java @@ -64,7 +64,10 @@ import com.jetbrains.edu.learning.core.EduAnswerPlaceholderDeleteHandler; import com.jetbrains.edu.learning.core.EduAnswerPlaceholderPainter; 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.AnswerPlaceholder; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.Lesson; +import com.jetbrains.edu.learning.courseFormat.TaskFile; import com.jetbrains.edu.learning.courseFormat.tasks.ChoiceTask; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; @@ -492,7 +495,7 @@ public class StudyUtils { return null; } final Course course = task.getLesson().getCourse(); - String text = task.getText() != null ? task.getText() : getTaskTextByTaskName(task, taskDirectory); + String text = task.getTaskDescription() != null ? task.getTaskDescription() : getTaskTextByTaskName(task, taskDirectory); if (text == null) return null; text = convertToHtml(text); 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 ed7f0c414ab5..d5b56e06dd01 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 @@ -5,11 +5,9 @@ import com.google.gson.annotations.SerializedName; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.xmlb.XmlSerializer; import com.intellij.util.xmlb.annotations.Transient; -import com.jetbrains.edu.learning.StudyUtils; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.*; import com.jetbrains.edu.learning.stepic.EduStepicConnector; @@ -37,7 +35,6 @@ public class Task implements StudyItem { @SerializedName("task_files") @Expose public Map taskFiles = new HashMap<>(); - private String text; protected Map testsText = new HashMap<>(); protected Map taskTexts = new HashMap<>(); @@ -73,14 +70,6 @@ public class Task implements StudyItem { this.name = name; } - public String getText() { - return text; - } - - public void setText(final String text) { - this.text = text; - } - @Override public int getIndex() { return myIndex; @@ -166,20 +155,11 @@ public class Task implements StudyItem { return null; } - @NotNull - public String getTaskText(@NotNull final Project project) { - if (!StringUtil.isEmptyOrSpaces(text)) return text; - final VirtualFile taskDir = getTaskDir(project); - if (taskDir != null) { - final VirtualFile file = StudyUtils.findTaskDescriptionVirtualFile(project, taskDir); - if (file == null) return ""; - final Document document = FileDocumentManager.getInstance().getDocument(file); - if (document != null) { - return document.getImmutableCharSequence().toString(); - } + public String getTaskDescription() { + if (!taskTexts.isEmpty()) { + return taskTexts.get(EduNames.TASK_HTML); } - - return ""; + return null; } @NotNull @@ -207,7 +187,7 @@ public class Task implements StudyItem { if (myIndex != task.myIndex) return false; if (name != null ? !name.equals(task.name) : task.name != null) return false; if (taskFiles != null ? !taskFiles.equals(task.taskFiles) : task.taskFiles != null) return false; - if (text != null ? !text.equals(task.text) : task.text != null) return false; + if (taskTexts != null ? !taskTexts.equals(task.taskTexts) : task.taskTexts != null) return false; if (testsText != null ? !testsText.equals(task.testsText) : task.testsText != null) return false; return true; @@ -218,7 +198,7 @@ public class Task implements StudyItem { int result = name != null ? name.hashCode() : 0; result = 31 * result + myIndex; result = 31 * result + (taskFiles != null ? taskFiles.hashCode() : 0); - result = 31 * result + (text != null ? text.hashCode() : 0); + result = 31 * result + (taskTexts != null ? taskTexts.hashCode() : 0); result = 31 * result + (testsText != null ? testsText.hashCode() : 0); return result; } @@ -273,7 +253,6 @@ public class Task implements StudyItem { setStatus(task.getStatus()); setStepId(task.getStepId()); taskFiles = task.getTaskFiles(); - setText(task.getText()); testsText = task.getTestsText(); taskTexts = task.getTaskTexts(); setLesson(task.getLesson()); diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java index fa240e513afb..58c82ec9b24f 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java @@ -28,12 +28,12 @@ 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.Course; +import com.jetbrains.edu.learning.courseFormat.CourseInfo; import com.jetbrains.edu.learning.courseFormat.Lesson; -import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.TaskFile; +import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.editor.StudyEditor; import com.jetbrains.edu.learning.statistics.EduUsagesCollector; -import com.jetbrains.edu.learning.courseFormat.CourseInfo; import com.jetbrains.edu.learning.stepic.EduStepicConnector; import com.jetbrains.edu.learning.stepic.StepicUpdateSettings; import com.jetbrains.edu.learning.stepic.StepicUser; @@ -291,24 +291,7 @@ public class StudyProjectGenerator { } } createFiles(taskDirectory, task.getTestsText()); - if (task.getTaskTexts().isEmpty()) { - createTaskHtml(task, taskDirectory); - return; - } - task.setText(null); createFiles(taskDirectory, task.getTaskTexts()); - - } - - private static void createTaskHtml(@NotNull Task task, @NotNull File taskDirectory) { - final File taskText = new File(taskDirectory, EduNames.TASK_HTML); - FileUtil.createIfDoesntExist(taskText); - try { - FileUtil.writeToFile(taskText, task.getText()); - } - catch (IOException e) { - LOG.error(e); - } } private static void createFiles(@NotNull File taskDirectory, Map files) { diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java index d675c983cb84..db1dc541e2ce 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java @@ -174,7 +174,8 @@ public class EduAdaptiveStepicConnector { private static Task getTheoryTaskFromStep(@NotNull String lessonName, @NotNull StepicWrappers.Step block, int stepId) { final Task task = new TheoryTask(lessonName); task.setStepId(stepId); - task.setText(block.text); + + task.addTaskText(EduNames.TASK_HTML, block.text); createMockTaskFile(task, "# this is a theory task. You can use this editor as a playground"); return task; @@ -186,7 +187,7 @@ public class EduAdaptiveStepicConnector { int stepId, int userId) { final ChoiceTask task = new ChoiceTask(lessonName); task.setStepId(stepId); - task.setText(block.text); + task.addTaskText(EduNames.TASK_HTML, block.text); final StepicWrappers.AdaptiveAttemptWrapper.Attempt attempt = getAttemptForStep(stepId, userId); if (attempt != null) { @@ -338,7 +339,7 @@ public class EduAdaptiveStepicConnector { } final StudyToolWindow window = StudyUtils.getStudyToolWindow(project); if (window != null) { - window.setTaskText(StudyUtils.wrapTextToDisplayLatex(unsolvedTask.getText()), unsolvedTask.getTaskDir(project), project); + window.setTaskText(StudyUtils.wrapTextToDisplayLatex(unsolvedTask.getTaskDescription()), unsolvedTask.getTaskDir(project), project); } StudyNavigator.navigateToTask(project, lessonName, taskName); } @@ -425,32 +426,28 @@ public class EduAdaptiveStepicConnector { int lessonID) { final Task task = new CodeTask(name); task.setStepId(lessonID); - task.setText(step.text); + task.setStatus(StudyStatus.Unchecked); + final StringBuilder taskDescription = new StringBuilder(step.text); if (step.options.samples != null) { - final StringBuilder builder = new StringBuilder(); + taskDescription.append("
"); for (List sample : step.options.samples) { if (sample.size() == 2) { - builder.append("Sample Input:
"); - builder.append(StringUtil.replace(sample.get(0), "\n", "
")); - builder.append("
"); - builder.append("Sample Output:
"); - builder.append(StringUtil.replace(sample.get(1), "\n", "
")); - builder.append("

"); + taskDescription.append("Sample Input:
"); + taskDescription.append(StringUtil.replace(sample.get(0), "\n", "
")); + taskDescription.append("
"); + taskDescription.append("Sample Output:
"); + taskDescription.append(StringUtil.replace(sample.get(1), "\n", "
")); + taskDescription.append("

"); } } - task.setText(task.getText() + "
" + builder.toString()); } if (step.options.executionMemoryLimit != null && step.options.executionTimeLimit != null) { - String builder = "Memory limit: " + - step.options.executionMemoryLimit + " Mb" + - "
" + - "Time limit: " + - step.options.executionTimeLimit + "s" + - "

"; - task.setText(task.getText() + builder); + taskDescription.append("
").append("Memory limit: ").append(step.options.executionMemoryLimit).append(" Mb").append("
") + .append("Time limit: ").append(step.options.executionTimeLimit).append("s").append("

"); } + task.addTaskText(EduNames.TASK_HTML, taskDescription.toString()); if (step.options.test != null) { for (StepicWrappers.FileWrapper wrapper : step.options.test) { 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 c9d046918286..b4e2f8b4107e 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 @@ -9,7 +9,11 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.jetbrains.edu.learning.courseFormat.*; +import com.jetbrains.edu.learning.core.EduNames; +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.http.HttpEntity; @@ -288,7 +292,7 @@ public class EduStepicConnector { task.addTaskText(wrapper.name, wrapper.text); } } else { - task.setText(block.text); + task.addTaskText(EduNames.TASK_HTML, block.text); } task.taskFiles = new HashMap<>(); // TODO: it looks like we don't need taskFiles as map anymore 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 a1f84bb0facf..b5a2065c3135 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 @@ -42,7 +42,6 @@ public class StepicWrappers { public static Step fromTask(Project project, @NotNull final Task task) { final Step step = new Step(); - step.text = task.getTaskText(project); step.source = StepOptions.fromTask(project, task); return step; } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java index 6e666a39040b..a24db818717f 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java @@ -31,7 +31,7 @@ public class PyStudyTestRunner extends StudyTestRunner { Course course = myTask.getLesson().getCourse(); PyEduPluginConfigurator configurator = new PyEduPluginConfigurator(); String testsFileName = configurator.getTestFileName(); - if (myTask instanceof TaskWithSubtasks && ((TaskWithSubtasks)myTask).getActiveSubtaskIndex() != 0) { + if (myTask instanceof TaskWithSubtasks) { testsFileName = FileUtil.getNameWithoutExtension(testsFileName); int index = ((TaskWithSubtasks)myTask).getActiveSubtaskIndex(); testsFileName += EduNames.SUBTASK_MARKER + index + "." + FileUtilRt.getExtension(configurator.getTestFileName());