From a359e3b72fa6c2319e4c15e0ba1bcf5a91c27734 Mon Sep 17 00:00:00 2001 From: meanmail Date: Fri, 14 Apr 2017 15:46:38 +0700 Subject: [PATCH] Removed PyEduCourseProjectGenerator --- .../newproject/EduCourseProjectGenerator.java | 2 +- .../ui/EduCreateNewProjectDialog.java | 3 +- .../PyEduCourseProjectGenerator.java | 93 ------------------- .../edu/learning/PyEduPluginConfigurator.java | 5 +- .../PyStudyDirectoryProjectGenerator.java | 58 +++++++++++- .../PyStudyIntroductionCourseAction.java | 2 +- 6 files changed, 60 insertions(+), 103 deletions(-) delete mode 100644 python/educational-python/Edu-Python/src/com/jetbrains/edu/common/newproject/PyEduCourseProjectGenerator.java diff --git a/python/educational-core/src/com/jetbrains/edu/learning/newproject/EduCourseProjectGenerator.java b/python/educational-core/src/com/jetbrains/edu/learning/newproject/EduCourseProjectGenerator.java index 704c6c3cf3f8..0a0b04f5c09d 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/newproject/EduCourseProjectGenerator.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/newproject/EduCourseProjectGenerator.java @@ -31,7 +31,7 @@ public interface EduCourseProjectGenerator { void setCourse(@NotNull Course course); - ValidationResult validate(@NotNull String path); + ValidationResult validate(); boolean beforeProjectGenerated(); diff --git a/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCreateNewProjectDialog.java b/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCreateNewProjectDialog.java index 0a70c41d750a..a80f170f5ebf 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCreateNewProjectDialog.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCreateNewProjectDialog.java @@ -121,7 +121,7 @@ public class EduCreateNewProjectDialog extends DialogWrapper { String name = myPanel.getName(); String path = FileUtil.join(FileUtil.toSystemDependentName(myPanel.getLocationPath()), name); - ValidationResult result = projectGenerator.validate(path); + ValidationResult result = projectGenerator.validate(); if (!result.isOk()) { return result.getErrorMessage(); } @@ -170,6 +170,7 @@ public class EduCreateNewProjectDialog extends DialogWrapper { callback = (project, module) -> { if (projectGenerator.beforeProjectGenerated()) { Object settings = projectGenerator.getProjectSettings(); + //noinspection unchecked generator.generateProject(project, baseDir, settings, module); projectGenerator.afterProjectGenerated(project); } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/common/newproject/PyEduCourseProjectGenerator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/common/newproject/PyEduCourseProjectGenerator.java deleted file mode 100644 index ad0d6f4469c4..000000000000 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/common/newproject/PyEduCourseProjectGenerator.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.jetbrains.edu.common.newproject; - -import com.intellij.facet.ui.ValidationResult; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkAdditionalData; -import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil; -import com.intellij.platform.DirectoryProjectGenerator; -import com.intellij.util.BooleanFunction; -import com.jetbrains.edu.learning.newproject.EduCourseProjectGenerator; -import com.jetbrains.edu.learning.PyStudyDirectoryProjectGenerator; -import com.jetbrains.edu.learning.courseFormat.Course; -import com.jetbrains.python.newProject.PyNewProjectSettings; -import com.jetbrains.python.newProject.PythonProjectGenerator; -import com.jetbrains.python.sdk.PythonSdkAdditionalData; -import com.jetbrains.python.sdk.PythonSdkType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public class PyEduCourseProjectGenerator implements EduCourseProjectGenerator { - private final PyStudyDirectoryProjectGenerator myGenerator; - - public PyEduCourseProjectGenerator() { - this.myGenerator = new PyStudyDirectoryProjectGenerator(); - } - - @NotNull - @Override - public DirectoryProjectGenerator getDirectoryProjectGenerator() { - return myGenerator; - } - - @Nullable - @Override - public Object getProjectSettings() { - return myGenerator.getProjectSettings(); - } - - @Override - public void setCourse(@NotNull Course course) { - myGenerator.setSelectedCourse(course); - } - - @Override - public ValidationResult validate(@NotNull String path) { - myGenerator.setValidationResult(ValidationResult.OK); - return myGenerator.validate(path); - } - - @Override - public boolean beforeProjectGenerated() { - BooleanFunction function = - myGenerator.beforeProjectGenerated(null); - return function != null && function.fun(myGenerator); - } - - @Override - public void afterProjectGenerated(@NotNull Project project) { - PyNewProjectSettings settings = (PyNewProjectSettings)myGenerator.getProjectSettings(); - Sdk sdk = settings.getSdk(); - - if (sdk == null) { - myGenerator.createAndAddVirtualEnv(project, settings); - sdk = settings.getSdk(); - } - - SdkConfigurationUtil.setDirectoryProjectSdk(project, sdk); - final List sdks = PythonSdkType.getAllSdks(); - for (Sdk s : sdks) { - final SdkAdditionalData additionalData = s.getSdkAdditionalData(); - if (additionalData instanceof PythonSdkAdditionalData) { - ((PythonSdkAdditionalData)additionalData).reassociateWithCreatedProject(project); - } - } - } -} diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java index 2d5be4f68221..8bb2f43c9af3 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java @@ -15,14 +15,13 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.intellij.util.PathUtil; -import com.jetbrains.edu.common.newproject.PyEduCourseProjectGenerator; -import com.jetbrains.edu.learning.newproject.EduCourseProjectGenerator; import com.jetbrains.edu.coursecreator.settings.CCSettings; import com.jetbrains.edu.learning.actions.StudyCheckAction; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.tasks.Task; import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks; +import com.jetbrains.edu.learning.newproject.EduCourseProjectGenerator; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -149,6 +148,6 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { @Override public EduCourseProjectGenerator getEduCourseProjectGenerator() { - return new PyEduCourseProjectGenerator(); + return new PyStudyDirectoryProjectGenerator(); } } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java index ddccfdce44cc..ce401b6100eb 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java @@ -18,8 +18,10 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkAdditionalData; import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; +import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil; import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.DirectoryProjectGenerator; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.intellij.util.BooleanFunction; @@ -27,6 +29,7 @@ import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.RemoteCourse; import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator; +import com.jetbrains.edu.learning.newproject.EduCourseProjectGenerator; import com.jetbrains.edu.learning.stepic.EduStepicConnector; import com.jetbrains.edu.learning.ui.StudyNewProjectPanel; import com.jetbrains.python.configuration.PyConfigurableInterpreterList; @@ -38,6 +41,7 @@ import com.jetbrains.python.remote.PyProjectSynchronizer; import com.jetbrains.python.sdk.AbstractCreateVirtualEnvDialog; import com.jetbrains.python.sdk.PyDetectedSdk; import com.jetbrains.python.sdk.PythonSdkAdditionalData; +import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; import icons.InteractiveLearningPythonIcons; import org.jetbrains.annotations.Nls; @@ -51,7 +55,8 @@ import java.awt.event.MouseEvent; import java.util.Collection; import java.util.List; -public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator { +public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator + implements EduCourseProjectGenerator { private static final Logger LOG = Logger.getInstance(PyStudyDirectoryProjectGenerator.class.getName()); private final StudyProjectGenerator myGenerator; private static final String NO_PYTHON_INTERPRETER = "Add python interpreter."; @@ -113,16 +118,61 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator sdks = PyConfigurableInterpreterList.getInstance(project).getAllPythonSdks(); + + ValidationResult validationResult; if (sdks.isEmpty()) { - myValidationResult = new ValidationResult(NO_PYTHON_INTERPRETER); + validationResult = new ValidationResult(NO_PYTHON_INTERPRETER); + } else { + validationResult = ValidationResult.OK; + } + + return validationResult; + } + + @NotNull + @Override + public ValidationResult validate(@NotNull String s) { + ValidationResult validationResult = validate(); + if (!validationResult.isOk()) { + myValidationResult = validationResult; } return myValidationResult; } + @Override + public boolean beforeProjectGenerated() { + BooleanFunction function = beforeProjectGenerated(null); + return function != null && function.fun(this); + } + + @Override + public void afterProjectGenerated(@NotNull Project project) { + PyNewProjectSettings settings = (PyNewProjectSettings)getProjectSettings(); + Sdk sdk = settings.getSdk(); + + if (sdk == null) { + createAndAddVirtualEnv(project, settings); + sdk = settings.getSdk(); + } + + SdkConfigurationUtil.setDirectoryProjectSdk(project, sdk); + final List sdks = PythonSdkType.getAllSdks(); + for (Sdk s : sdks) { + final SdkAdditionalData additionalData = s.getSdkAdditionalData(); + if (additionalData instanceof PythonSdkAdditionalData) { + ((PythonSdkAdditionalData)additionalData).reassociateWithCreatedProject(project); + } + } + } + public void setValidationResult(ValidationResult validationResult) { myValidationResult = validationResult; } @@ -172,7 +222,7 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator