added idea support
[idea/community.git] / python / edu / course-creator-intellij-py / src / PyCCEduProjectTemplate.java
1 import com.intellij.ide.util.projectWizard.AbstractModuleBuilder;
2 import com.intellij.ide.util.projectWizard.WizardInputField;
3 import com.intellij.openapi.module.ModifiableModuleModel;
4 import com.intellij.openapi.module.Module;
5 import com.intellij.openapi.options.ConfigurationException;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.projectRoots.Sdk;
8 import com.intellij.openapi.roots.ModifiableRootModel;
9 import com.intellij.openapi.startup.StartupManager;
10 import com.intellij.openapi.ui.ValidationInfo;
11 import com.intellij.openapi.vfs.VirtualFile;
12 import com.jetbrains.edu.coursecreator.PyCCProjectGenerator;
13 import com.jetbrains.edu.coursecreator.ui.CCNewProjectPanel;
14 import com.jetbrains.python.facet.PythonSdkComboBox;
15 import com.jetbrains.python.module.PythonModuleBuilder;
16 import org.jetbrains.annotations.NotNull;
17 import org.jetbrains.annotations.Nullable;
18
19 import javax.swing.*;
20 import java.util.ArrayList;
21 import java.util.List;
22
23 public class PyCCEduProjectTemplate extends EduProjectTemplate {
24
25   @NotNull
26   @Override
27   public String getName() {
28     return "Python Course Creation";
29   }
30
31   @Override
32   public String getDescription() {
33     return null;
34   }
35
36   @Override
37   public Icon getIcon() {
38     return null;
39   }
40
41   @NotNull
42   @Override
43   public AbstractModuleBuilder createModuleBuilder() {
44     return new PythonEduModuleBuilder() ;
45   }
46
47   @Override
48   public ValidationInfo validateSettings() {
49     return null;
50   }
51
52   private static class PythonEduModuleBuilder extends PythonModuleBuilder {
53     @Override
54     public void setupRootModel(ModifiableRootModel rootModel) throws ConfigurationException {
55       super.setupRootModel(rootModel);
56       Sdk sdk = mySdkComboBox.getSelectedSdk();
57       if (sdk != null) {
58         rootModel.setSdk(sdk);
59       }
60     }
61
62     final PythonSdkComboBox mySdkComboBox = new PythonSdkComboBox();
63     final CCNewProjectPanel panel = new CCNewProjectPanel();
64
65
66     @Override
67     protected List<WizardInputField> getAdditionalFields() {
68       List<WizardInputField> wizardInputFields = new ArrayList<WizardInputField>();
69       wizardInputFields.add(createWizardInputField("Edu.CCProjectSdk", "Python Interpreter:", mySdkComboBox));
70       wizardInputFields.add(createWizardInputField("Edu.Author", "Author:", panel.getAuthorField()));
71       wizardInputFields.add(createWizardInputField("Edu.Name", "Name:", panel.getNameField()));
72       wizardInputFields.add(createWizardInputField("Edu.Description", "Description:", panel.getDescriptionField()));
73       return wizardInputFields;
74     }
75
76     @Nullable
77     @Override
78     public Module commitModule(@NotNull final Project project, @Nullable ModifiableModuleModel model) {
79       Module module = super.commitModule(project, model);
80       if (module != null) {
81         final VirtualFile baseDir = project.getBaseDir();
82         StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
83           @Override
84           public void run() {
85             PyCCProjectGenerator.generateProject(project, baseDir, panel.getName(), panel.getAuthor(), panel.getDescription());
86           }
87         });
88       }
89       return module;
90     }
91   }
92 }