get rid of lessonInfo completely

This commit is contained in:
Ekaterina Tuzova
2015-02-13 22:33:39 +03:00
parent 8551a1f82f
commit cde1212143
11 changed files with 32 additions and 107 deletions
@@ -205,7 +205,7 @@ public class StudyCheckAction extends DumbAwareAction {
@Override
public void onCancel() {
StudyStatus currentStatus = task.getStatus();
task.setStatus(statusBeforeCheck, currentStatus);
task.setStatus(statusBeforeCheck);
deleteWindowDescriptions(task, taskDir);
selectedEditor.getCheckButton().setEnabled(true);
}
@@ -226,7 +226,7 @@ public class StudyCheckAction extends DumbAwareAction {
}
final String failedMessage = testRunner.getTestsOutput(output);
if (StudyTestRunner.TEST_OK.equals(failedMessage)) {
task.setStatus(StudyStatus.Solved, statusBeforeCheck);
task.setStatus(StudyStatus.Solved);
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
@@ -239,12 +239,12 @@ public class StudyCheckAction extends DumbAwareAction {
@Override
public void run() {
if (taskDir == null) return;
task.setStatus(StudyStatus.Failed, statusBeforeCheck);
task.setStatus(StudyStatus.Failed);
for (Map.Entry<String, TaskFile> entry : taskFiles.entrySet()) {
final String name = entry.getKey();
final TaskFile taskFile = entry.getValue();
if (taskFile.getAnswerPlaceholders().size() < 2) {
taskFile.setStatus(StudyStatus.Failed, StudyStatus.Unchecked);
taskFile.setStatus(StudyStatus.Failed);
continue;
}
CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
@@ -21,8 +21,10 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.problems.WolfTheProblemSolver;
import com.jetbrains.edu.StudyNames;
import com.jetbrains.edu.courseFormat.*;
import com.jetbrains.edu.courseFormat.info.LessonInfo;
import com.jetbrains.edu.courseFormat.AnswerPlaceholder;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.courseFormat.Task;
import com.jetbrains.edu.courseFormat.TaskFile;
import com.jetbrains.edu.learning.StudyAnswerPlaceholderPainter;
import com.jetbrains.edu.learning.StudyState;
import com.jetbrains.edu.learning.StudyUtils;
@@ -86,10 +88,9 @@ public class StudyRefreshTaskFileAction extends DumbAwareAction {
if (!resetDocument(project, document, taskFile, name)) {
return false;
}
updateLessonInfo(taskFile.getTask());
StudyUtils.updateStudyToolWindow(project);
resetTaskWindows(taskFile);
ProjectView.getInstance(project).refresh();
StudyUtils.updateStudyToolWindow(project);
return true;
}
@@ -109,12 +110,6 @@ public class StudyRefreshTaskFileAction extends DumbAwareAction {
}
}
private static void updateLessonInfo(Task currentTask) {
StudyStatus oldStatus = currentTask.getStatus();
LessonInfo lessonInfo = currentTask.getLesson().getLessonInfo();
lessonInfo.update(oldStatus, -1);
lessonInfo.update(StudyStatus.Unchecked, +1);
}
private static boolean resetDocument(@NotNull final Project project,
@NotNull final Document document,
@@ -6,7 +6,6 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.jetbrains.edu.StudyNames;
import com.jetbrains.edu.courseFormat.*;
import com.jetbrains.edu.courseFormat.info.LessonInfo;
import com.jetbrains.edu.learning.StudyUtils;
import org.jetbrains.annotations.NotNull;
@@ -136,10 +135,7 @@ public class StudyGenerator {
public static void initLesson(@NotNull final Lesson lesson, final Course course, boolean isRestarted) {
lesson.setCourse(course);
final LessonInfo info = lesson.getLessonInfo();
final List<Task> taskList = lesson.getTaskList();
info.setTaskNum(taskList.size());
info.setTaskUnchecked(taskList.size());
for (Task task : taskList) {
initTask(task, lesson, isRestarted);
}
@@ -66,7 +66,7 @@ public class StudySmartChecker {
final CapturingProcessHandler handler = new CapturingProcessHandler(smartTestProcess);
final ProcessOutput output = handler.runProcess();
boolean res = testRunner.getTestsOutput(output).equals(StudyTestRunner.TEST_OK);
userAnswerPlaceholder.setStatus(res ? StudyStatus.Solved : StudyStatus.Failed, StudyStatus.Unchecked);
userAnswerPlaceholder.setStatus(res ? StudyStatus.Solved : StudyStatus.Failed);
StudyUtils.deleteFile(windowCopy);
if (fileWindows != null) {
StudyUtils.deleteFile(fileWindows);
@@ -10,7 +10,7 @@ import com.intellij.util.ui.UIUtil;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.courseFormat.Lesson;
import com.jetbrains.edu.courseFormat.StudyStatus;
import com.jetbrains.edu.courseFormat.info.LessonInfo;
import com.jetbrains.edu.courseFormat.Task;
import com.jetbrains.edu.learning.StudyTaskManager;
import org.jetbrains.annotations.NotNull;
@@ -50,9 +50,8 @@ public class StudyToolWindowFactory implements ToolWindowFactory, DumbAware {
if (lesson.getStatus() == StudyStatus.Solved) {
lessonsCompleted++;
}
LessonInfo lessonInfo = lesson.getLessonInfo();
taskNum += lessonInfo.getTaskNum();
taskSolved += lessonInfo.getTaskSolved();
taskNum += lesson.getTaskList().size();
taskSolved += getTaskSolved(lesson);
}
String completedLessons = String.format("%d of %d lessons completed", lessonsCompleted, course.getLessons().size());
String completedTasks = String.format("%d of %d tasks completed", taskSolved, taskNum);
@@ -72,6 +71,16 @@ public class StudyToolWindowFactory implements ToolWindowFactory, DumbAware {
}
}
private static int getTaskSolved(@NotNull final Lesson lesson) {
int solved = 0;
for (Task task : lesson.getTaskList()) {
if (task.getStatus() == StudyStatus.Solved) {
solved += 1;
}
}
return solved;
}
private static void addStatistics(String statistics, JPanel contentPanel) {
String labelText = UIUtil.toHtml(statistics, 5);
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
@@ -16,6 +16,7 @@ public class AnswerPlaceholder implements Comparable, StudyStateful {
@Expose private int line = 0;
@Expose private int start = 0;
@Expose private String hint = "";
@SerializedName("possible_answer")
@Expose private String possibleAnswer = "";
@Expose private int length = 0;
@@ -24,14 +25,13 @@ public class AnswerPlaceholder implements Comparable, StudyStateful {
private String myTaskText;
private MyInitialState myInitialState;
@Transient private TaskFile myTaskFile;
public StudyStatus getStatus() {
return myStatus;
}
public void setStatus(StudyStatus status, StudyStatus oldStatus) {
public void setStatus(StudyStatus status) {
myStatus = status;
}
@@ -2,7 +2,6 @@ package com.jetbrains.edu.courseFormat;
import com.google.gson.annotations.SerializedName;
import com.intellij.util.xmlb.annotations.Transient;
import com.jetbrains.edu.courseFormat.info.LessonInfo;
import java.util.ArrayList;
import java.util.List;
@@ -24,8 +23,6 @@ public class Lesson implements StudyStateful {
@Transient
private Course myCourse = null;
private int myIndex = -1;
private LessonInfo myLessonInfo = new LessonInfo();
public String getName() {
return name;
@@ -43,10 +40,6 @@ public class Lesson implements StudyStateful {
myIndex = index;
}
public LessonInfo getLessonInfo() {
return myLessonInfo;
}
@Transient
public StudyStatus getStatus() {
for (Task task : taskList) {
@@ -59,9 +52,9 @@ public class Lesson implements StudyStateful {
}
@Override
public void setStatus(StudyStatus status, StudyStatus oldStatus) {
public void setStatus(StudyStatus status) {
for (Task task : taskList) {
task.setStatus(status, oldStatus);
task.setStatus(status);
}
}
@@ -2,5 +2,5 @@ package com.jetbrains.edu.courseFormat;
public interface StudyStateful {
StudyStatus getStatus();
void setStatus(StudyStatus status, StudyStatus oldStatus);
void setStatus(StudyStatus status);
}
@@ -4,7 +4,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.xmlb.annotations.Transient;
import com.jetbrains.edu.StudyNames;
import com.jetbrains.edu.courseFormat.info.LessonInfo;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -80,14 +79,9 @@ public class Task implements StudyStateful {
return StudyStatus.Solved;
}
public void setStatus(@NotNull final StudyStatus status, @NotNull final StudyStatus oldStatus) {
LessonInfo lessonInfo = myLesson.getLessonInfo();
if (status != oldStatus) {
lessonInfo.update(oldStatus, -1);
lessonInfo.update(status, +1);
}
public void setStatus(@NotNull final StudyStatus status) {
for (TaskFile taskFile : taskFiles.values()) {
taskFile.setStatus(status, oldStatus);
taskFile.setStatus(status);
}
}
@@ -47,9 +47,9 @@ public class TaskFile implements StudyStateful {
return StudyStatus.Solved;
}
public void setStatus(@NotNull final StudyStatus status, @NotNull final StudyStatus oldStatus) {
public void setStatus(@NotNull final StudyStatus status) {
for (AnswerPlaceholder answerPlaceholder : myAnswerPlaceholders) {
answerPlaceholder.setStatus(status, oldStatus);
answerPlaceholder.setStatus(status);
}
}
@@ -1,62 +0,0 @@
package com.jetbrains.edu.courseFormat.info;
import com.jetbrains.edu.courseFormat.StudyStatus;
/**
* Implementation of class which contains information about student progress in current lesson
*/
public class LessonInfo {
private int myTaskNum;
private int myTaskFailed;
private int myTaskSolved;
private int myTaskUnchecked;
public int getTaskNum() {
return myTaskNum;
}
public void setTaskNum(int taskNum) {
myTaskNum = taskNum;
}
public int getTaskFailed() {
return myTaskFailed;
}
public void setTaskFailed(int taskFailed) {
myTaskFailed = taskFailed;
}
public int getTaskSolved() {
return myTaskSolved;
}
public void setTaskSolved(int taskSolved) {
myTaskSolved = taskSolved;
}
public int getTaskUnchecked() {
return myTaskUnchecked;
}
public void setTaskUnchecked(int taskUnchecked) {
myTaskUnchecked = taskUnchecked;
}
public void update(StudyStatus status, int delta) {
switch (status) {
case Solved: {
myTaskSolved += delta;
break;
}
case Failed: {
myTaskFailed += delta;
break;
}
case Unchecked: {
myTaskUnchecked += delta;
break;
}
}
}
}