260ea0ad2cec585998fc8abf271336b9a5a5acdf
[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.coursecreator.CCUtils;
15 import com.jetbrains.edu.learning.StudyTaskManager;
16 import com.jetbrains.edu.learning.core.EduNames;
17 import com.jetbrains.edu.learning.courseFormat.Course;
18 import com.jetbrains.edu.learning.courseFormat.Lesson;
19 import com.jetbrains.edu.learning.stepic.EduStepicConnector;
20 import com.jetbrains.edu.learning.stepic.EduStepicNames;
21 import org.jetbrains.annotations.NotNull;
22
23 public class CCPushTask extends DumbAwareAction {
24   public CCPushTask() {
25     super("Update Task on Stepik", "Update Task on Stepik", null);
26   }
27
28   @Override
29   public void update(@NotNull AnActionEvent e) {
30     e.getPresentation().setEnabledAndVisible(false);
31     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
32     final Project project = e.getData(CommonDataKeys.PROJECT);
33     if (view == null || project == null) {
34       return;
35     }
36     final Course course = StudyTaskManager.getInstance(project).getCourse();
37     if (course == null) {
38       return;
39     }
40     if (!course.getCourseMode().equals(CCUtils.COURSE_MODE)) return;
41     PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
42     if (taskDir == null || !taskDir.getName().contains(EduNames.TASK)) {
43       return;
44     }
45     final PsiDirectory lessonDir = taskDir.getParentDirectory();
46     if (lessonDir == null) return;
47     final Lesson lesson = course.getLesson(lessonDir.getName());
48     if (lesson != null && lesson.getId() > 0 && course.getId() > 0) {
49       e.getPresentation().setEnabledAndVisible(true);
50       final com.jetbrains.edu.learning.courseFormat.Task task = lesson.getTask(taskDir.getName());
51       if (task.getStepicId() <= 0) {
52         e.getPresentation().setText("Upload Task to Stepik");
53       }
54     }
55   }
56
57   @Override
58   public void actionPerformed(@NotNull AnActionEvent e) {
59     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
60     final Project project = e.getData(CommonDataKeys.PROJECT);
61     if (view == null || project == null) {
62       return;
63     }
64     final Course course = StudyTaskManager.getInstance(project).getCourse();
65     if (course == null) {
66       return;
67     }
68     PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
69     if (taskDir == null || !taskDir.getName().contains(EduNames.TASK)) {
70       return;
71     }
72     final PsiDirectory lessonDir = taskDir.getParentDirectory();
73     if (lessonDir == null) return;
74     final Lesson lesson = course.getLesson(lessonDir.getName());
75     if (lesson == null) return;
76
77     final com.jetbrains.edu.learning.courseFormat.Task task = lesson.getTask(taskDir.getName());
78     if (task == null) return;
79
80     ProgressManager.getInstance().run(new Task.Modal(project, "Uploading Task", true) {
81       @Override
82       public void run(@NotNull ProgressIndicator indicator) {
83         indicator.setText("Uploading task to " + EduStepicNames.STEPIC_URL);
84         if (task.getStepicId() <= 0) {
85           EduStepicConnector.postTask(project, task, lesson.getId());
86         }
87         else {
88           EduStepicConnector.updateTask(project, task);
89         }
90       }
91     });
92   }
93
94 }