diff options
Diffstat (limited to 'python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java')
-rw-r--r-- | python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java | 140 |
1 files changed, 9 insertions, 131 deletions
diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java b/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java index 4f9f1074df68..0628c6d829c1 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java @@ -16,153 +16,33 @@ package com.jetbrains.python.newProject.actions; import com.google.common.collect.Lists; -import com.intellij.ide.GeneralSettings; -import com.intellij.ide.util.projectWizard.WebProjectTemplate; -import com.intellij.internal.statistic.UsageTrigger; -import com.intellij.internal.statistic.beans.ConvertUsagesUtil; import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.projectRoots.ProjectJdkTable; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkAdditionalData; -import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.platform.DirectoryProjectGenerator; -import com.intellij.platform.PlatformProjectOpenProcessor; -import com.intellij.projectImport.ProjectOpenedCallback; import com.intellij.util.NullableConsumer; -import com.jetbrains.python.configuration.PyConfigurableInterpreterList; import com.jetbrains.python.newProject.PyFrameworkProjectGenerator; -import com.jetbrains.python.newProject.PyNewProjectSettings; import com.jetbrains.python.newProject.PythonBaseProjectGenerator; import com.jetbrains.python.newProject.PythonProjectGenerator; -import com.jetbrains.python.sdk.PyDetectedSdk; -import com.jetbrains.python.sdk.PySdkService; -import com.jetbrains.python.sdk.PythonSdkAdditionalData; -import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.File; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class PyCharmNewProjectStep extends DefaultActionGroup implements DumbAware { - private static final Logger LOG = Logger.getInstance(PyCharmNewProjectStep.class); public PyCharmNewProjectStep(@NotNull final String name, @Nullable final Runnable runnable) { - super(name, true); - - final NullableConsumer<AbstractProjectSettingsStep> callback = new NullableConsumer<AbstractProjectSettingsStep>() { - @Override - public void consume(@Nullable AbstractProjectSettingsStep settingsStep) { - if (runnable != null) - runnable.run(); - if (settingsStep == null) return; - - Sdk sdk = settingsStep.getSdk(); - final Project project = ProjectManager.getInstance().getDefaultProject(); - final ProjectSdksModel model = PyConfigurableInterpreterList.getInstance(project).getModel(); - if (sdk instanceof PyDetectedSdk) { - final String name = sdk.getName(); - VirtualFile sdkHome = ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() { - @Override - public VirtualFile compute() { - return LocalFileSystem.getInstance().refreshAndFindFileByPath(name); - } - }); - PySdkService.getInstance().solidifySdk(sdk); - sdk = SdkConfigurationUtil.setupSdk(ProjectJdkTable.getInstance().getAllJdks(), sdkHome, PythonSdkType.getInstance(), true, null, - null); - model.addSdk(sdk); - settingsStep.setSdk(sdk); - try { - model.apply(); - } - catch (ConfigurationException exception) { - LOG.error("Error adding detected python interpreter " + exception.getMessage()); - } - } - Project newProject = generateProject(project, settingsStep); - if (newProject != null) { - SdkConfigurationUtil.setDirectoryProjectSdk(newProject, sdk); - final List<Sdk> sdks = PythonSdkType.getAllSdks(); - for (Sdk s : sdks) { - final SdkAdditionalData additionalData = s.getSdkAdditionalData(); - if (additionalData instanceof PythonSdkAdditionalData) { - ((PythonSdkAdditionalData)additionalData).reassociateWithCreatedProject(newProject); - } - } - } - } - - @Nullable - private Project generateProject(@NotNull final Project project, @NotNull final AbstractProjectSettingsStep settings) { - final DirectoryProjectGenerator generator = settings.getProjectGenerator(); - final File location = new File(settings.getProjectLocation()); - if (!location.exists() && !location.mkdirs()) { - Messages.showErrorDialog(project, "Cannot create directory '" + location + "'", "Create Project"); - return null; - } - - final VirtualFile baseDir = ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() { - public VirtualFile compute() { - return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(location); - } - }); - LOG.assertTrue(baseDir != null, "Couldn't find '" + location + "' in VFS"); - baseDir.refresh(false, true); - - if (baseDir.getChildren().length > 0) { - int rc = Messages.showYesNoDialog(project, - "The directory '" + location + - "' is not empty. Would you like to create a project from existing sources instead?", - "Create New Project", Messages.getQuestionIcon()); - if (rc == Messages.YES) { - return PlatformProjectOpenProcessor.getInstance().doOpenProject(baseDir, null, false); - } - } + this(name, runnable, false); + } - String generatorName = generator == null ? "empty" : ConvertUsagesUtil.ensureProperKey(generator.getName()); - UsageTrigger.trigger("NewDirectoryProjectAction." + generatorName); + public PyCharmNewProjectStep(@NotNull final String name, @Nullable final Runnable runnable, boolean isWelcomeScreen) { + super(name, true); - GeneralSettings.getInstance().setLastProjectCreationLocation(location.getParent()); + final NullableConsumer<AbstractProjectSettingsStep> callback = new GenerateProjectCallback(runnable); - return PlatformProjectOpenProcessor.doOpenProject(baseDir, null, false, -1, new ProjectOpenedCallback() { - @Override - public void projectOpened(Project project, Module module) { - if (generator != null) { - Object projectSettings = null; - if (generator instanceof PythonProjectGenerator) - projectSettings = ((PythonProjectGenerator)generator).getProjectSettings(); - else if (generator instanceof WebProjectTemplate) { - projectSettings = ((WebProjectTemplate)generator).getPeer().getSettings(); - } - if (projectSettings instanceof PyNewProjectSettings) { - ((PyNewProjectSettings)projectSettings).setSdk(settings.getSdk()); - ((PyNewProjectSettings)projectSettings).setInstallFramework(settings.installFramework()); - } - //noinspection unchecked - generator.generateProject(project, baseDir, projectSettings, module); - } - } - }, false); - } - }; - - final ProjectSpecificAction action = new ProjectSpecificAction(callback, new PythonBaseProjectGenerator()); + final ProjectSpecificAction action = new ProjectSpecificAction(callback, new PythonBaseProjectGenerator(), isWelcomeScreen); add(action); final DirectoryProjectGenerator[] generators = Extensions.getExtensions(DirectoryProjectGenerator.EP_NAME); @@ -181,19 +61,17 @@ public class PyCharmNewProjectStep extends DefaultActionGroup implements DumbAwa List<DirectoryProjectGenerator> pluginSpecificGenerators = Lists.newArrayList(); for (DirectoryProjectGenerator generator : generators) { if (generator instanceof PythonProjectGenerator) - add(new ProjectSpecificAction(callback, generator)); + add(new ProjectSpecificAction(callback, generator, isWelcomeScreen)); else pluginSpecificGenerators.add(generator); } if (!pluginSpecificGenerators.isEmpty()) { - add(new PluginSpecificProjectsStep(callback, pluginSpecificGenerators)); + add(new PluginSpecificProjectsStep(callback, pluginSpecificGenerators, isWelcomeScreen)); } } public PyCharmNewProjectStep() { - this("Select Project Type", null); - + this("Select Project Type", null, true); } - } |