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 d1a5479f39a9..12708c653a09 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/PyCharmNewProjectStep.java @@ -21,7 +21,9 @@ import com.intellij.ide.util.projectWizard.actions.ProjectSpecificAction; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.ui.Messages; import com.intellij.platform.DirectoryProjectGenerator; +import com.intellij.util.BooleanFunction; import com.intellij.util.NullableConsumer; import com.jetbrains.python.newProject.PyFrameworkProjectGenerator; import com.jetbrains.python.newProject.PythonBaseProjectGenerator; @@ -59,7 +61,8 @@ public class PyCharmNewProjectStep extends DefaultActionGroup implements DumbAwa List pluginSpecificGenerators = Lists.newArrayList(); for (DirectoryProjectGenerator generator : generators) { if (generator instanceof PythonProjectGenerator) { - ProjectSpecificAction group = new ProjectSpecificAction(generator, new ProjectSpecificSettingsStep(generator, callback)); + ProjectSpecificAction group = + new ProjectSpecificAction(generator, new ProjectSpecificSettingsStep(generator, new PythonGenerateProjectCallback())); addAll(group.getChildren(null)); } else @@ -71,4 +74,28 @@ public class PyCharmNewProjectStep extends DefaultActionGroup implements DumbAwa addAll(step.getChildren(null)); } } + + private static class PythonGenerateProjectCallback implements NullableConsumer { + @Override + public void consume(@Nullable ProjectSettingsStepBase base) { + if (base == null) return; + final DirectoryProjectGenerator generator = base.getProjectGenerator(); + final NullableConsumer callback = new GenerateProjectCallback(); + if (generator instanceof PythonProjectGenerator) { + final BooleanFunction beforeProjectGenerated = ((PythonProjectGenerator)generator).beforeProjectGenerated(); + if (beforeProjectGenerated != null) { + final boolean result = beforeProjectGenerated.fun((PythonProjectGenerator)generator); + if (result) { + callback.consume(base); + } + else { + Messages.showWarningDialog("Project can not be generated", "Error in Project Generation"); + } + } + else { + callback.consume(base); + } + } + } + } } diff --git a/python/openapi/src/com/jetbrains/python/newProject/PythonProjectGenerator.java b/python/openapi/src/com/jetbrains/python/newProject/PythonProjectGenerator.java index 4c96820bc8cc..f06176d5f007 100644 --- a/python/openapi/src/com/jetbrains/python/newProject/PythonProjectGenerator.java +++ b/python/openapi/src/com/jetbrains/python/newProject/PythonProjectGenerator.java @@ -18,6 +18,7 @@ package com.jetbrains.python.newProject; import com.intellij.facet.ui.ValidationResult; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.util.BooleanFunction; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,4 +63,9 @@ public abstract class PythonProjectGenerator { listener.stateChanged(); } } + + @Nullable + public BooleanFunction beforeProjectGenerated() { + return null; + } }