framework support panel: initial support for framework group versions

This commit is contained in:
nik
2013-05-13 10:10:39 +04:00
parent dc5810430d
commit 26c2343f0e
7 changed files with 88 additions and 26 deletions
@@ -9,7 +9,7 @@ import java.util.List;
/**
* @author nik
*/
public abstract class FrameworkGroup {
public abstract class FrameworkGroup<V extends FrameworkGroupVersion> {
private final String myId;
public FrameworkGroup(String id) {
@@ -28,7 +28,7 @@ public abstract class FrameworkGroup {
public abstract Icon getIcon();
@NotNull
public List<String> getGroupVersions() {
public List<V> getGroupVersions() {
return Collections.emptyList();
}
}
@@ -0,0 +1,11 @@
package com.intellij.framework;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public interface FrameworkGroupVersion {
@NotNull String getId();
@NotNull String getPresentableName();
}
@@ -31,7 +31,7 @@ public abstract class FrameworkTypeEx extends FrameworkType {
}
@Nullable
public FrameworkGroup getParentGroup() {
public FrameworkGroup<?> getParentGroup() {
return null;
}
@@ -34,14 +34,11 @@ import com.intellij.openapi.roots.IdeaModifiableModelsProvider;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.Comparing;
import com.intellij.ui.CheckedTreeNode;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.FormBuilder;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -69,7 +66,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
private final JPanel myOptionsPanel;
private final FrameworksTree myFrameworksTree;
private final Map<FrameworkSupportNode, FrameworkSupportOptionsComponent> myInitializedOptionsComponents = new HashMap<FrameworkSupportNode, FrameworkSupportOptionsComponent>();
private final Map<FrameworkGroup, JPanel> myInitializedGroupPanels = new HashMap<FrameworkGroup, JPanel>();
private final Map<FrameworkGroup<?>, JPanel> myInitializedGroupPanels = new HashMap<FrameworkGroup<?>, JPanel>();
private FrameworkSupportNodeBase myLastSelectedNode;
public AddSupportForFrameworksPanel(final List<FrameworkSupportInModuleProvider> providers, final FrameworkSupportModelBase model) {
@@ -151,7 +148,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
frameworkSupportNode.getConfigurable().onFrameworkSelectionChanged(node.isChecked());
}
else if (node instanceof FrameworkGroupNode) {
FrameworkGroup group = ((FrameworkGroupNode)node).getGroup();
FrameworkGroup<?> group = ((FrameworkGroupNode)node).getGroup();
initializeGroupPanel(group);
showCard(group.getId());
}
@@ -160,19 +157,11 @@ public class AddSupportForFrameworksPanel implements Disposable {
}
}
private void initializeGroupPanel(FrameworkGroup group) {
private void initializeGroupPanel(FrameworkGroup<?> group) {
if (!myInitializedGroupPanels.containsKey(group)) {
JPanel panel = new JPanel(new VerticalFlowLayout());
List<String> versions = group.getGroupVersions();
if (!versions.isEmpty()) {
ComboBox versionsBox = new ComboBox();
for (String version : versions) {
versionsBox.addItem(version);
}
panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel());
}
myInitializedGroupPanels.put(group, panel);
myOptionsPanel.add(group.getId(), panel);
FrameworkGroupOptionsComponent component = new FrameworkGroupOptionsComponent(group, myModel);
myInitializedGroupPanels.put(group, component.getMainPanel());
myOptionsPanel.add(group.getId(), component.getMainPanel());
}
}
@@ -227,7 +216,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
private void createNodes() {
Map<String, FrameworkSupportNode> nodes = new HashMap<String, FrameworkSupportNode>();
Map<FrameworkGroup, FrameworkGroupNode> groups = new HashMap<FrameworkGroup, FrameworkGroupNode>();
Map<FrameworkGroup<?>, FrameworkGroupNode> groups = new HashMap<FrameworkGroup<?>, FrameworkGroupNode>();
List<FrameworkSupportNodeBase> roots = new ArrayList<FrameworkSupportNodeBase>();
for (FrameworkSupportInModuleProvider provider : myProviders) {
createNode(provider, nodes, groups, roots);
@@ -239,13 +228,13 @@ public class AddSupportForFrameworksPanel implements Disposable {
@Nullable
private FrameworkSupportNode createNode(final FrameworkSupportInModuleProvider provider, final Map<String, FrameworkSupportNode> nodes,
final Map<FrameworkGroup, FrameworkGroupNode> groupNodes,
final Map<FrameworkGroup<?>, FrameworkGroupNode> groupNodes,
List<FrameworkSupportNodeBase> roots) {
FrameworkSupportNode node = nodes.get(provider.getFrameworkType().getId());
if (node == null) {
String underlyingTypeId = provider.getFrameworkType().getUnderlyingFrameworkTypeId();
FrameworkSupportNodeBase parentNode = null;
final FrameworkGroup group = provider.getFrameworkType().getParentGroup();
final FrameworkGroup<?> group = provider.getFrameworkType().getParentGroup();
if (underlyingTypeId != null) {
FrameworkSupportInModuleProvider parentProvider = FrameworkSupportUtil.findProvider(underlyingTypeId, myProviders);
if (parentProvider == null) {
@@ -9,14 +9,14 @@ import javax.swing.*;
* @author nik
*/
public class FrameworkGroupNode extends FrameworkSupportNodeBase {
private final FrameworkGroup myGroup;
private final FrameworkGroup<?> myGroup;
public FrameworkGroupNode(@NotNull FrameworkGroup group, FrameworkSupportNodeBase parent) {
public FrameworkGroupNode(@NotNull FrameworkGroup<?> group, FrameworkSupportNodeBase parent) {
super(group, parent);
myGroup = group;
}
public FrameworkGroup getGroup() {
public FrameworkGroup<?> getGroup() {
return myGroup;
}
@@ -0,0 +1,50 @@
package com.intellij.ide.util.newProjectWizard;
import com.intellij.framework.FrameworkGroup;
import com.intellij.framework.FrameworkGroupVersion;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.util.ui.FormBuilder;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
/**
* @author nik
*/
public class FrameworkGroupOptionsComponent {
private final JPanel myMainPanel;
public FrameworkGroupOptionsComponent(final FrameworkGroup<?> group, final FrameworkSupportModelBase model) {
JPanel panel = new JPanel(new VerticalFlowLayout());
List<? extends FrameworkGroupVersion> versions = group.getGroupVersions();
if (!versions.isEmpty()) {
final ComboBox versionsBox = new ComboBox();
versionsBox.setRenderer(new ListCellRendererWrapper<FrameworkGroupVersion>() {
@Override
public void customize(JList list, FrameworkGroupVersion value, int index, boolean selected, boolean hasFocus) {
setText(value != null ? value.getPresentableName() : "");
}
});
versionsBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.setSelectedVersion(group, (FrameworkGroupVersion)versionsBox.getSelectedItem());
}
});
for (FrameworkGroupVersion version : versions) {
versionsBox.addItem(version);
}
panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel());
}
myMainPanel = panel;
}
public JPanel getMainPanel() {
return myMainPanel;
}
}
@@ -15,6 +15,8 @@
*/
package com.intellij.ide.util.newProjectWizard.impl;
import com.intellij.framework.FrameworkGroup;
import com.intellij.framework.FrameworkGroupVersion;
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
@@ -46,6 +48,7 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
private final EventDispatcher<FrameworkSupportModelListener> myDispatcher = EventDispatcher.create(FrameworkSupportModelListener.class);
private final Map<String, FrameworkSupportNode> mySettingsMap = new HashMap<String, FrameworkSupportNode>();
private final Map<String, FrameworkSupportOptionsComponent> myOptionsComponentsMap = new HashMap<String, FrameworkSupportOptionsComponent>();
private final Map<FrameworkGroup<?>, FrameworkGroupVersion> mySelectedVersions = new HashMap<FrameworkGroup<?>, FrameworkGroupVersion>();
public FrameworkSupportModelBase(final @Nullable Project project, @Nullable ModuleBuilder builder, @NotNull LibrariesContainer librariesContainer) {
myProject = project;
@@ -123,6 +126,15 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
return ((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)node.getConfigurable()).getConfigurable();
}
public void setSelectedVersion(@NotNull FrameworkGroup<?> group, @Nullable FrameworkGroupVersion version) {
mySelectedVersions.put(group, version);
}
@Nullable
public <V extends FrameworkGroupVersion> V getSelectedVersion(@NotNull FrameworkGroup<V> group) {
return (V)mySelectedVersions.get(group);
}
public void onFrameworkSelectionChanged(FrameworkSupportNode node) {
final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster();
final FrameworkSupportInModuleProvider provider = node.getProvider();