| package org.jetbrains.plugins.coursecreator; |
| |
| import com.intellij.facet.ui.FacetEditorValidator; |
| import com.intellij.facet.ui.FacetValidatorsManager; |
| import com.intellij.facet.ui.ValidationResult; |
| import com.intellij.ide.fileTemplates.FileTemplate; |
| import com.intellij.ide.fileTemplates.FileTemplateManager; |
| import com.intellij.ide.fileTemplates.FileTemplateUtil; |
| import com.intellij.ide.util.DirectoryUtil; |
| import com.intellij.openapi.command.WriteCommandAction; |
| import com.intellij.openapi.module.Module; |
| import com.intellij.openapi.progress.ProcessCanceledException; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.platform.DirectoryProjectGenerator; |
| import com.intellij.psi.PsiDirectory; |
| import com.intellij.psi.PsiManager; |
| import com.jetbrains.python.newProject.PythonProjectGenerator; |
| import org.jetbrains.annotations.Nls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.plugins.coursecreator.format.Course; |
| import org.jetbrains.plugins.coursecreator.ui.CCNewProjectPanel; |
| |
| import javax.swing.*; |
| |
| |
| public class CCProjectGenerator extends PythonProjectGenerator implements DirectoryProjectGenerator { |
| private CCNewProjectPanel mySettingsPanel; |
| |
| @Nls |
| @NotNull |
| @Override |
| public String getName() { |
| return "Course creation"; |
| } |
| |
| @Nullable |
| @Override |
| public Object showGenerationSettings(VirtualFile baseDir) throws ProcessCanceledException { |
| return null; |
| } |
| |
| @Nullable |
| @Override |
| public Icon getLogo() { |
| return null; |
| } |
| |
| |
| @Override |
| public void generateProject(@NotNull final Project project, @NotNull final VirtualFile baseDir, |
| @Nullable Object settings, @NotNull Module module) { |
| |
| final CCProjectService service = CCProjectService.getInstance(project); |
| final Course course = new Course(mySettingsPanel.getName(), mySettingsPanel.getAuthor(), mySettingsPanel.getDescription()); |
| service.setCourse(course); |
| |
| final PsiDirectory projectDir = PsiManager.getInstance(project).findDirectory(baseDir); |
| if (projectDir == null) return; |
| new WriteCommandAction.Simple(project) { |
| @Override |
| protected void run() throws Throwable { |
| final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate("test_helper"); |
| try { |
| FileTemplateUtil.createFromTemplate(template, "test_helper.py", null, projectDir); |
| } |
| catch (Exception ignored) { |
| } |
| DirectoryUtil.createSubdirectories("hints", projectDir, "\\/"); |
| } |
| }.execute(); |
| |
| } |
| |
| @NotNull |
| @Override |
| public ValidationResult validate(@NotNull String s) { |
| String message = ""; |
| message = mySettingsPanel.getDescription().equals("") ? "Enter description" : message; |
| message = mySettingsPanel.getAuthor().equals("") ? "Enter author name" : message; |
| message = mySettingsPanel.getName().equals("") ? "Enter course name" : message; |
| return message.equals("")? ValidationResult.OK : new ValidationResult(message) ; |
| } |
| |
| @Nullable |
| @Override |
| public JPanel extendBasePanel() throws ProcessCanceledException { |
| mySettingsPanel = new CCNewProjectPanel(); |
| mySettingsPanel.registerValidators(new FacetValidatorsManager() { |
| public void registerValidator(FacetEditorValidator validator, JComponent... componentsToWatch) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| public void validate() { |
| fireStateChanged(); |
| } |
| }); |
| return mySettingsPanel.getMainPanel(); |
| } |
| } |