mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
112 lines
3.9 KiB
Java
112 lines
3.9 KiB
Java
import com.intellij.ide.fileTemplates.FileTemplate;
|
|
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
|
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
|
import com.intellij.ide.util.projectWizard.AbstractModuleBuilder;
|
|
import com.intellij.ide.util.projectWizard.WizardInputField;
|
|
import com.intellij.openapi.diagnostic.Logger;
|
|
import com.intellij.openapi.module.ModifiableModuleModel;
|
|
import com.intellij.openapi.module.Module;
|
|
import com.intellij.openapi.options.ConfigurationException;
|
|
import com.intellij.openapi.project.Project;
|
|
import com.intellij.openapi.projectRoots.Sdk;
|
|
import com.intellij.openapi.roots.ModifiableRootModel;
|
|
import com.intellij.openapi.startup.StartupManager;
|
|
import com.intellij.openapi.ui.ValidationInfo;
|
|
import com.intellij.openapi.vfs.VirtualFile;
|
|
import com.intellij.psi.PsiDirectory;
|
|
import com.intellij.psi.PsiManager;
|
|
import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
|
|
import com.jetbrains.edu.learning.ui.StudyNewProjectPanel;
|
|
import com.jetbrains.python.facet.PythonSdkComboBox;
|
|
import com.jetbrains.python.module.PythonModuleBuilder;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import javax.swing.*;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class PyEduProjectTemplate extends EduProjectTemplate {
|
|
private static final Logger LOG = Logger.getInstance(PyEduProjectTemplate.class);
|
|
|
|
@NotNull
|
|
@Override
|
|
public String getName() {
|
|
return "Python";
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public String getDescription() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Icon getIcon() {
|
|
return null;
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public AbstractModuleBuilder createModuleBuilder() {
|
|
return new PythonEduModuleBuilder();
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public ValidationInfo validateSettings() {
|
|
return null;
|
|
}
|
|
|
|
private static class PythonEduModuleBuilder extends PythonModuleBuilder {
|
|
|
|
final StudyProjectGenerator studyProjectGenerator = new StudyProjectGenerator();
|
|
final PythonSdkComboBox mySdkComboBox = new PythonSdkComboBox();
|
|
|
|
@Override
|
|
public void setupRootModel(ModifiableRootModel rootModel) throws ConfigurationException {
|
|
super.setupRootModel(rootModel);
|
|
Sdk sdk = mySdkComboBox.getSelectedSdk();
|
|
if (sdk != null) {
|
|
rootModel.setSdk(sdk);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected List<WizardInputField> getAdditionalFields() {
|
|
final StudyNewProjectPanel panel = new StudyNewProjectPanel(studyProjectGenerator);
|
|
List<WizardInputField> wizardInputFields = new ArrayList<WizardInputField>();
|
|
wizardInputFields.add(createWizardInputField("Edu.ProjectSdk", "Python Interpreter:", mySdkComboBox));
|
|
wizardInputFields.add(createWizardInputField("Edu.Courses", "Courses:", panel.getCoursesComboBox()));
|
|
wizardInputFields.add(createWizardInputField("Edu.InfoPanel", "", panel.getInfoPanel()));
|
|
return wizardInputFields;
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public Module commitModule(@NotNull final Project project, @Nullable ModifiableModuleModel model) {
|
|
Module module = super.commitModule(project, model);
|
|
if (module != null) {
|
|
final VirtualFile baseDir = project.getBaseDir();
|
|
studyProjectGenerator.generateProject(project, baseDir);
|
|
final FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate("test_helper.py");
|
|
|
|
StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
final PsiDirectory projectDir = PsiManager.getInstance(project).findDirectory(baseDir);
|
|
if (projectDir != null) {
|
|
try {
|
|
FileTemplateUtil.createFromTemplate(template, "test_helper.py", null, projectDir);
|
|
}
|
|
catch (Exception e) {
|
|
LOG.error("Failed to create test_helper", e);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return module;
|
|
}
|
|
}
|
|
} |