blob: 94e551250aeda3c9f23504308b00218e9b8a885b [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.projectWizard;
import com.intellij.CommonBundle;
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.ide.util.frameworkSupport.FrameworkRole;
import com.intellij.ide.util.frameworkSupport.FrameworkSupportUtil;
import com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksPanel;
import com.intellij.ide.util.newProjectWizard.FrameworkSupportNode;
import com.intellij.ide.util.newProjectWizard.TemplatesGroup;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase;
import com.intellij.ide.util.newProjectWizard.modes.CreateFromTemplateMode;
import com.intellij.ide.util.projectWizard.*;
import com.intellij.ide.wizard.CommitStepException;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.WebModuleTypeBase;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.platform.ProjectTemplate;
import com.intellij.platform.ProjectTemplateEP;
import com.intellij.platform.templates.*;
import com.intellij.ui.CollectionListModel;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.ListSpeedSearch;
import com.intellij.ui.SingleSelectionModel;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBList;
import com.intellij.ui.popup.list.GroupedItemsListRenderer;
import com.intellij.util.Function;
import com.intellij.util.PlatformUtils;
import com.intellij.util.containers.*;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.net.URL;
import java.util.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
/**
* @author Dmitry Avdeev
* Date: 04.09.13
*/
@SuppressWarnings("unchecked")
public class ProjectTypeStep extends ModuleWizardStep implements SettingsStep, Disposable {
public static final Convertor<FrameworkSupportInModuleProvider,String> PROVIDER_STRING_CONVERTOR =
new Convertor<FrameworkSupportInModuleProvider, String>() {
@Override
public String convert(FrameworkSupportInModuleProvider o) {
return o.getId();
}
};
public static final Function<FrameworkSupportNode, String> NODE_STRING_FUNCTION = new Function<FrameworkSupportNode, String>() {
@Override
public String fun(FrameworkSupportNode node) {
return node.getId();
}
};
private static final String TEMPLATES_CARD = "templates card";
private static final String FRAMEWORKS_CARD = "frameworks card";
private static final String PROJECT_WIZARD_GROUP = "project.wizard.group";
private final WizardContext myContext;
private final NewProjectWizard myWizard;
private final ModulesProvider myModulesProvider;
private final AddSupportForFrameworksPanel myFrameworksPanel;
private final ModuleBuilder.ModuleConfigurationUpdater myConfigurationUpdater;
@SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
private final FactoryMap<ProjectTemplate, ModuleBuilder> myBuilders = new FactoryMap<ProjectTemplate, ModuleBuilder>() {
@Nullable
@Override
protected ModuleBuilder create(ProjectTemplate key) {
return (ModuleBuilder)key.createModuleBuilder();
}
};
private final Map<String, ModuleWizardStep> myCustomSteps = new HashMap<String, ModuleWizardStep>();
private final MultiMap<TemplatesGroup,ProjectTemplate> myTemplatesMap;
private JPanel myPanel;
private JPanel myOptionsPanel;
private JBList myProjectTypeList;
private ProjectTemplateList myTemplatesList;
private JPanel myFrameworksPanelPlaceholder;
private JPanel myHeaderPanel;
private JBLabel myFrameworksLabel;
@Nullable
private ModuleWizardStep mySettingsStep;
private String myCurrentCard;
private TemplatesGroup myLastSelectedGroup;
public ProjectTypeStep(WizardContext context, NewProjectWizard wizard, ModulesProvider modulesProvider) {
myContext = context;
myWizard = wizard;
myTemplatesMap = new ConcurrentMultiMap<TemplatesGroup, ProjectTemplate>();
final List<TemplatesGroup> groups = fillTemplatesMap(context);
myProjectTypeList.setModel(new CollectionListModel<TemplatesGroup>(groups));
myProjectTypeList.setSelectionModel(new SingleSelectionModel());
myProjectTypeList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
updateSelection();
}
});
myProjectTypeList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter<TemplatesGroup>() {
@Nullable
@Override
public String getTextFor(TemplatesGroup value) {
return value.getName();
}
@Nullable
@Override
public String getTooltipFor(TemplatesGroup value) {
return value.getDescription();
}
@Nullable
@Override
public Icon getIconFor(TemplatesGroup value) {
return value.getIcon();
}
@Override
public boolean hasSeparatorAboveOf(TemplatesGroup value) {
int index = groups.indexOf(value);
if (index < 1) return false;
TemplatesGroup upper = groups.get(index - 1);
if (upper.getParentGroup() == null && value.getParentGroup() == null) return true;
return !Comparing.equal(upper.getParentGroup(), value.getParentGroup()) &&
!Comparing.equal(upper.getName(), value.getParentGroup());
}
}) {
@Override
protected JComponent createItemComponent() {
JComponent component = super.createItemComponent();
myTextLabel.setBorder(IdeBorderFactory.createEmptyBorder(3));
return component;
}
});
new ListSpeedSearch(myProjectTypeList) {
@Override
protected String getElementText(Object element) {
return ((TemplatesGroup)element).getName();
}
};
myModulesProvider = modulesProvider;
Project project = context.getProject();
final LibrariesContainer container = LibrariesContainerFactory.createContainer(context, modulesProvider);
FrameworkSupportModelBase model = new FrameworkSupportModelBase(project, null, container) {
@NotNull
@Override
public String getBaseDirectoryForLibrariesPath() {
ModuleBuilder builder = getSelectedBuilder();
return StringUtil.notNullize(builder.getContentEntryPath());
}
@Override
public ModuleBuilder getModuleBuilder() {
return getSelectedBuilder();
}
};
myFrameworksPanel = new AddSupportForFrameworksPanel(Collections.<FrameworkSupportInModuleProvider>emptyList(), model, true, myHeaderPanel);
Disposer.register(this, myFrameworksPanel);
myFrameworksPanelPlaceholder.add(myFrameworksPanel.getMainPanel());
myFrameworksLabel.setLabelFor(myFrameworksPanel.getFrameworksTree());
myFrameworksLabel.setBorder(IdeBorderFactory.createEmptyBorder(3));
myConfigurationUpdater = new ModuleBuilder.ModuleConfigurationUpdater() {
@Override
public void update(@NotNull Module module, @NotNull ModifiableRootModel rootModel) {
if (isFrameworksMode()) {
myFrameworksPanel.addSupport(module, rootModel);
}
}
};
myProjectTypeList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
projectTypeChanged();
}
});
myTemplatesList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
updateSelection();
}
});
for (TemplatesGroup templatesGroup : myTemplatesMap.keySet()) {
ModuleBuilder builder = templatesGroup.getModuleBuilder();
if (builder != null) {
myWizard.getSequence().addStepsForBuilder(builder, context, modulesProvider);
}
for (ProjectTemplate template : myTemplatesMap.get(templatesGroup)) {
myWizard.getSequence().addStepsForBuilder(myBuilders.get(template), context, modulesProvider);
}
}
final String groupId = PropertiesComponent.getInstance().getValue(PROJECT_WIZARD_GROUP);
if (groupId != null) {
TemplatesGroup group = ContainerUtil.find(groups, new Condition<TemplatesGroup>() {
@Override
public boolean value(TemplatesGroup group) {
return groupId.equals(group.getId());
}
});
if (group != null) {
myProjectTypeList.setSelectedValue(group, true);
}
}
if (myProjectTypeList.getSelectedValue() == null) {
myProjectTypeList.setSelectedIndex(0);
}
myTemplatesList.restoreSelection();
}
private static ModuleType getModuleType(TemplatesGroup group) {
ModuleBuilder moduleBuilder = group.getModuleBuilder();
return moduleBuilder == null ? null : moduleBuilder.getModuleType();
}
private static boolean matchFramework(ProjectCategory projectCategory, FrameworkSupportInModuleProvider framework) {
FrameworkRole[] roles = framework.getRoles();
if (roles.length == 0) return true;
List<FrameworkRole> acceptable = Arrays.asList(projectCategory.getAcceptableFrameworkRoles());
return ContainerUtil.intersects(Arrays.asList(roles), acceptable);
}
private boolean isFrameworksMode() {
return FRAMEWORKS_CARD.equals(myCurrentCard) && getSelectedBuilder().equals(myContext.getProjectBuilder());
}
private List<TemplatesGroup> fillTemplatesMap(WizardContext context) {
List<ModuleBuilder> builders = ModuleBuilder.getAllBuilders();
if (context.isCreatingNewProject()) {
builders.add(new EmptyModuleBuilder());
}
Map<String, TemplatesGroup> groupMap = new HashMap<String, TemplatesGroup>();
for (ModuleBuilder builder : builders) {
BuilderBasedTemplate template = new BuilderBasedTemplate(builder);
if (builder.isTemplate()) {
TemplatesGroup group = groupMap.get(builder.getGroupName());
if (group == null) {
group = new TemplatesGroup(builder);
}
myTemplatesMap.putValue(group, template);
}
else {
TemplatesGroup group = new TemplatesGroup(builder);
groupMap.put(group.getName(), group);
myTemplatesMap.put(group, new ArrayList<ProjectTemplate>());
}
}
MultiMap<TemplatesGroup, ProjectTemplate> map = CreateFromTemplateMode.getTemplatesMap(context);
myTemplatesMap.putAllValues(map);
for (ProjectCategory category : ProjectCategory.EXTENSION_POINT_NAME.getExtensions()) {
TemplatesGroup group = new TemplatesGroup(category);
myTemplatesMap.remove(group);
myTemplatesMap.put(group, new ArrayList<ProjectTemplate>());
}
if (context.isCreatingNewProject()) {
MultiMap<String, ProjectTemplate> localTemplates = loadLocalTemplates();
for (TemplatesGroup group : myTemplatesMap.keySet()) {
myTemplatesMap.putValues(group, localTemplates.get(group.getId()));
}
}
// remove Static Web group in IDEA Community if no specific templates found (IDEA-120593)
if (PlatformUtils.isIdeaCommunity()) {
for (TemplatesGroup group : myTemplatesMap.keySet()) {
if (WebModuleTypeBase.WEB_MODULE.equals(group.getId()) && myTemplatesMap.get(group).isEmpty()) {
myTemplatesMap.remove(group);
break;
}
}
}
List<TemplatesGroup> groups = new ArrayList<TemplatesGroup>(myTemplatesMap.keySet());
// sorting by module type popularity
final MultiMap<ModuleType, TemplatesGroup> moduleTypes = new MultiMap<ModuleType, TemplatesGroup>();
for (TemplatesGroup group : groups) {
ModuleType type = getModuleType(group);
moduleTypes.putValue(type, group);
}
Collections.sort(groups, new Comparator<TemplatesGroup>() {
@Override
public int compare(TemplatesGroup o1, TemplatesGroup o2) {
int i = o2.getWeight() - o1.getWeight();
if (i != 0) return i;
int i1 = moduleTypes.get(getModuleType(o2)).size() - moduleTypes.get(getModuleType(o1)).size();
if (i1 != 0) return i1;
return o1.compareTo(o2);
}
});
Set<String> groupNames = ContainerUtil.map2Set(groups, new Function<TemplatesGroup, String>() {
@Override
public String fun(TemplatesGroup group) {
return group.getParentGroup();
}
});
// move subgroups
MultiMap<String, TemplatesGroup> subGroups = new MultiMap<String, TemplatesGroup>();
for (ListIterator<TemplatesGroup> iterator = groups.listIterator(); iterator.hasNext(); ) {
TemplatesGroup group = iterator.next();
String parentGroup = group.getParentGroup();
if (parentGroup != null && groupNames.contains(parentGroup) && !group.getName().equals(parentGroup) && groupMap.containsKey(parentGroup)) {
subGroups.putValue(parentGroup, group);
iterator.remove();
}
}
for (ListIterator<TemplatesGroup> iterator = groups.listIterator(); iterator.hasNext(); ) {
TemplatesGroup group = iterator.next();
for (TemplatesGroup subGroup : subGroups.get(group.getName())) {
iterator.add(subGroup);
}
}
return groups;
}
// new TemplatesGroup selected
public void projectTypeChanged() {
TemplatesGroup group = getSelectedGroup();
if (group == null || group == myLastSelectedGroup) return;
myLastSelectedGroup = group;
PropertiesComponent.getInstance().setValue(PROJECT_WIZARD_GROUP, group.getId() );
ModuleBuilder groupModuleBuilder = group.getModuleBuilder();
mySettingsStep = null;
myHeaderPanel.removeAll();
if (groupModuleBuilder != null && groupModuleBuilder.getModuleType() != null) {
mySettingsStep = groupModuleBuilder.modifyProjectTypeStep(this);
}
if (groupModuleBuilder == null || groupModuleBuilder.isTemplateBased()) {
showTemplates(group);
}
else if (!showCustomOptions(groupModuleBuilder)){
List<FrameworkSupportInModuleProvider> providers = FrameworkSupportUtil.getProviders(groupModuleBuilder);
final ProjectCategory category = group.getProjectCategory();
if (category != null) {
List<FrameworkSupportInModuleProvider> filtered = ContainerUtil.filter(providers, new Condition<FrameworkSupportInModuleProvider>() {
@Override
public boolean value(FrameworkSupportInModuleProvider provider) {
return matchFramework(category, provider);
}
});
// add associated
Map<String, FrameworkSupportInModuleProvider> map = ContainerUtil.newMapFromValues(providers.iterator(), PROVIDER_STRING_CONVERTOR);
Set<FrameworkSupportInModuleProvider> set = new HashSet<FrameworkSupportInModuleProvider>(filtered);
for (FrameworkSupportInModuleProvider provider : filtered) {
for (FrameworkSupportInModuleProvider.FrameworkDependency depId : provider.getDependenciesFrameworkIds()) {
FrameworkSupportInModuleProvider dependency = map.get(depId.getFrameworkId());
set.add(dependency);
}
}
myFrameworksPanel.setProviders(new ArrayList<FrameworkSupportInModuleProvider>(set),
new HashSet<String>(Arrays.asList(category.getAssociatedFrameworkIds())),
new HashSet<String>(Arrays.asList(category.getPreselectedFrameworkIds())));
}
else {
myFrameworksPanel.setProviders(providers);
}
getSelectedBuilder().addModuleConfigurationUpdater(myConfigurationUpdater);
showCard(FRAMEWORKS_CARD);
}
myHeaderPanel.setVisible(myHeaderPanel.getComponentCount() > 0);
// align header labels
List<JLabel> labels = UIUtil.findComponentsOfType(myHeaderPanel, JLabel.class);
int width = 0;
for (JLabel label : labels) {
int width1 = label.getPreferredSize().width;
width = Math.max(width, width1);
}
for (JLabel label : labels) {
label.setPreferredSize(new Dimension(width, label.getPreferredSize().height));
}
myHeaderPanel.revalidate();
myHeaderPanel.repaint();
updateSelection();
}
private void showCard(String card) {
((CardLayout)myOptionsPanel.getLayout()).show(myOptionsPanel, card);
myCurrentCard = card;
}
private void showTemplates(TemplatesGroup group) {
Collection<ProjectTemplate> templates = myTemplatesMap.get(group);
setTemplatesList(group, templates, false);
showCard(TEMPLATES_CARD);
}
private void setTemplatesList(TemplatesGroup group, Collection<ProjectTemplate> templates, boolean preserveSelection) {
List<ProjectTemplate> list = new ArrayList<ProjectTemplate>(templates);
ModuleBuilder moduleBuilder = group.getModuleBuilder();
if (moduleBuilder != null && !(moduleBuilder instanceof TemplateModuleBuilder)) {
list.add(0, new BuilderBasedTemplate(moduleBuilder));
}
myTemplatesList.setTemplates(list, preserveSelection);
}
private boolean showCustomOptions(@NotNull ModuleBuilder builder) {
String card = builder.getBuilderId();
if (!myCustomSteps.containsKey(card)) {
ModuleWizardStep step = builder.getCustomOptionsStep(myContext, this);
if (step == null) return false;
step.updateStep();
myCustomSteps.put(card, step);
myOptionsPanel.add(step.getComponent(), card);
}
showCard(card);
return true;
}
@Nullable
private ModuleWizardStep getCustomStep() {
return myCustomSteps.get(myCurrentCard);
}
private TemplatesGroup getSelectedGroup() {
return (TemplatesGroup)myProjectTypeList.getSelectedValue();
}
@Nullable
public ProjectTemplate getSelectedTemplate() {
return myCurrentCard == TEMPLATES_CARD ? myTemplatesList.getSelectedTemplate() : null;
}
private ModuleBuilder getSelectedBuilder() {
ProjectTemplate template = getSelectedTemplate();
if (template != null) {
return myBuilders.get(template);
}
return getSelectedGroup().getModuleBuilder();
}
public Collection<ProjectTemplate> getAvailableTemplates() {
if (myCurrentCard != FRAMEWORKS_CARD) {
return Collections.emptyList();
}
else {
Collection<ProjectTemplate> templates = myTemplatesMap.get(getSelectedGroup());
List<FrameworkSupportNode> nodes = myFrameworksPanel.getSelectedNodes();
if (nodes.isEmpty()) return templates;
final List<String> selectedFrameworks = ContainerUtil.map(nodes, NODE_STRING_FUNCTION);
return ContainerUtil.filter(templates, new Condition<ProjectTemplate>() {
@Override
public boolean value(ProjectTemplate template) {
if (!(template instanceof ArchivedProjectTemplate)) return true;
List<String> frameworks = ((ArchivedProjectTemplate)template).getFrameworks();
return frameworks.containsAll(selectedFrameworks);
}
});
}
}
public void onWizardFinished() throws CommitStepException {
if (isFrameworksMode()) {
boolean ok = myFrameworksPanel.downloadLibraries();
if (!ok) {
int answer = Messages.showYesNoDialog(getComponent(),
ProjectBundle.message("warning.message.some.required.libraries.wasn.t.downloaded"),
CommonBundle.getWarningTitle(), Messages.getWarningIcon());
if (answer != Messages.YES) {
throw new CommitStepException(null);
}
}
}
}
@Override
public JComponent getComponent() {
return myPanel;
}
@Override
public void updateDataModel() {
ModuleBuilder builder = getSelectedBuilder();
myWizard.getSequence().addStepsForBuilder(builder, myContext, myModulesProvider);
ModuleWizardStep step = getCustomStep();
if (step != null) {
step.updateDataModel();
}
if (mySettingsStep != null) {
mySettingsStep.updateDataModel();
}
}
@Override
public boolean validate() throws ConfigurationException {
if (mySettingsStep != null) {
if (!mySettingsStep.validate()) return false;
}
ModuleWizardStep step = getCustomStep();
return step != null ? step.validate() : super.validate();
}
@Override
public JComponent getPreferredFocusedComponent() {
return myProjectTypeList;
}
@Override
public void dispose() {
}
@Override
public void disposeUIResources() {
Disposer.dispose(this);
}
private MultiMap<String, ProjectTemplate> loadLocalTemplates() {
ConcurrentMultiMap<String, ProjectTemplate> map = new ConcurrentMultiMap<String, ProjectTemplate>();
ProjectTemplateEP[] extensions = ProjectTemplateEP.EP_NAME.getExtensions();
for (ProjectTemplateEP ep : extensions) {
ClassLoader classLoader = ep.getLoaderForClass();
URL url = classLoader.getResource(ep.templatePath);
if (url != null) {
LocalArchivedTemplate template = new LocalArchivedTemplate(url, classLoader);
if (ep.category) {
TemplateBasedCategory category = new TemplateBasedCategory(template, ep.projectType);
myTemplatesMap.putValue(new TemplatesGroup(category), template);
}
else {
map.putValue(ep.projectType, template);
}
}
}
return map;
}
void loadRemoteTemplates(final ChooseTemplateStep chooseTemplateStep) {
ProgressManager.getInstance().run(new Task.Backgroundable(myContext.getProject(), "Loading Templates") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
try {
myTemplatesList.setPaintBusy(true);
chooseTemplateStep.getTemplateList().setPaintBusy(true);
RemoteTemplatesFactory factory = new RemoteTemplatesFactory();
String[] groups = factory.getGroups();
for (String group : groups) {
ProjectTemplate[] templates = factory.createTemplates(group, myContext);
for (ProjectTemplate template : templates) {
String id = ((ArchivedProjectTemplate)template).getCategory();
for (TemplatesGroup templatesGroup : myTemplatesMap.keySet()) {
if (Comparing.equal(id, templatesGroup.getId()) || Comparing.equal(group, templatesGroup.getName())) {
myTemplatesMap.putValue(templatesGroup, template);
}
}
}
}
//noinspection SSBasedInspection
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TemplatesGroup group = getSelectedGroup();
if (group == null) return;
Collection<ProjectTemplate> templates = myTemplatesMap.get(group);
setTemplatesList(group, templates, true);
chooseTemplateStep.updateStep();
}
});
}
finally {
myTemplatesList.setPaintBusy(false);
chooseTemplateStep.getTemplateList().setPaintBusy(false);
}
}
});
}
private void updateSelection() {
ProjectTemplate template = getSelectedTemplate();
if (template != null) {
myContext.setProjectTemplate(template);
}
ModuleBuilder builder = getSelectedBuilder();
myContext.setProjectBuilder(builder);
if (builder != null) {
myWizard.getSequence().setType(builder.getBuilderId());
}
}
@TestOnly
public boolean setSelectedTemplate(String group, String name) {
ListModel model = myProjectTypeList.getModel();
for (int i = 0; i < model.getSize(); i++) {
TemplatesGroup templatesGroup = (TemplatesGroup)model.getElementAt(i);
if (group.equals(templatesGroup.getName())) {
myProjectTypeList.setSelectedIndex(i);
if (name == null) return getSelectedGroup().getName().equals(group);
Collection<ProjectTemplate> templates = myTemplatesMap.get(templatesGroup);
setTemplatesList(templatesGroup, templates, false);
return myTemplatesList.setSelectedTemplate(name);
}
}
return false;
}
@TestOnly
public AddSupportForFrameworksPanel getFrameworksPanel() {
return myFrameworksPanel;
}
@Override
public WizardContext getContext() {
return myContext;
}
@Override
public void addSettingsField(@NotNull String label, @NotNull JComponent field) {
ProjectSettingsStep.addField(label, field, myHeaderPanel);
}
@Override
public void addSettingsComponent(@NotNull JComponent component) {
}
@Override
public void addExpertPanel(@NotNull JComponent panel) {
}
@Override
public void addExpertField(@NotNull String label, @NotNull JComponent field) {
}
@Override
public JTextField getModuleNameField() {
return null;
}
}