WEB-6418 Create New Project with separate Module name/subfolder creates bad project structure for Node.js modules

This commit is contained in:
Sergey Simonchik
2013-01-31 15:05:05 +04:00
parent 2ea3d9d09d
commit a5e2fc7b02
3 changed files with 79 additions and 48 deletions
@@ -36,7 +36,7 @@ import java.util.List;
*/
public abstract class WebProjectTemplate<T> extends WebProjectGenerator<T> implements ProjectTemplate {
protected final NotNullLazyValue<GeneratorPeer<T>> myPeer = new NotNullLazyValue<GeneratorPeer<T>>() {
private final NotNullLazyValue<GeneratorPeer<T>> myPeerHolder = new NotNullLazyValue<GeneratorPeer<T>>() {
@NotNull
@Override
protected GeneratorPeer<T> compute() {
@@ -47,59 +47,21 @@ public abstract class WebProjectTemplate<T> extends WebProjectGenerator<T> 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<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
List<Module> 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<T> 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<T> getPeer() {
return myPeerHolder.getValue();
}
}
@@ -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<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
List<Module> modules = super.commit(project, model, modulesProvider);
if (modules != null && !modules.isEmpty() && myTemplate != null) {
doGenerate(myTemplate, modules.get(0));
}
return modules;
}
private static <T> void doGenerate(@NotNull WebProjectTemplate<T> template, @NotNull Module module) {
WebProjectGenerator.GeneratorPeer<T> 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() {
}
};
}
}
@@ -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<ModuleBuilder> {
public ModuleBuilder createModuleBuilder() {
return new WebModuleBuilder();
}
@NotNull
public <T> ModuleBuilder createModuleBuilder(@NotNull WebProjectTemplate<T> webProjectTemplate) {
return new WebModuleBuilder(webProjectTemplate);
}
}