b269cde639b93330aa53e2f591cebb82002a0a32
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / StudyBasePluginConfigurator.java
1 package com.jetbrains.edu.learning;
2
3 import com.intellij.openapi.actionSystem.DefaultActionGroup;
4 import com.intellij.openapi.fileEditor.FileEditorManager;
5 import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
6 import com.intellij.openapi.fileEditor.FileEditorManagerListener;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.jetbrains.edu.learning.actions.*;
10 import com.jetbrains.edu.learning.courseFormat.StudyStatus;
11 import com.jetbrains.edu.learning.courseFormat.Task;
12 import com.jetbrains.edu.learning.courseFormat.TaskFile;
13 import com.jetbrains.edu.learning.twitter.StudyTwitterUtils;
14 import com.jetbrains.edu.learning.ui.StudyToolWindow;
15 import org.jetbrains.annotations.NotNull;
16 import org.jetbrains.annotations.Nullable;
17
18 import javax.swing.*;
19 import java.util.Collections;
20 import java.util.Map;
21
22 public abstract class StudyBasePluginConfigurator implements StudyPluginConfigurator {
23   @NotNull
24   @Override
25   public DefaultActionGroup getActionGroup(Project project) {
26     return getDefaultActionGroup();
27   }
28
29   @NotNull
30   public static DefaultActionGroup getDefaultActionGroup() {
31     final DefaultActionGroup group = new DefaultActionGroup();
32     group.add(new StudyPreviousStudyTaskAction());
33     group.add(new StudyNextStudyTaskAction());
34     group.add(new StudyRefreshTaskFileAction());
35     group.add(new StudyShowHintAction());
36
37     group.add(new StudyRunAction());
38     group.add(new StudyEditInputAction());
39     return group;
40   }
41
42   @NotNull
43   @Override
44   public Map<String, JPanel> getAdditionalPanels(Project project) {
45     return Collections.emptyMap();
46   }
47
48   @NotNull
49   @Override
50   public FileEditorManagerListener getFileEditorManagerListener(@NotNull Project project, @NotNull StudyToolWindow toolWindow) {
51
52     return new FileEditorManagerListener() {
53
54       private static final String EMPTY_TASK_TEXT = "Please, open any task to see task description";
55
56       @Override
57       public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
58         Task task = getTask(file);
59         setTaskText(task, file.getParent());
60       }
61
62       @Override
63       public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
64         toolWindow.setTaskText(EMPTY_TASK_TEXT);
65       }
66
67       @Override
68       public void selectionChanged(@NotNull FileEditorManagerEvent event) {
69         VirtualFile file = event.getNewFile();
70         if (file != null) {
71           Task task = getTask(file);
72           setTaskText(task, file.getParent());
73         }
74       }
75
76       @Nullable
77       private Task getTask(@NotNull VirtualFile file) {
78         TaskFile taskFile = StudyUtils.getTaskFile(project, file);
79         if (taskFile != null) {
80           return taskFile.getTask();
81         }
82         else {
83           return null;
84         }
85       }
86
87       private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
88         String text = StudyUtils.getTaskTextFromTask(task, taskDirectory);
89         if (text == null) {
90           toolWindow.setTaskText(EMPTY_TASK_TEXT);
91           return;
92         }
93         toolWindow.setTaskText(text);
94       }
95     };
96   }
97
98   @Nullable
99   @Override
100   public StudyAfterCheckAction[] getAfterCheckActions() {
101     return null;
102   }
103
104   @NotNull
105   @Override
106   public String getConsumerKey(@NotNull Project project) {
107     return "";
108   }
109
110   @NotNull
111   @Override
112   public String getConsumerSecret(@NotNull Project project) {
113     return "";
114   }
115
116   @Override
117   public void storeTwitterTokens(@NotNull Project project, @NotNull String accessToken, @NotNull String tokenSecret) {
118     // do nothing
119   }
120   
121   @NotNull
122   @Override
123   public String getTwitterTokenSecret(@NotNull Project project) {
124     return "";
125   }
126
127   @NotNull
128   @Override
129   public String getTwitterAccessToken(@NotNull Project project) {
130     return "";
131   }
132
133   @Override
134   public boolean askToTweet(@NotNull Project project, Task solvedTask, StudyStatus statusBeforeCheck) {
135     return false;
136   }
137
138   @Nullable
139   @Override
140   public StudyTwitterUtils.TwitterDialogPanel getTweetDialogPanel(@NotNull Task solvedTask) {
141     return null;
142   }
143 }