remove text field from task in favour of tasktexts

This commit is contained in:
Ekaterina Tuzova
2017-03-30 17:23:40 +03:00
parent f7d3c384ca
commit 5ddb02acc9
8 changed files with 44 additions and 74 deletions
@@ -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) {
@@ -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);
@@ -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<String, TaskFile> taskFiles = new HashMap<>();
private String text;
protected Map<String, String> testsText = new HashMap<>();
protected Map<String, String> 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());
@@ -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<String, String> files) {
@@ -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("<br>");
for (List<String> sample : step.options.samples) {
if (sample.size() == 2) {
builder.append("<b>Sample Input:</b><br>");
builder.append(StringUtil.replace(sample.get(0), "\n", "<br>"));
builder.append("<br>");
builder.append("<b>Sample Output:</b><br>");
builder.append(StringUtil.replace(sample.get(1), "\n", "<br>"));
builder.append("<br><br>");
taskDescription.append("<b>Sample Input:</b><br>");
taskDescription.append(StringUtil.replace(sample.get(0), "\n", "<br>"));
taskDescription.append("<br>");
taskDescription.append("<b>Sample Output:</b><br>");
taskDescription.append(StringUtil.replace(sample.get(1), "\n", "<br>"));
taskDescription.append("<br><br>");
}
}
task.setText(task.getText() + "<br>" + builder.toString());
}
if (step.options.executionMemoryLimit != null && step.options.executionTimeLimit != null) {
String builder = "<b>Memory limit</b>: " +
step.options.executionMemoryLimit + " Mb" +
"<br>" +
"<b>Time limit</b>: " +
step.options.executionTimeLimit + "s" +
"<br><br>";
task.setText(task.getText() + builder);
taskDescription.append("<br>").append("<b>Memory limit</b>: ").append(step.options.executionMemoryLimit).append(" Mb").append("<br>")
.append("<b>Time limit</b>: ").append(step.options.executionTimeLimit).append("s").append("<br><br>");
}
task.addTaskText(EduNames.TASK_HTML, taskDescription.toString());
if (step.options.test != null) {
for (StepicWrappers.FileWrapper wrapper : step.options.test) {
@@ -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
@@ -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;
}
@@ -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());