From ec8fc1825b0432ffc4849c7c5a4be2d8b355dcef Mon Sep 17 00:00:00 2001 From: "Liana.Bakradze" Date: Mon, 10 Apr 2017 14:25:20 +0300 Subject: [PATCH] getting next recommendation in check listener (EDU-882) --- .../resources/META-INF/plugin.xml | 2 +- .../edu/learning/checker/StudyCheckTask.java | 30 +++------------- .../stepic/EduAdaptiveStepicConnector.java | 1 + .../EduNextRecommendationCheckListener.java | 36 +++++++++++++++++++ .../stepic/StepicAdaptiveReactionsPanel.java | 4 +-- 5 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java diff --git a/python/educational-core/resources/META-INF/plugin.xml b/python/educational-core/resources/META-INF/plugin.xml index b3cf04f03d0c..7745070d43b6 100644 --- a/python/educational-core/resources/META-INF/plugin.xml +++ b/python/educational-core/resources/META-INF/plugin.xml @@ -191,7 +191,7 @@ - + diff --git a/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java b/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java index 09e411d82931..d85f6b9f436b 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java @@ -84,6 +84,7 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun else { checkForEduCourse(indicator); } + runAfterTaskCheckedActions(); } } @@ -141,26 +142,10 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun if (myTask instanceof ChoiceTask) { final Pair result = EduAdaptiveStepicConnector.checkChoiceTask(myProject, (ChoiceTask)myTask, user); - processStepicCheckOutput(indicator, result); + processStepicCheckOutput(result); } else if (myTask instanceof TheoryTask) { - final int lessonId = myTask.getLesson().getId(); - final boolean reactionPosted = EduAdaptiveStepicConnector.postRecommendationReaction(String.valueOf(lessonId), - String.valueOf(user.getId()), - EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION); - - if (reactionPosted) { - if (myStatusBeforeCheck != StudyStatus.Solved) { - myTask.setStatus(StudyStatus.Solved); - EduAdaptiveStepicConnector.addNextRecommendedTask(myProject, myTask.getLesson(), indicator, - EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION); - } - } - else { - ApplicationManager.getApplication().invokeLater(() -> - StudyUtils - .showErrorPopupOnToolbar(myProject, "Unable to get next recommendation")); - } + myTask.setStatus(StudyStatus.Solved); } else { final StudyTestsOutputParser.TestsOutput testOutput = getTestOutput(indicator); @@ -172,26 +157,21 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun } else { final Pair pair = EduAdaptiveStepicConnector.checkCodeTask(myProject, myTask, user); - processStepicCheckOutput(indicator, pair); + processStepicCheckOutput(pair); } } } } - private void processStepicCheckOutput(@NotNull ProgressIndicator indicator, @Nullable Pair pair) { + private void processStepicCheckOutput(@Nullable Pair pair) { if (pair != null && pair.getFirst() != null) { if (pair.getFirst()) { onTaskSolved("Congratulations! Remote tests passed."); - if (myStatusBeforeCheck != StudyStatus.Solved) { - EduAdaptiveStepicConnector.addNextRecommendedTask(myProject, myTask.getLesson(), indicator, - EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION); - } } else { final String checkMessage = pair.getSecond(); onTaskFailed(checkMessage); } - runAfterTaskCheckedActions(); } else { ApplicationManager.getApplication().invokeLater(() -> { 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 d1da82314213..28e68911c615 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 @@ -62,6 +62,7 @@ public class EduAdaptiveStepicConnector { public static final int NEXT_RECOMMENDATION_REACTION = 2; public static final int TOO_HARD_RECOMMENDATION_REACTION = 0; public static final int TOO_BORING_RECOMMENDATION_REACTION = -1; + public static final String LOADING_NEXT_RECOMMENDATION = "Loading Next Recommendation"; private static final Logger LOG = Logger.getInstance(EduAdaptiveStepicConnector.class); private static final int CONNECTION_TIMEOUT = 60 * 1000; private static final String CODE_TASK_TYPE = "code"; diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java new file mode 100644 index 000000000000..def744a3840d --- /dev/null +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java @@ -0,0 +1,36 @@ +package com.jetbrains.edu.learning.stepic; + +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.project.Project; +import com.jetbrains.edu.learning.checker.StudyCheckListener; +import com.jetbrains.edu.learning.courseFormat.StudyStatus; +import com.jetbrains.edu.learning.courseFormat.tasks.Task; +import org.jetbrains.annotations.NotNull; + +public class EduNextRecommendationCheckListener implements StudyCheckListener { + + private StudyStatus myStatusBeforeCheck; + + @Override + public void beforeCheck(@NotNull Project project, @NotNull Task task) { + myStatusBeforeCheck = task.getStatus(); + } + + @Override + public void afterCheck(@NotNull Project project, @NotNull Task task) { + if (myStatusBeforeCheck == StudyStatus.Solved) { + return; + } + StudyStatus statusAfterCheck = task.getStatus(); + if (statusAfterCheck != StudyStatus.Solved) { + return; + } + ProgressManager.getInstance().run(new com.intellij.openapi.progress.Task.Backgroundable(project, EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION) { + @Override + public void run(@NotNull ProgressIndicator indicator) { + EduAdaptiveStepicConnector.addNextRecommendedTask(project, task.getLesson(), indicator, EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION); + } + }); + } +} diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java index 8aabf57e7144..a8d6d0fc418c 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java @@ -141,9 +141,9 @@ public class StepicAdaptiveReactionsPanel extends JPanel { final com.jetbrains.edu.learning.courseFormat.tasks.Task task = StudyUtils.getCurrentTask(myProject); if (task != null && task.getStatus() != StudyStatus.Solved) { final ProgressIndicatorBase progress = new ProgressIndicatorBase(); - progress.setText("Loading Next Recommendation"); + progress.setText(EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION); ProgressManager.getInstance().run(new Task.Backgroundable(myProject, - "Loading Next Recommendation") { + EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION) { @Override public void run(@NotNull ProgressIndicator indicator) { StepicAdaptiveReactionsPanel.this.setEnabledRecursive(false);