diff --git a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/WebProjectTemplate.java b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/WebProjectTemplate.java index d7a58e2bc349..bade6b79ae23 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/WebProjectTemplate.java +++ b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/WebProjectTemplate.java @@ -36,7 +36,7 @@ import java.util.List; */ public abstract class WebProjectTemplate extends WebProjectGenerator implements ProjectTemplate { - protected final NotNullLazyValue> myPeer = new NotNullLazyValue>() { + private final NotNullLazyValue> myPeerHolder = new NotNullLazyValue>() { @NotNull @Override protected GeneratorPeer compute() { @@ -47,59 +47,21 @@ public abstract class WebProjectTemplate extends WebProjectGenerator imple @NotNull @Override public ModuleBuilder createModuleBuilder() { - final ModuleBuilder builder = WebModuleType.getInstance().createModuleBuilder(); - return new ModuleBuilder() { - @Override - public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException { - builder.setupRootModel(modifiableRootModel); - } - - @Override - public ModuleType getModuleType() { - return builder.getModuleType(); - } - - @Override - public List commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) { - List modules = builder.commit(project, model, modulesProvider); - if (modules != null && !modules.isEmpty()) { - Module module = modules.get(0); - generateProject(module.getProject(), module.getProject().getBaseDir(), myPeer.getValue().getSettings(), module); - } - return modules; - } - - @Nullable - @Override - public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) { - GeneratorPeer peer = myPeer.getValue(); - peer.buildUI(settingsStep); - return new ModuleWizardStep() { - @Override - public JComponent getComponent() { - return null; - } - - @Override - public void updateDataModel() { - } - }; - } - - @Override - public Icon getNodeIcon() { - return getIcon(); - } - }; + return WebModuleType.getInstance().createModuleBuilder(this); } @Nullable @Override public ValidationInfo validateSettings() { - return myPeer.getValue().validate(); + return myPeerHolder.getValue().validate(); } - protected Icon getIcon() { + public Icon getIcon() { return WebModuleBuilder.ICON; } + + @NotNull + public GeneratorPeer getPeer() { + return myPeerHolder.getValue(); + } } diff --git a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleBuilder.java b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleBuilder.java index 86c5a8c0eecb..c57513e1ecea 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleBuilder.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleBuilder.java @@ -17,10 +17,21 @@ package com.intellij.openapi.module; import com.intellij.icons.AllIcons; import com.intellij.ide.util.projectWizard.ModuleBuilder; +import com.intellij.ide.util.projectWizard.ModuleWizardStep; +import com.intellij.ide.util.projectWizard.SettingsStep; +import com.intellij.ide.util.projectWizard.WebProjectTemplate; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.ui.configuration.ModulesProvider; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.WebProjectGenerator; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.List; /** * @author Dmitry Avdeev @@ -31,6 +42,16 @@ public class WebModuleBuilder extends ModuleBuilder { public static final String GROUP_NAME = "Static Web"; public static final Icon ICON = AllIcons.General.Web; + private final WebProjectTemplate myTemplate; + + public WebModuleBuilder(@NotNull WebProjectTemplate template) { + myTemplate = template; + } + + public WebModuleBuilder() { + myTemplate = null; + } + @Override public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException { doAddContentEntry(modifiableRootModel); @@ -48,6 +69,47 @@ public class WebModuleBuilder extends ModuleBuilder { @Override public Icon getNodeIcon() { - return ICON; + return myTemplate != null ? myTemplate.getIcon() : ICON; } + + @Override + public List commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) { + List modules = super.commit(project, model, modulesProvider); + if (modules != null && !modules.isEmpty() && myTemplate != null) { + doGenerate(myTemplate, modules.get(0)); + } + return modules; + } + + private static void doGenerate(@NotNull WebProjectTemplate template, @NotNull Module module) { + WebProjectGenerator.GeneratorPeer peer = template.getPeer(); + ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module); + VirtualFile[] contentRoots = moduleRootManager.getContentRoots(); + VirtualFile dir = module.getProject().getBaseDir(); + if (contentRoots.length > 0 && contentRoots[0] != null) { + dir = contentRoots[0]; + } + template.generateProject(module.getProject(), dir, peer.getSettings(), module); + } + + @Nullable + @Override + public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) { + if (myTemplate == null) { + return super.modifySettingsStep(settingsStep); + } + WebProjectGenerator.GeneratorPeer peer = myTemplate.getPeer(); + peer.buildUI(settingsStep); + return new ModuleWizardStep() { + @Override + public JComponent getComponent() { + return null; + } + + @Override + public void updateDataModel() { + } + }; + } + } diff --git a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleType.java b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleType.java index 729672b00434..52bafb251fd4 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleType.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleType.java @@ -1,6 +1,7 @@ package com.intellij.openapi.module; import com.intellij.ide.util.projectWizard.ModuleBuilder; +import com.intellij.ide.util.projectWizard.WebProjectTemplate; import org.jetbrains.annotations.NotNull; /** @@ -16,4 +17,10 @@ public class WebModuleType extends WebModuleTypeBase { public ModuleBuilder createModuleBuilder() { return new WebModuleBuilder(); } + + @NotNull + public ModuleBuilder createModuleBuilder(@NotNull WebProjectTemplate webProjectTemplate) { + return new WebModuleBuilder(webProjectTemplate); + } + }