4e16c6c8bab1c5086e978addf6efca473f04ea26
[idea/community.git] / python / edu / interactive-learning-python / src / com / jetbrains / edu / learning / actions / PyStudyIntroductionCourseAction.java
1 /*
2  * Copyright 2000-2013 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.edu.learning.actions;
17
18 import com.intellij.ide.impl.ProjectUtil;
19 import com.intellij.openapi.actionSystem.AnAction;
20 import com.intellij.openapi.actionSystem.AnActionEvent;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.project.ProjectManager;
23 import com.intellij.openapi.projectRoots.Sdk;
24 import com.jetbrains.edu.learning.PyStudyDirectoryProjectGenerator;
25 import com.jetbrains.edu.learning.StudyUtils;
26 import com.jetbrains.edu.stepic.CourseInfo;
27 import com.jetbrains.python.configuration.PyConfigurableInterpreterList;
28 import com.jetbrains.python.newProject.actions.GenerateProjectCallback;
29 import com.jetbrains.python.newProject.actions.ProjectSpecificSettingsStep;
30 import icons.InteractiveLearningPythonIcons;
31 import org.jetbrains.annotations.NotNull;
32
33 import java.io.File;
34 import java.util.List;
35
36 public class PyStudyIntroductionCourseAction extends AnAction {
37
38   public PyStudyIntroductionCourseAction() {
39     super("Introduction to Python", "Introduction to Python", InteractiveLearningPythonIcons.EducationalProjectType);
40   }
41
42   @Override
43   public void actionPerformed(@NotNull AnActionEvent e) {
44     final File projectDir = new File(ProjectUtil.getBaseDir(), "PythonIntroduction");
45     if (projectDir.exists()) {
46       ProjectUtil.openProject(projectDir.getPath(), null, false);
47     }
48     else {
49       final GenerateProjectCallback callback = new GenerateProjectCallback();
50       final PyStudyDirectoryProjectGenerator generator = new PyStudyDirectoryProjectGenerator();
51       final List<CourseInfo> courses = generator.getCourses();
52       CourseInfo introCourse = null;
53       for (CourseInfo info : courses) {
54         if ("Introduction to Python".equals(info.getName())) {
55           introCourse = info;
56         }
57       }
58       if (introCourse == null) {
59         introCourse = StudyUtils.getFirst(courses);
60       }
61
62       final ProjectSpecificSettingsStep step = new ProjectSpecificSettingsStep(generator, callback);
63
64       step.createPanel(); // initialize panel to set location
65       step.setLocation(projectDir.toString());
66       generator.setSelectedCourse(introCourse);
67
68       final Project project = ProjectManager.getInstance().getDefaultProject();
69       final List<Sdk> sdks = PyConfigurableInterpreterList.getInstance(project).getAllPythonSdks();
70       Sdk sdk = sdks.isEmpty() ? null : sdks.iterator().next();
71       step.setSdk(sdk);
72       callback.consume(step);
73     }
74   }
75 }