IDEA-93744 IDEA-93743 Create Project From Template: Simple Web: facets creating is enabled but doesn't work

This commit is contained in:
Dmitry Avdeev
2012-10-29 17:03:23 +04:00
parent df403553da
commit 835cedda09
4 changed files with 75 additions and 15 deletions
@@ -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<FrameworkSupportInModuleProvider> 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;
}
});
}
}
@@ -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;
}
@@ -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
@@ -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<ModuleBuilderFactory> 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<ModuleConfigurationUpdater> myUpdaters = new ArrayList<ModuleConfigurationUpdater>();
private final Set<ModuleConfigurationUpdater> myUpdaters = new HashSet<ModuleConfigurationUpdater>();
private final EventDispatcher<ModuleBuilderListener> myDispatcher = EventDispatcher.create(ModuleBuilderListener.class);
public static List<ModuleBuilder> 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);