From 835cedda095483ceded7c1309f27691cbccea1a8 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Mon, 29 Oct 2012 17:01:45 +0400 Subject: [PATCH] IDEA-93744 IDEA-93743 Create Project From Template: Simple Web: facets creating is enabled but doesn't work --- .../SupportForFrameworksStep.java | 42 +++++++++++++++++-- .../ProjectWizardStepFactoryImpl.java | 2 +- .../templates/TemplateModuleBuilder.java | 26 +++++++++--- .../ide/util/projectWizard/ModuleBuilder.java | 20 ++++++--- 4 files changed, 75 insertions(+), 15 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java index d9ba6c248046..f27e652bc9be 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java @@ -7,6 +7,8 @@ import com.intellij.ide.util.frameworkSupport.FrameworkSupportUtil; import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.ModuleWizardStep; +import com.intellij.ide.util.projectWizard.ProjectBuilder; +import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.ide.wizard.CommitStepException; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.ProjectBundle; @@ -15,10 +17,13 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContaine import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; import javax.swing.*; +import javax.swing.tree.TreeNode; import java.util.List; /** @@ -27,17 +32,24 @@ import java.util.List; public class SupportForFrameworksStep extends ModuleWizardStep { private final AddSupportForFrameworksPanel mySupportForFrameworksPanel; private final FrameworkSupportModelBase myFrameworkSupportModel; + private final WizardContext myContext; + private final ModuleBuilder myBuilder; + private final ModuleBuilder.ModuleConfigurationUpdater myConfigurationUpdater; private boolean myCommitted; - public SupportForFrameworksStep(final ModuleBuilder builder, @NotNull LibrariesContainer librariesContainer) { + public SupportForFrameworksStep(WizardContext context, final ModuleBuilder builder, + @NotNull LibrariesContainer librariesContainer) { + myContext = context; + myBuilder = builder; List providers = FrameworkSupportUtil.getProviders(builder); myFrameworkSupportModel = new FrameworkSupportModelInWizard(librariesContainer, builder); mySupportForFrameworksPanel = new AddSupportForFrameworksPanel(providers, myFrameworkSupportModel); - builder.addModuleConfigurationUpdater(new ModuleBuilder.ModuleConfigurationUpdater() { + myConfigurationUpdater = new ModuleBuilder.ModuleConfigurationUpdater() { public void update(@NotNull final Module module, @NotNull final ModifiableRootModel rootModel) { mySupportForFrameworksPanel.addSupport(module, rootModel); } - }); + }; + builder.addModuleConfigurationUpdater(myConfigurationUpdater); } private static String getBaseDirectory(final ModuleBuilder builder) { @@ -81,6 +93,11 @@ public class SupportForFrameworksStep extends ModuleWizardStep { @Override public void updateStep() { + ProjectBuilder builder = myContext.getProjectBuilder(); + if (builder instanceof ModuleBuilder) { + myBuilder.updateFrom((ModuleBuilder)builder); + ((ModuleBuilder)builder).addModuleConfigurationUpdater(myConfigurationUpdater); + } myFrameworkSupportModel.fireWizardStepUpdated(); } @@ -106,4 +123,23 @@ public class SupportForFrameworksStep extends ModuleWizardStep { return getBaseDirectory(myBuilder); } } + + @TestOnly + public boolean enableSupport(final String frameworkId) { + return !TreeUtil.traverse((TreeNode)mySupportForFrameworksPanel.getFrameworksTree().getModel().getRoot(), new TreeUtil.Traverse() { + @Override + public boolean accept(Object node) { + if (node instanceof FrameworkSupportNode && frameworkId.equals( + ((FrameworkSupportNode)node).getProvider().getFrameworkType().getId())) { + TreeNode parent = ((FrameworkSupportNode)node).getParent(); + if (parent instanceof FrameworkSupportNode) { + ((FrameworkSupportNode)parent).setChecked(true); + } + ((FrameworkSupportNode)node).setChecked(true); + return false; + } + return true; + } + }); + } } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactoryImpl.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactoryImpl.java index b7da81b9ad80..af656cc37564 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactoryImpl.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactoryImpl.java @@ -133,7 +133,7 @@ public class ProjectWizardStepFactoryImpl extends ProjectWizardStepFactory { public ModuleWizardStep createSupportForFrameworksStep(WizardContext context, ModuleBuilder builder, ModulesProvider modulesProvider) { if (!FrameworkSupportUtil.getProviders(builder).isEmpty()) { final LibrariesContainer container = LibrariesContainerFactory.createContainer(context, modulesProvider); - return new SupportForFrameworksStep(builder, container); + return new SupportForFrameworksStep(context, builder, container); } return null; } diff --git a/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java b/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java index d5d8c3cee5f2..ce24cab17006 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java +++ b/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java @@ -19,10 +19,7 @@ import com.intellij.ide.util.newProjectWizard.modes.ImportImlMode; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.module.ModifiableModuleModel; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.ModuleWithNameAlreadyExists; +import com.intellij.openapi.module.*; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; @@ -65,7 +62,26 @@ class TemplateModuleBuilder extends ModuleBuilder { @Override public Module commitModule(@NotNull Project project, ModifiableModuleModel model) { - return myProjectMode ? null : super.commitModule(project, model); + if (myProjectMode) { + final Module[] modules = ModuleManager.getInstance(project).getModules(); + if (modules.length > 0) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + try { + setupModule(modules[0]); + } + catch (ConfigurationException e) { + LOG.error(e); + } + } + }); + } + return null; + } + else { + return super.commitModule(project, model); + } } @Override diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java index 22a975dccffa..ec55d0579ed5 100644 --- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java +++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java @@ -44,9 +44,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; public abstract class ModuleBuilder extends ProjectBuilder{ private static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.moduleBuilder"); @@ -55,7 +53,7 @@ public abstract class ModuleBuilder extends ProjectBuilder{ private String myName; @NonNls private String myModuleFilePath; private String myContentEntryPath; - private final List myUpdaters = new ArrayList(); + private final Set myUpdaters = new HashSet(); private final EventDispatcher myDispatcher = EventDispatcher.create(ModuleBuilderListener.class); public static List getAllBuilders() { @@ -176,14 +174,18 @@ public abstract class ModuleBuilder extends ProjectBuilder{ deleteModuleFile(myModuleFilePath); final ModuleType moduleType = getModuleType(); final Module module = moduleModel.newModule(myModuleFilePath, moduleType.getId()); + setupModule(module); + + return module; + } + + protected void setupModule(Module module) throws ConfigurationException { final ModifiableRootModel modifiableModel = ModuleRootManager.getInstance(module).getModifiableModel(); setupRootModel(modifiableModel); for (ModuleConfigurationUpdater updater : myUpdaters) { updater.update(module, modifiableModel); } modifiableModel.commit(); - - return module; } private void onModuleInitialized(final Module module) { @@ -288,6 +290,12 @@ public abstract class ModuleBuilder extends ProjectBuilder{ return getModuleType().getName(); } + public void updateFrom(ModuleBuilder from) { + myName = from.getName(); + myContentEntryPath = from.getContentEntryPath(); + myModuleFilePath = from.getModuleFilePath(); + } + public static abstract class ModuleConfigurationUpdater { public abstract void update(@NotNull Module module, @NotNull ModifiableRootModel rootModel);