add update of one task on stepic
[idea/community.git] / python / educational-core / course-creator / src / com / jetbrains / edu / coursecreator / actions / CCPushTask.java
1 package com.jetbrains.edu.coursecreator.actions;
2
3 import com.intellij.ide.IdeView;
4 import com.intellij.ide.util.DirectoryChooserUtil;
5 import com.intellij.openapi.actionSystem.AnActionEvent;
6 import com.intellij.openapi.actionSystem.CommonDataKeys;
7 import com.intellij.openapi.actionSystem.LangDataKeys;
8 import com.intellij.openapi.progress.ProgressIndicator;
9 import com.intellij.openapi.progress.ProgressManager;
10 import com.intellij.openapi.progress.Task;
11 import com.intellij.openapi.project.DumbAwareAction;
12 import com.intellij.openapi.project.Project;
13 import com.intellij.psi.PsiDirectory;
14 import com.jetbrains.edu.learning.StudyTaskManager;
15 import com.jetbrains.edu.learning.courseFormat.Course;
16 import com.jetbrains.edu.learning.courseFormat.Lesson;
17 import com.jetbrains.edu.learning.stepic.EduStepicConnector;
18 import org.jetbrains.annotations.NotNull;
19
20 public class CCPushTask extends DumbAwareAction {
21   public CCPushTask() {
22     super("Update Task on Stepic", "Update Task on Stepic", null);
23   }
24
25   @Override
26   public void update(@NotNull AnActionEvent e) {
27     e.getPresentation().setEnabledAndVisible(false);
28     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
29     final Project project = e.getData(CommonDataKeys.PROJECT);
30     if (view == null || project == null) {
31       return;
32     }
33     final Course course = StudyTaskManager.getInstance(project).getCourse();
34     if (course == null) {
35       return;
36     }
37     PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
38     if (taskDir == null || !taskDir.getName().contains("task")) {
39       return;
40     }
41     final PsiDirectory lessonDir = taskDir.getParentDirectory();
42     if (lessonDir == null) return;
43     final Lesson lesson = course.getLesson(lessonDir.getName());
44     if (lesson != null && lesson.getId() > 0) {
45       e.getPresentation().setEnabledAndVisible(true);
46     }
47   }
48
49   @Override
50   public void actionPerformed(@NotNull AnActionEvent e) {
51     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
52     final Project project = e.getData(CommonDataKeys.PROJECT);
53     if (view == null || project == null) {
54       return;
55     }
56     final Course course = StudyTaskManager.getInstance(project).getCourse();
57     if (course == null) {
58       return;
59     }
60     PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
61     if (taskDir == null || !taskDir.getName().contains("task")) {
62       return;
63     }
64     final PsiDirectory lessonDir = taskDir.getParentDirectory();
65     if (lessonDir == null) return;
66     final Lesson lesson = course.getLesson(lessonDir.getName());
67     if (lesson == null) return;
68
69     final com.jetbrains.edu.learning.courseFormat.Task task = lesson.getTask(taskDir.getName());
70     if (task == null) return;
71
72     ProgressManager.getInstance().run(new Task.Modal(project, "Uploading Task", true) {
73       @Override
74       public void run(@NotNull ProgressIndicator indicator) {
75         indicator.setText("Uploading task to http://stepic.org");
76         EduStepicConnector.updateTask(project, task);
77       }
78     });
79   }
80
81 }