diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/VersionConfigurable.java b/java/idea-ui/src/com/intellij/facet/impl/ui/VersionConfigurable.java
deleted file mode 100644
index deda6c16750c..000000000000
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/VersionConfigurable.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.intellij.facet.impl.ui;
-
-import com.intellij.facet.ui.libraries.LibraryInfo;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportConfigurable;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.roots.ModifiableRootModel;
-import com.intellij.openapi.roots.libraries.Library;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import java.awt.*;
-
-/**
- * @author Dmitry Avdeev
-*/
-public class VersionConfigurable extends FrameworkSupportConfigurable {
- private JComboBox myComboBox;
- private final VersionedFrameworkSupportProvider myFrameworkSupportProvider;
-
- public VersionConfigurable(final VersionedFrameworkSupportProvider frameworkSupportProvider, String[] versions, String defaultVersion) {
- myFrameworkSupportProvider = frameworkSupportProvider;
- if (versions.length > 0) {
- if (defaultVersion == null) {
- defaultVersion = versions[versions.length - 1];
- }
- myComboBox = new JComboBox();
- String maxValue = "";
- for (String version : versions) {
- myComboBox.addItem(version);
- FontMetrics fontMetrics = myComboBox.getFontMetrics(myComboBox.getFont());
- if (fontMetrics.stringWidth(version) > fontMetrics.stringWidth(maxValue)) {
- maxValue = version;
- }
- }
- myComboBox.setPrototypeDisplayValue(maxValue + "_");
- myComboBox.setSelectedItem(defaultVersion);
- }
- }
-
- public JComponent getComponent() {
- return myComboBox;
- }
-
- @NotNull
- public LibraryInfo[] getLibraries() {
- return myFrameworkSupportProvider.getLibraries(getSelectedVersion());
- }
-
- @NonNls
- @NotNull
- public String getLibraryName() {
- return myFrameworkSupportProvider.getLibraryName(getSelectedVersion());
- }
-
- public void addSupport(final Module module, final ModifiableRootModel rootModel, final @Nullable Library library) {
- myFrameworkSupportProvider.addSupport(module, rootModel, getSelectedVersion(), library);
- }
-
- public String getSelectedVersion() {
- String version = null;
- if (myComboBox != null) {
- version = myComboBox.getSelectedItem().toString();
- }
- return version;
- }
-
-}
diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/VersionedFrameworkSupportProvider.java b/java/idea-ui/src/com/intellij/facet/impl/ui/VersionedFrameworkSupportProvider.java
deleted file mode 100644
index 33b7c6ea9d46..000000000000
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/VersionedFrameworkSupportProvider.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
- */
-
-package com.intellij.facet.impl.ui;
-
-import com.intellij.facet.ui.libraries.LibraryInfo;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportConfigurable;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportModel;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportProvider;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.roots.ModifiableRootModel;
-import com.intellij.openapi.roots.libraries.Library;
-import com.intellij.util.ArrayUtil;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @author nik
- */
-public abstract class VersionedFrameworkSupportProvider extends FrameworkSupportProvider {
-
- protected VersionedFrameworkSupportProvider(final @NonNls @NotNull String id, final @NotNull String title) {
- super(id, title);
- }
-
- protected abstract void addSupport(Module module, ModifiableRootModel rootModel, String version, final @Nullable Library library);
-
- @NotNull
- public String[] getVersions() {
- return ArrayUtil.EMPTY_STRING_ARRAY;
- }
-
- @Nullable
- public String getDefaultVersion() {
- return null;
- }
-
- @NotNull
- public VersionConfigurable createConfigurable(final @NotNull FrameworkSupportModel model) {
- return new VersionConfigurable(this, getVersions(), getDefaultVersion());
- }
-
- @NotNull
- protected LibraryInfo[] getLibraries(final String selectedVersion) {
- return LibraryInfo.EMPTY_ARRAY;
- }
-
- @NotNull @NonNls
- protected String getLibraryName(final String selectedVersion) {
- return FrameworkSupportConfigurable.DEFAULT_LIBRARY_NAME;
- }
-
-}
diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form
index 82074a200248..80b2cf41add5 100644
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form
+++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form
@@ -17,24 +17,20 @@
-
+
-
-
-
+
-
+
-
-
-
+
@@ -50,7 +46,7 @@
-
+
@@ -79,12 +75,6 @@
-
-
-
-
-
-
@@ -93,6 +83,12 @@
+
+
+
+
+
+
@@ -135,11 +131,6 @@
-
-
-
-
-
@@ -179,6 +170,11 @@
+
+
+
+
+
diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java
index e6e18636c4cd..d156462b79c7 100644
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java
+++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
@@ -38,14 +39,14 @@ public class LibraryCompositionOptionsPanel {
private JButton myAddJarsButton;
private JCheckBox myDownloadMissingJarsCheckBox;
private TextFieldWithBrowseButton myDirectoryField;
- private JTextArea myMissingLibrariesArea;
private JComboBox myLibraryLevelComboBox;
private JTextField myLibraryNameField;
private JPanel myMissingLibrariesPanel;
- private JTextArea myHiddenTextArea;
private JPanel myNewLibraryPanel;
private JPanel myLibraryPropertiesPanel;
private JPanel myMirrorsPanel;
+ private JLabel myMissingLibrariesLabel;
+ private JLabel myHiddenLabel;
private final List myAddedJars = new ArrayList();
private final List myUsedLibraries = new ArrayList();
private final LibrariesContainer myLibrariesContainer;
@@ -54,8 +55,8 @@ public class LibraryCompositionOptionsPanel {
private final LibraryDownloadingMirrorsMap myMirrorsMap;
private List myMirrorPanelsList;
- public LibraryCompositionOptionsPanel(final LibrariesContainer librariesContainer, final LibraryCompositionSettings libraryCompositionSettings,
- final LibraryDownloadingMirrorsMap mirrorsMap) {
+ public LibraryCompositionOptionsPanel(final @NotNull LibrariesContainer librariesContainer, final @NotNull LibraryCompositionSettings libraryCompositionSettings,
+ final @NotNull LibraryDownloadingMirrorsMap mirrorsMap) {
myLibrariesContainer = librariesContainer;
myLibraryCompositionSettings = libraryCompositionSettings;
myMirrorsMap = mirrorsMap;
@@ -96,11 +97,10 @@ public class LibraryCompositionOptionsPanel {
myLibraryLevelComboBox.setSelectedItem(myLibraryLevels.getValue(myLibraryCompositionSettings.getLibraryLevel()));
myLibraryNameField.setText(myLibraryCompositionSettings.getLibraryName());
- myMissingLibrariesArea.setBackground(myMainPanel.getBackground());
myDirectoryField.setText(FileUtil.toSystemDependentName(myLibraryCompositionSettings.getDirectoryForDownloadedLibrariesPath()));
String jars = RequiredLibrariesInfo.getLibrariesPresentableText(myLibraryCompositionSettings.getLibraryInfos());
- myHiddenTextArea.setText(ProjectBundle.message("label.text.libraries.are.missing", jars));
+ myHiddenLabel.setText(UIUtil.toHtml(ProjectBundle.message("label.text.libraries.are.missing", jars)));
updateAll();
myMissingLibrariesPanel.getPreferredSize();
@@ -190,7 +190,7 @@ public class LibraryCompositionOptionsPanel {
else {
missingJarsText = ProjectBundle.message("label.text.all.library.files.found");
}
- myMissingLibrariesArea.setText(missingJarsText);
+ myMissingLibrariesLabel.setText(UIUtil.toHtml(missingJarsText));
((CardLayout)myMissingLibrariesPanel.getLayout()).show(myMissingLibrariesPanel, "shown");
if (info == null) {
myDownloadMissingJarsCheckBox.setSelected(false);
diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/RemoteRepositoryMirrorPanel.form b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/RemoteRepositoryMirrorPanel.form
index 26d5f870aa2d..925a00ff2c77 100644
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/RemoteRepositoryMirrorPanel.form
+++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/RemoteRepositoryMirrorPanel.form
@@ -10,7 +10,7 @@
-
+
diff --git a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java
index 895c7581c673..453743c3b6a8 100644
--- a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java
+++ b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java
@@ -6,7 +6,7 @@ package com.intellij.ide.util.frameworkSupport;
import com.intellij.CommonBundle;
import com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksPanel;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportProvider;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.Module;
diff --git a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportUtil.java b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportUtil.java
index c5fefe6d7518..c595890d390f 100644
--- a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportUtil.java
+++ b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportUtil.java
@@ -4,7 +4,7 @@
package com.intellij.ide.util.frameworkSupport;
-import com.intellij.ide.util.newProjectWizard.FrameworkSupportProvider;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.form b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.form
index fb1d16114f4a..c97892e40ae2 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.form
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.form
@@ -1,9 +1,9 @@
@@ -26,7 +26,12 @@
-
+
+
+
+
+
+
@@ -34,66 +39,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
index b37366fc455d..e459636d7b8d 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
@@ -4,37 +4,43 @@
package com.intellij.ide.util.newProjectWizard;
-import com.intellij.facet.impl.ui.FacetTypeFrameworkSupportProvider;
-import com.intellij.facet.impl.ui.libraries.LibrariesCompositionDialog;
+import com.intellij.facet.ui.FacetBasedFrameworkSupportProvider;
+import com.intellij.facet.impl.ui.libraries.LibraryCompositionOptionsPanel;
import com.intellij.facet.impl.ui.libraries.LibraryCompositionSettings;
import com.intellij.facet.impl.ui.libraries.LibraryDownloadingMirrorsMap;
import com.intellij.facet.ui.libraries.LibraryDownloadInfo;
import com.intellij.facet.ui.libraries.LibraryInfo;
import com.intellij.facet.ui.libraries.RemoteRepositoryInfo;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurableListener;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
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.Splitter;
+import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.openapi.util.Pair;
-import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.ui.CheckedTreeNode;
+import com.intellij.ui.ScrollPaneFactory;
+import com.intellij.ui.TitledSeparator;
import com.intellij.util.graph.CachingSemiGraph;
import com.intellij.util.graph.DFSTBuilder;
import com.intellij.util.graph.GraphGenerator;
-import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;
@@ -43,20 +49,21 @@ import java.util.List;
*/
public class AddSupportForFrameworksPanel {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksStep");
- private static final int INDENT = 20;
- private static final int SPACE_AFTER_TITLE = 5;
- private static final int VERTICAL_SPACE = 5;
- private static final int GAP_BETWEEN_GROUPS = 10;
+ @NonNls private static final String UNCHECKED_CARD = "unchecked";
+ @NonNls private static final String EMPTY_CARD = "empty";
private JPanel myMainPanel;
- private JPanel myFrameworksTreePanel;
- private JButton myChangeButton;
- private JPanel myDownloadingOptionsPanel;
- private List> myGroups;
+ private JPanel myFrameworksPanel;
+ private List> myGroups;
private final LibrariesContainer myLibrariesContainer;
private final Computable myBaseDirForLibrariesGetter;
private final List myProviders;
private final LibraryDownloadingMirrorsMap myMirrorsMap;
private final FrameworkSupportModelImpl myModel;
+ private JPanel myOptionsPanel;
+ private FrameworksTree myFrameworksTree;
+ private Set myInitializedOptionsPanelIds = new HashSet();
+ private FrameworkSupportNode myLastSelectedNode;
+ private JLabel myTickCheckboxLabel;
public AddSupportForFrameworksPanel(final List providers, final @NotNull LibrariesContainer librariesContainer,
@Nullable ModuleBuilder builder, Computable baseDirForLibrariesGetter) {
@@ -65,31 +72,127 @@ public class AddSupportForFrameworksPanel {
myProviders = providers;
myModel = new FrameworkSupportModelImpl(myLibrariesContainer.getProject(), builder);
createNodes();
- myMirrorsMap = creatMirrorsMap();
+ myMirrorsMap = createMirrorsMap();
- final JPanel treePanel = new JPanel(new GridBagLayout());
- addGroupPanels(myGroups, treePanel, 0);
- myFrameworksTreePanel.add(treePanel, BorderLayout.WEST);
- myChangeButton.addActionListener(new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- final List compositionSettingsList = getLibrariesCompositionSettingsList();
- new LibrariesCompositionDialog(myMainPanel, myLibrariesContainer, compositionSettingsList, myMirrorsMap).show();
- updateDownloadingOptionsPanel();
+ final Splitter splitter = new Splitter(false, 0.35f, 0.1f, 0.7f);
+ myFrameworksTree = new FrameworksTree(myGroups) {
+ @Override
+ protected void onNodeStateChanged(CheckedTreeNode node) {
+ if (!(node instanceof FrameworkSupportNode)) return;
+
+ final FrameworkSupportNode frameworkSupportNode = (FrameworkSupportNode)node;
+ frameworkSupportNode.setConfigurableComponentEnabled(node.isChecked());
+ updateOptionsPanel();
+ myModel.onFrameworkSelectionChanged(frameworkSupportNode);
+ }
+ };
+ myFrameworksTree.addTreeSelectionListener(new TreeSelectionListener() {
+ public void valueChanged(TreeSelectionEvent e) {
+ onSelectionChanged();
}
});
- updateDownloadingOptionsPanel();
+ splitter.setFirstComponent(ScrollPaneFactory.createScrollPane(myFrameworksTree));
+ myOptionsPanel = new JPanel(new CardLayout());
+ myOptionsPanel.add(EMPTY_CARD, new JPanel());
+ final JPanel uncheckedLabelPanel = new JPanel(new BorderLayout());
+ myTickCheckboxLabel = new JLabel("Tick checkbox");
+ uncheckedLabelPanel.add(BorderLayout.NORTH, myTickCheckboxLabel);
+ myOptionsPanel.add(UNCHECKED_CARD, uncheckedLabelPanel);
+ splitter.setSecondComponent(myOptionsPanel);
+ myFrameworksPanel.add(splitter, BorderLayout.CENTER);
}
- private LibraryDownloadingMirrorsMap creatMirrorsMap() {
+ private void onSelectionChanged() {
+ if (!myFrameworksTree.isProcessingMouseEventOnCheckbox()) {
+ updateOptionsPanel();
+ }
+
+ final FrameworkSupportNode selectedNode = getSelectedNode();
+ if (!Comparing.equal(selectedNode, myLastSelectedNode)) {
+ if (myLastSelectedNode != null) {
+ final LibraryCompositionOptionsPanel optionsPanel = myLastSelectedNode.getLibraryCompositionOptionsPanel(myLibrariesContainer, myMirrorsMap);
+ if (optionsPanel != null) {
+ optionsPanel.saveSelectedRepositoriesMirrors(myMirrorsMap);
+ optionsPanel.apply();
+ }
+ }
+
+ myLastSelectedNode = selectedNode;
+ if (selectedNode != null) {
+ final LibraryCompositionOptionsPanel newOptionsPanel = selectedNode.getLibraryCompositionOptionsPanel(myLibrariesContainer, myMirrorsMap);
+ if (newOptionsPanel != null) {
+ newOptionsPanel.updateRepositoriesMirrors(myMirrorsMap);
+ }
+ }
+ }
+ }
+
+ private void updateOptionsPanel() {
+ final FrameworkSupportNode node = getSelectedNode();
+ if (node != null) {
+ if (node.isChecked()) {
+ initializeOptionsPanel(node);
+ showCard(node.getProvider().getId());
+ }
+ else {
+ myTickCheckboxLabel.setText("Tick checkbox to add support for '" + node.getTitle() + "'");
+ showCard(UNCHECKED_CARD);
+ }
+ }
+ else {
+ showCard(EMPTY_CARD);
+ }
+ }
+
+ @Nullable
+ private FrameworkSupportNode getSelectedNode() {
+ final FrameworkSupportNode[] nodes = myFrameworksTree.getSelectedNodes(FrameworkSupportNode.class, null);
+ return nodes.length == 1 ? nodes[0] : null;
+ }
+
+ private void initializeOptionsPanel(final FrameworkSupportNode node) {
+ final String id = node.getProvider().getId();
+ if (!myInitializedOptionsPanelIds.contains(id)) {
+ final JPanel optionsPanel = new JPanel(new VerticalFlowLayout());
+ optionsPanel.add(new TitledSeparator(node.getTitle() + " Settings"));
+ final FrameworkSupportConfigurable configurable = node.getConfigurable();
+ optionsPanel.add(configurable.getComponent());
+ final JPanel librariesOptionsPanelWrapper = new JPanel(new BorderLayout());
+ optionsPanel.add(librariesOptionsPanelWrapper);
+ configurable.addListener(new FrameworkSupportConfigurableListener() {
+ public void frameworkVersionChanged() {
+ librariesOptionsPanelWrapper.removeAll();
+ addLibrariesOptionsPanel(node, librariesOptionsPanelWrapper);
+ librariesOptionsPanelWrapper.revalidate();
+ }
+ });
+ addLibrariesOptionsPanel(node, librariesOptionsPanelWrapper);
+ myOptionsPanel.add(id, optionsPanel);
+ myInitializedOptionsPanelIds.add(id);
+ }
+ }
+
+ private void addLibrariesOptionsPanel(FrameworkSupportNode node, JPanel librariesOptionsPanelWrapper) {
+ final LibraryCompositionOptionsPanel libraryOptionsPanel = node.getLibraryCompositionOptionsPanel(myLibrariesContainer, myMirrorsMap);
+ if (libraryOptionsPanel != null) {
+ librariesOptionsPanelWrapper.add(BorderLayout.CENTER, libraryOptionsPanel.getMainPanel());
+ }
+ }
+
+ private void showCard(String cardName) {
+ ((CardLayout)myOptionsPanel.getLayout()).show(myOptionsPanel, cardName);
+ }
+
+ private LibraryDownloadingMirrorsMap createMirrorsMap() {
List repositoryInfos = getRemoteRepositories();
return new LibraryDownloadingMirrorsMap(repositoryInfos.toArray(new RemoteRepositoryInfo[repositoryInfos.size()]));
}
private List getRemoteRepositories() {
List repositoryInfos = new ArrayList();
- List frameworksSettingsList = getFrameworksSettingsList(false);
- for (FrameworkSupportSettings settings : frameworksSettingsList) {
- LibraryInfo[] libraries = settings.getConfigurable().getLibraries();
+ List frameworkNodes = getFrameworkNodes(false);
+ for (FrameworkSupportNode node : frameworkNodes) {
+ LibraryInfo[] libraries = node.getLibraries();
for (LibraryInfo library : libraries) {
LibraryDownloadInfo downloadInfo = library.getDownloadingInfo();
if (downloadInfo != null) {
@@ -103,18 +206,13 @@ public class AddSupportForFrameworksPanel {
return repositoryInfos;
}
- private void updateDownloadingOptionsPanel() {
- @NonNls String card = getLibrariesCompositionSettingsList().isEmpty() ? "empty" : "options";
- ((CardLayout)myDownloadingOptionsPanel.getLayout()).show(myDownloadingOptionsPanel, card);
- }
-
private List getLibrariesCompositionSettingsList() {
List list = new ArrayList();
- List selected = getFrameworksSettingsList(true);
- for (FrameworkSupportSettings settings : selected) {
- LibraryInfo[] libraries = settings.getConfigurable().getLibraries();
- if (libraries.length > 0) {
- list.add(settings.getLibraryCompositionSettings());
+ List selected = getFrameworkNodes(true);
+ for (FrameworkSupportNode node : selected) {
+ final LibraryCompositionSettings settings = node.getLibraryCompositionSettings();
+ if (settings != null) {
+ list.add(settings);
}
}
return list;
@@ -128,80 +226,36 @@ public class AddSupportForFrameworksPanel {
return true;
}
- private JPanel addGroupPanels(final List> groups, JPanel treePanel, int level) {
- boolean first = true;
- for (List group : groups) {
- addSettingsComponents(group, treePanel, level, !first);
- first = false;
- }
- return treePanel;
- }
-
- private void addSettingsComponents(final List list, JPanel treePanel, int level, boolean addGapBefore) {
- boolean first = true;
- for (FrameworkSupportSettings root : list) {
- addSettingsComponents(root, treePanel, level, first && addGapBefore);
- first = false;
- }
- }
-
- private void addSettingsComponents(final FrameworkSupportSettings frameworkSupport, JPanel parentPanel, int level, boolean addGapBefore) {
- if (frameworkSupport.getParentNode() != null) {
- frameworkSupport.setEnabled(false);
- }
- JComponent configurableComponent = frameworkSupport.getConfigurable().getComponent();
- int gridwidth = configurableComponent != null ? 1 : GridBagConstraints.REMAINDER;
- final int gap = addGapBefore ? GAP_BETWEEN_GROUPS : 0;
- parentPanel.add(frameworkSupport.myCheckBox, createConstraints(0, GridBagConstraints.RELATIVE, gridwidth, 1,
- new Insets(gap, INDENT * level, VERTICAL_SPACE, SPACE_AFTER_TITLE)));
- if (configurableComponent != null) {
- parentPanel.add(configurableComponent, createConstraints(1, GridBagConstraints.RELATIVE, GridBagConstraints.REMAINDER, 1,
- new Insets(gap, 0, VERTICAL_SPACE, 0)));
- }
-
- if (frameworkSupport.myChildren.isEmpty()) {
- return;
- }
-
- addSettingsComponents(frameworkSupport.myChildren, parentPanel, level + 1, false);
- }
-
- private static GridBagConstraints createConstraints(final int gridx, final int gridy, final int gridwidth, final int gridheight,
- final Insets insets) {
- return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1, 1, GridBagConstraints.NORTHWEST,
- GridBagConstraints.NONE, insets, 0, 0);
- }
-
private void createNodes() {
- Map nodes = new HashMap();
- MultiValuesMap groups = new MultiValuesMap(true);
+ Map nodes = new HashMap();
+ MultiValuesMap groups = new MultiValuesMap(true);
for (FrameworkSupportProvider frameworkSupport : myProviders) {
createNode(frameworkSupport, nodes, groups);
}
- myGroups = new ArrayList>();
+ myGroups = new ArrayList>();
for (String groupId : groups.keySet()) {
- final Collection collection = groups.get(groupId);
+ final Collection collection = groups.get(groupId);
if (collection != null) {
- final List group = new ArrayList();
- for (FrameworkSupportSettings settings : collection) {
- if (settings.getParentNode() == null) {
- group.add(settings);
+ final List group = new ArrayList();
+ for (FrameworkSupportNode node : collection) {
+ if (node.getParentNode() == null) {
+ group.add(node);
}
}
- sortByTitle(group);
+ FrameworkSupportNode.sortByTitle(group);
myGroups.add(group);
}
}
}
@Nullable
- private FrameworkSupportSettings createNode(final FrameworkSupportProvider provider, final Map nodes,
- final MultiValuesMap groups) {
- FrameworkSupportSettings node = nodes.get(provider.getId());
+ private FrameworkSupportNode createNode(final FrameworkSupportProvider provider, final Map nodes,
+ final MultiValuesMap groups) {
+ FrameworkSupportNode node = nodes.get(provider.getId());
if (node == null) {
String underlyingFrameworkId = provider.getUnderlyingFrameworkId();
- FrameworkSupportSettings parentNode = null;
+ FrameworkSupportNode parentNode = null;
if (underlyingFrameworkId != null) {
FrameworkSupportProvider parentProvider = findProvider(underlyingFrameworkId);
if (parentProvider == null) {
@@ -210,17 +264,13 @@ public class AddSupportForFrameworksPanel {
}
parentNode = createNode(parentProvider, nodes, groups);
}
- node = new FrameworkSupportSettings(provider, parentNode, myModel);
+ node = new FrameworkSupportNode(provider, parentNode, myModel, myBaseDirForLibrariesGetter);
nodes.put(provider.getId(), node);
groups.put(provider.getGroupId(), node);
}
return node;
}
- private String getBaseModuleDirectoryPath() {
- return myBaseDirForLibrariesGetter.compute();
- }
-
@Nullable
private FrameworkSupportProvider findProvider(@NotNull String id) {
for (FrameworkSupportProvider provider : myProviders) {
@@ -232,75 +282,50 @@ public class AddSupportForFrameworksPanel {
return null;
}
- private static void setDescendantsEnabled(FrameworkSupportSettings frameworkSupport, final boolean enable) {
- for (FrameworkSupportSettings child : frameworkSupport.myChildren) {
- child.setEnabled(enable);
- setDescendantsEnabled(child, enable);
- }
- }
-
public JComponent getMainPanel() {
return myMainPanel;
}
- private List getFrameworksSettingsList(final boolean selectedOnly) {
- ArrayList list = new ArrayList();
+ private List getFrameworkNodes(final boolean selectedOnly) {
+ ArrayList list = new ArrayList();
if (myGroups != null) {
- for (List group : myGroups) {
+ for (List group : myGroups) {
addChildFrameworks(group, list, selectedOnly);
}
}
return list;
}
- private static void sortByTitle(List settingsList) {
- if (settingsList.isEmpty()) return;
-
- Collections.sort(settingsList, new Comparator() {
- public int compare(final FrameworkSupportSettings o1, final FrameworkSupportSettings o2) {
- return getTitleWithoutMnemonic(o1.getProvider()).compareTo(getTitleWithoutMnemonic(o2.getProvider()));
- }
- });
- for (FrameworkSupportSettings settings : settingsList) {
- sortByTitle(settings.myChildren);
- }
- }
-
- private static String getTitleWithoutMnemonic(final FrameworkSupportProvider provider) {
- return StringUtil.replace(provider.getTitle(), String.valueOf(UIUtil.MNEMONIC), "");
- }
-
- private static void addChildFrameworks(final List list, final ArrayList selected,
+ private static void addChildFrameworks(final List list, final List result,
final boolean selectedOnly) {
- for (FrameworkSupportSettings settings : list) {
- if (!selectedOnly || settings.myCheckBox.isSelected()) {
- selected.add(settings);
- addChildFrameworks(settings.myChildren, selected, selectedOnly);
+ for (FrameworkSupportNode node : list) {
+ if (!selectedOnly || node.isChecked()) {
+ result.add(node);
+ addChildFrameworks(node.getChildren(), result, selectedOnly);
}
}
}
- public void addSupport(final Module module, final ModifiableRootModel rootModel) {
+ public void addSupport(final @NotNull Module module, final @NotNull ModifiableRootModel rootModel) {
List addedLibraries = new ArrayList();
- List selectedFrameworks = getFrameworksSettingsList(true);
+ List selectedFrameworks = getFrameworkNodes(true);
sortFrameworks(selectedFrameworks);
- for (FrameworkSupportSettings settings : selectedFrameworks) {
- FrameworkSupportConfigurable configurable = settings.getConfigurable();
-
- Library library = settings.getLibraryCompositionSettings().addLibraries(rootModel, addedLibraries);
-
+ for (FrameworkSupportNode node : selectedFrameworks) {
+ FrameworkSupportConfigurable configurable = node.getConfigurable();
+ final LibraryCompositionSettings settings = node.getLibraryCompositionSettings();
+ Library library = settings != null ? settings.addLibraries(rootModel, addedLibraries) : null;
configurable.addSupport(module, rootModel, library);
}
- for (FrameworkSupportSettings settings : selectedFrameworks) {
- FrameworkSupportProvider provider = settings.myProvider;
- if (provider instanceof FacetTypeFrameworkSupportProvider && !addedLibraries.isEmpty()) {
- ((FacetTypeFrameworkSupportProvider)provider).processAddedLibraries(module, addedLibraries);
+ for (FrameworkSupportNode node : selectedFrameworks) {
+ FrameworkSupportProvider provider = node.getProvider();
+ if (provider instanceof FacetBasedFrameworkSupportProvider && !addedLibraries.isEmpty()) {
+ ((FacetBasedFrameworkSupportProvider)provider).processAddedLibraries(module, addedLibraries);
}
}
}
- private void sortFrameworks(final List selectedFrameworks) {
+ private void sortFrameworks(final List nodes) {
DFSTBuilder builder = new DFSTBuilder(GraphGenerator.create(CachingSemiGraph.create(new ProvidersGraph(myProviders))));
if (!builder.isAcyclic()) {
Pair pair = builder.getCircularDependency();
@@ -308,93 +333,13 @@ public class AddSupportForFrameworksPanel {
}
final Comparator comparator = builder.comparator();
- Collections.sort(selectedFrameworks, new Comparator() {
- public int compare(final FrameworkSupportSettings o1, final FrameworkSupportSettings o2) {
+ Collections.sort(nodes, new Comparator() {
+ public int compare(final FrameworkSupportNode o1, final FrameworkSupportNode o2) {
return comparator.compare(o1.getProvider(), o2.getProvider());
}
});
}
- public class FrameworkSupportSettings {
- private final FrameworkSupportProvider myProvider;
- private final FrameworkSupportSettings myParentNode;
- private final FrameworkSupportConfigurable myConfigurable;
- private final JCheckBox myCheckBox;
- private final List myChildren = new ArrayList();
- private LibraryCompositionSettings myLibraryCompositionSettings;
-
- private FrameworkSupportSettings(final FrameworkSupportProvider provider, final FrameworkSupportSettings parentNode,
- final FrameworkSupportModelImpl context) {
- myProvider = provider;
- myParentNode = parentNode;
- myCheckBox = new JCheckBox(provider.getTitle());
- context.registerComponent(provider, this);
- myConfigurable = provider.createConfigurable(context);
- if (parentNode != null) {
- parentNode.myChildren.add(this);
- }
-
- myCheckBox.addActionListener(new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- setConfigurableComponentEnabled(myCheckBox.isSelected());
- setDescendantsEnabled(FrameworkSupportSettings.this, myCheckBox.isSelected());
- }
- });
-
- setConfigurableComponentEnabled(false);
- }
-
- public JCheckBox getCheckBox() {
- return myCheckBox;
- }
-
- public void setEnabled(final boolean enable) {
- myCheckBox.setEnabled(enable);
- if (!enable) {
- myCheckBox.setSelected(false);
- setConfigurableComponentEnabled(false);
- }
- }
-
- private void setConfigurableComponentEnabled(final boolean enable) {
- JComponent component = getConfigurable().getComponent();
- if (component != null) {
- UIUtil.setEnabled(component, enable, true);
- }
- updateDownloadingOptionsPanel();
- }
-
- public FrameworkSupportProvider getProvider() {
- return myProvider;
- }
-
- public FrameworkSupportSettings getParentNode() {
- return myParentNode;
- }
-
- public FrameworkSupportConfigurable getConfigurable() {
- return myConfigurable;
- }
-
- public String getModuleDirectoryPath() {
- return getBaseModuleDirectoryPath();
- }
-
- private boolean isObsolete(@NotNull LibraryCompositionSettings settings) {
- return !settings.getBaseDirectoryForDownloadedFiles().equals(getBaseModuleDirectoryPath())
- || !Comparing.equal(settings.getLibraryInfos(), myConfigurable.getLibraries());
- }
-
- public LibraryCompositionSettings getLibraryCompositionSettings() {
- if (myLibraryCompositionSettings == null || isObsolete(myLibraryCompositionSettings)) {
- final String title = getTitleWithoutMnemonic(myProvider);
- myLibraryCompositionSettings = new LibraryCompositionSettings(myConfigurable.getLibraries(), myConfigurable.getLibraryName(), getBaseModuleDirectoryPath(),
- title, myProvider.getIcon());
- }
- return myLibraryCompositionSettings;
- }
- }
-
private class ProvidersGraph implements GraphGenerator.SemiGraph {
private final List myFrameworkSupportProviders;
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportConfigurable.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportConfigurable.java
deleted file mode 100644
index 75f7f3d076f5..000000000000
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportConfigurable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
- */
-
-package com.intellij.ide.util.newProjectWizard;
-
-import com.intellij.facet.ui.libraries.LibraryInfo;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.roots.ModifiableRootModel;
-import com.intellij.openapi.roots.libraries.Library;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-
-/**
- * @author nik
- */
-public abstract class FrameworkSupportConfigurable {
- @NonNls public static final String DEFAULT_LIBRARY_NAME = "lib";
-
- @Nullable
- public abstract JComponent getComponent();
-
- public abstract void addSupport(Module module, ModifiableRootModel model, final @Nullable Library library);
-
- @NonNls @NotNull
- public String getLibraryName() {
- return DEFAULT_LIBRARY_NAME;
- }
-
- @NotNull
- public LibraryInfo[] getLibraries() {
- return LibraryInfo.EMPTY_ARRAY;
- }
-}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java
new file mode 100644
index 000000000000..dc73bfb73c29
--- /dev/null
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java
@@ -0,0 +1,143 @@
+package com.intellij.ide.util.newProjectWizard;
+
+import com.intellij.facet.impl.ui.libraries.LibraryCompositionSettings;
+import com.intellij.facet.impl.ui.libraries.LibraryCompositionOptionsPanel;
+import com.intellij.facet.impl.ui.libraries.LibraryDownloadingMirrorsMap;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
+import com.intellij.ide.util.frameworkSupport.FrameworkVersion;
+import com.intellij.facet.ui.libraries.LibraryInfo;
+import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl;
+import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
+import com.intellij.ui.CheckedTreeNode;
+import com.intellij.util.ui.UIUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+* @author nik
+*/
+public class FrameworkSupportNode extends CheckedTreeNode {
+ private final FrameworkSupportProvider myProvider;
+ private final FrameworkSupportNode myParentNode;
+ private final FrameworkSupportConfigurable myConfigurable;
+ private final List myChildren = new ArrayList();
+ private LibraryCompositionSettings myLibraryCompositionSettings;
+ private final Computable myBaseDirForLibrariesGetter;
+ private LibraryCompositionOptionsPanel myLibraryCompositionOptionsPanel;
+
+ FrameworkSupportNode(final FrameworkSupportProvider provider, final FrameworkSupportNode parentNode, final FrameworkSupportModelImpl model,
+ Computable baseDirForLibrariesGetter) {
+ super(provider);
+ myBaseDirForLibrariesGetter = baseDirForLibrariesGetter;
+ setChecked(false);
+ myProvider = provider;
+ myParentNode = parentNode;
+ model.registerComponent(provider, this);
+ myConfigurable = provider.createConfigurable(model);
+ if (parentNode != null) {
+ parentNode.add(this);
+ parentNode.myChildren.add(this);
+ }
+
+ setConfigurableComponentEnabled(false);
+ }
+
+ public List getChildren() {
+ return myChildren;
+ }
+
+ @Nullable
+ public LibraryCompositionOptionsPanel getLibraryCompositionOptionsPanel(LibrariesContainer librariesContainer,
+ LibraryDownloadingMirrorsMap mirrorsMap) {
+ final LibraryCompositionSettings libraryCompositionSettings = getLibraryCompositionSettings();
+ if (myLibraryCompositionOptionsPanel == null || !myLibraryCompositionOptionsPanel.getLibraryCompositionSettings().equals(libraryCompositionSettings)) {
+ if (libraryCompositionSettings != null) {
+ myLibraryCompositionOptionsPanel = new LibraryCompositionOptionsPanel(librariesContainer, libraryCompositionSettings, mirrorsMap);
+ }
+ else {
+ myLibraryCompositionOptionsPanel = null;
+ }
+ }
+ return myLibraryCompositionOptionsPanel;
+ }
+
+ public void setConfigurableComponentEnabled(final boolean enable) {
+ JComponent component = getConfigurable().getComponent();
+ if (component != null) {
+ UIUtil.setEnabled(component, enable, true);
+ }
+ }
+
+ public FrameworkSupportProvider getProvider() {
+ return myProvider;
+ }
+
+ public FrameworkSupportNode getParentNode() {
+ return myParentNode;
+ }
+
+ public FrameworkSupportConfigurable getConfigurable() {
+ return myConfigurable;
+ }
+
+ private boolean isObsolete(@NotNull LibraryCompositionSettings settings) {
+ final LibraryInfo[] libraries = getLibraries();
+ return !settings.getBaseDirectoryForDownloadedFiles().equals(myBaseDirForLibrariesGetter.compute())
+ || !Comparing.equal(settings.getLibraryInfos(), libraries);
+ }
+
+ public LibraryInfo[] getLibraries() {
+ final FrameworkVersion version = myConfigurable.getSelectedVersion();
+ return version != null ? version.getLibraries() : LibraryInfo.EMPTY_ARRAY;
+ }
+
+ @Nullable
+ public LibraryCompositionSettings getLibraryCompositionSettings() {
+ if (myLibraryCompositionSettings == null || isObsolete(myLibraryCompositionSettings)) {
+ final LibraryInfo[] libraries = getLibraries();
+ if (libraries.length != 0) {
+ myLibraryCompositionSettings = new LibraryCompositionSettings(libraries, myConfigurable.getSelectedVersion().getLibraryName(), myBaseDirForLibrariesGetter.compute(),
+ "Libraries", myProvider.getIcon());
+ }
+ else {
+ myLibraryCompositionSettings = null;
+ }
+ }
+ return myLibraryCompositionSettings;
+ }
+
+ public static void sortByTitle(List nodes) {
+ if (nodes.isEmpty()) return;
+
+ Collections.sort(nodes, new Comparator() {
+ public int compare(final FrameworkSupportNode o1, final FrameworkSupportNode o2) {
+ return getTitleWithoutMnemonic(o1.getProvider()).compareTo(getTitleWithoutMnemonic(o2.getProvider()));
+ }
+ });
+ for (FrameworkSupportNode node : nodes) {
+ node.sortChildren();
+ }
+ }
+
+ public String getTitle() {
+ return getTitleWithoutMnemonic(myProvider);
+ }
+
+ private static String getTitleWithoutMnemonic(final FrameworkSupportProvider provider) {
+ return StringUtil.replace(provider.getTitle(), String.valueOf(UIUtil.MNEMONIC), "");
+ }
+
+ private void sortChildren() {
+ sortByTitle(myChildren);
+ }
+}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java
new file mode 100644
index 000000000000..897ba0823149
--- /dev/null
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java
@@ -0,0 +1,78 @@
+package com.intellij.ide.util.newProjectWizard;
+
+import com.intellij.ui.CheckboxTree;
+import com.intellij.ui.CheckedTreeNode;
+import com.intellij.util.ui.tree.TreeUtil;
+
+import javax.swing.*;
+import javax.swing.tree.TreePath;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+import java.util.List;
+
+/**
+ * @author nik
+ */
+public class FrameworksTree extends CheckboxTree {
+ private boolean myProcessingMouseEventOnCheckbox;
+
+ public FrameworksTree(List> groups) {
+ super(new FrameworksTreeRenderer(), new FrameworksRootNode(groups), new CheckPolicy(false, true, true, false));
+ setRootVisible(false);
+ setShowsRootHandles(false);
+ TreeUtil.expandAll(this);
+ }
+
+ @Override
+ protected void processMouseEvent(MouseEvent e) {
+ final TreePath path = getPathForLocation(e.getX(), e.getY());
+ if (path != null) {
+ final Object node = path.getLastPathComponent();
+ if (node instanceof FrameworkSupportNode) {
+ final Rectangle checkboxBounds = ((CheckboxTreeCellRendererBase)getCellRenderer()).myCheckbox.getBounds();
+ final Rectangle pathBounds = getPathBounds(path);
+ checkboxBounds.setLocation(pathBounds.getLocation());
+ if (checkboxBounds.contains(e.getPoint())) {
+ try {
+ myProcessingMouseEventOnCheckbox = true;
+ super.processMouseEvent(e);
+ }
+ finally {
+ myProcessingMouseEventOnCheckbox = false;
+ }
+ return;
+ }
+ }
+ }
+
+ super.processMouseEvent(e);
+ }
+
+ public boolean isProcessingMouseEventOnCheckbox() {
+ return myProcessingMouseEventOnCheckbox;
+ }
+
+ private static class FrameworksTreeRenderer extends CheckboxTreeCellRenderer {
+ private FrameworksTreeRenderer() {
+ super(true, false);
+ }
+
+ @Override
+ public void customizeRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+ if (value instanceof FrameworkSupportNode) {
+ getTextRenderer().append(((FrameworkSupportNode)value).getTitle());
+ }
+ }
+ }
+
+ private static class FrameworksRootNode extends CheckedTreeNode {
+ public FrameworksRootNode(List> groups) {
+ super(null);
+ for (List group : groups) {
+ for (FrameworkSupportNode node : group) {
+ add(node);
+ }
+ }
+ }
+ }
+}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java
index a89df0a0e997..2e579d9b0606 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java
@@ -9,6 +9,7 @@ import com.intellij.ide.util.frameworkSupport.FrameworkSupportUtil;
import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
import com.intellij.ide.wizard.CommitStepException;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.ProjectBundle;
@@ -38,7 +39,7 @@ public class SupportForFrameworksStep extends ModuleWizardStep {
}
});
builder.addModuleConfigurationUpdater(new ModuleBuilder.ModuleConfigurationUpdater() {
- public void update(final Module module, final ModifiableRootModel rootModel) {
+ public void update(@NotNull final Module module, @NotNull final ModifiableRootModel rootModel) {
mySupportForFrameworksPanel.addSupport(module, rootModel);
}
});
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelImpl.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelImpl.java
index a18faa89f12a..4a450d088746 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelImpl.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelImpl.java
@@ -1,7 +1,10 @@
package com.intellij.ide.util.newProjectWizard.impl;
+import com.intellij.ide.util.frameworkSupport.*;
import com.intellij.ide.util.newProjectWizard.*;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.EventDispatcher;
@@ -9,9 +12,6 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
@@ -22,26 +22,15 @@ public class FrameworkSupportModelImpl extends UserDataHolderBase implements Fra
private final Project myProject;
private final ModuleBuilder myModuleBuilder;
private final EventDispatcher myDispatcher = EventDispatcher.create(FrameworkSupportModelListener.class);
- private final Map mySettingsMap = new HashMap();
+ private final Map mySettingsMap = new HashMap();
public FrameworkSupportModelImpl(final @Nullable Project project, @Nullable ModuleBuilder builder) {
myProject = project;
myModuleBuilder = builder;
}
- public void registerComponent(@NotNull final FrameworkSupportProvider provider, @NotNull final AddSupportForFrameworksPanel.FrameworkSupportSettings settings) {
- mySettingsMap.put(provider.getId(), settings);
- final JCheckBox checkBox = settings.getCheckBox();
- checkBox.addActionListener(new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- if (checkBox.isSelected()) {
- myDispatcher.getMulticaster().frameworkSelected(provider);
- }
- else {
- myDispatcher.getMulticaster().frameworkUnselected(provider);
- }
- }
- });
+ public void registerComponent(@NotNull final FrameworkSupportProvider provider, @NotNull final FrameworkSupportNode node) {
+ mySettingsMap.put(provider.getId(), node);
}
public Project getProject() {
@@ -53,8 +42,8 @@ public class FrameworkSupportModelImpl extends UserDataHolderBase implements Fra
}
public boolean isFrameworkSelected(@NotNull @NonNls final String providerId) {
- final AddSupportForFrameworksPanel.FrameworkSupportSettings settings = mySettingsMap.get(providerId);
- return settings != null && settings.getCheckBox().isSelected();
+ final FrameworkSupportNode node = mySettingsMap.get(providerId);
+ return node != null && node.isChecked();
}
public void addFrameworkListener(@NotNull final FrameworkSupportModelListener listener) {
@@ -66,20 +55,30 @@ public class FrameworkSupportModelImpl extends UserDataHolderBase implements Fra
}
public void setFrameworkComponentEnabled(@NotNull @NonNls final String providerId, final boolean enable) {
- final AddSupportForFrameworksPanel.FrameworkSupportSettings settings = mySettingsMap.get(providerId);
- if (settings == null) {
+ final FrameworkSupportNode node = mySettingsMap.get(providerId);
+ if (node == null) {
throw new IllegalArgumentException("provider '" + providerId + " not found");
}
- if (enable != settings.getCheckBox().isEnabled()) {
- settings.setEnabled(enable);
+ if (enable != node.isChecked()) {
+ node.setChecked(enable);
}
}
public FrameworkSupportConfigurable getFrameworkConfigurable(@NotNull @NonNls String providerId) {
- final AddSupportForFrameworksPanel.FrameworkSupportSettings settings = mySettingsMap.get(providerId);
- if (settings == null) {
+ final FrameworkSupportNode node = mySettingsMap.get(providerId);
+ if (node == null) {
throw new IllegalArgumentException("provider '" + providerId + " not found");
}
- return settings.getConfigurable();
+ return node.getConfigurable();
+ }
+
+ public void onFrameworkSelectionChanged(FrameworkSupportNode node) {
+ final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster();
+ if (node.isChecked()) {
+ multicaster.frameworkSelected(node.getProvider());
+ }
+ else {
+ multicaster.frameworkUnselected(node.getProvider());
+ }
}
}
diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetTypeFrameworkSupportProvider.java b/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java
similarity index 80%
rename from java/idea-ui/src/com/intellij/facet/impl/ui/FacetTypeFrameworkSupportProvider.java
rename to platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java
index d0b38a27e48c..f0125ac1e854 100644
--- a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetTypeFrameworkSupportProvider.java
+++ b/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java
@@ -2,9 +2,11 @@
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
*/
-package com.intellij.facet.impl.ui;
+package com.intellij.facet.ui;
import com.intellij.facet.*;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportProviderBase;
+import com.intellij.ide.util.frameworkSupport.FrameworkVersion;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
@@ -20,12 +22,12 @@ import java.util.List;
/**
* @author nik
*/
-public abstract class FacetTypeFrameworkSupportProvider extends VersionedFrameworkSupportProvider {
- private static final Logger LOG = Logger.getInstance("#com.intellij.facet.impl.ui.FacetTypeFrameworkSupportProvider");
+public abstract class FacetBasedFrameworkSupportProvider extends FrameworkSupportProviderBase {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.facet.ui.FacetBasedFrameworkSupportProvider");
@NonNls private static final String FACET_SUPPORT_PREFIX = "facet:";
private final FacetType myFacetType;
- protected FacetTypeFrameworkSupportProvider(FacetType facetType) {
+ protected FacetBasedFrameworkSupportProvider(FacetType facetType) {
super(getProviderId(facetType), facetType.getPresentableName());
myFacetType = facetType;
}
@@ -62,7 +64,7 @@ public abstract class FacetTypeFrameworkSupportProvider extends
return myFacetType.getIcon();
}
- protected void addSupport(final Module module, final ModifiableRootModel rootModel, final String version, final @Nullable Library library) {
+ protected void addSupport(@NotNull final Module module, @NotNull final ModifiableRootModel rootModel, final FrameworkVersion version, final @Nullable Library library) {
FacetManager facetManager = FacetManager.getInstance(module);
ModifiableFacetModel model = facetManager.createModifiableModel();
Facet underlyingFacet = null;
@@ -81,13 +83,13 @@ public abstract class FacetTypeFrameworkSupportProvider extends
onFacetCreated(facet, rootModel, version);
}
- protected void onFacetCreated(final F facet, final ModifiableRootModel rootModel, final String version) {
+ protected void onFacetCreated(final F facet, final ModifiableRootModel rootModel, final FrameworkVersion version) {
}
protected void onLibraryAdded(final F facet, final @NotNull Library library) {
}
- protected abstract void setupConfiguration(final F facet, final ModifiableRootModel rootModel, final String version);
+ protected abstract void setupConfiguration(final F facet, final ModifiableRootModel rootModel, final FrameworkVersion version);
public void processAddedLibraries(final Module module, final List addedLibraries) {
}
diff --git a/java/openapi/src/com/intellij/facet/ui/libraries/LibraryDownloadInfo.java b/platform/lang-api/src/com/intellij/facet/ui/libraries/LibraryDownloadInfo.java
similarity index 100%
rename from java/openapi/src/com/intellij/facet/ui/libraries/LibraryDownloadInfo.java
rename to platform/lang-api/src/com/intellij/facet/ui/libraries/LibraryDownloadInfo.java
diff --git a/java/openapi/src/com/intellij/facet/ui/libraries/LibraryInfo.java b/platform/lang-api/src/com/intellij/facet/ui/libraries/LibraryInfo.java
similarity index 100%
rename from java/openapi/src/com/intellij/facet/ui/libraries/LibraryInfo.java
rename to platform/lang-api/src/com/intellij/facet/ui/libraries/LibraryInfo.java
diff --git a/java/openapi/src/com/intellij/facet/ui/libraries/MavenLibraryUtil.java b/platform/lang-api/src/com/intellij/facet/ui/libraries/MavenLibraryUtil.java
similarity index 100%
rename from java/openapi/src/com/intellij/facet/ui/libraries/MavenLibraryUtil.java
rename to platform/lang-api/src/com/intellij/facet/ui/libraries/MavenLibraryUtil.java
diff --git a/java/openapi/src/com/intellij/facet/ui/libraries/RemoteRepositoryInfo.java b/platform/lang-api/src/com/intellij/facet/ui/libraries/RemoteRepositoryInfo.java
similarity index 100%
rename from java/openapi/src/com/intellij/facet/ui/libraries/RemoteRepositoryInfo.java
rename to platform/lang-api/src/com/intellij/facet/ui/libraries/RemoteRepositoryInfo.java
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java
new file mode 100644
index 000000000000..ca2b0a35311e
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
+ */
+
+package com.intellij.ide.util.frameworkSupport;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.roots.ModifiableRootModel;
+import com.intellij.openapi.roots.libraries.Library;
+import com.intellij.util.EventDispatcher;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author nik
+ */
+public abstract class FrameworkSupportConfigurable {
+ private final EventDispatcher myDispatcher = EventDispatcher.create(FrameworkSupportConfigurableListener.class);
+
+ @Nullable
+ public abstract JComponent getComponent();
+
+ public abstract void addSupport(@NotNull Module module, @NotNull ModifiableRootModel model, final @Nullable Library library);
+
+
+ @Nullable
+ public FrameworkVersion getSelectedVersion() {
+ return null;
+ }
+
+ public void addListener(@NotNull FrameworkSupportConfigurableListener listener) {
+ myDispatcher.addListener(listener);
+ }
+
+ public void removeListener(@NotNull FrameworkSupportConfigurableListener listener) {
+ myDispatcher.removeListener(listener);
+ }
+
+ protected void fireFrameworkVersionChanged() {
+ myDispatcher.getMulticaster().frameworkVersionChanged();
+ }
+}
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.form b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.form
new file mode 100644
index 000000000000..f8d22d8ab1f0
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.form
@@ -0,0 +1,33 @@
+
+
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java
new file mode 100644
index 000000000000..f122a4b43307
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java
@@ -0,0 +1,89 @@
+package com.intellij.ide.util.frameworkSupport;
+
+import com.intellij.facet.ui.libraries.LibraryInfo;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
+import com.intellij.ide.util.frameworkSupport.FrameworkVersion;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.roots.ModifiableRootModel;
+import com.intellij.openapi.roots.libraries.Library;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Dmitry Avdeev
+*/
+public class FrameworkSupportConfigurableBase extends FrameworkSupportConfigurable {
+ private JComboBox myVersionComboBox;
+ private final FrameworkSupportProviderBase myFrameworkSupportProvider;
+ private JPanel myMainPanel;
+ private JLabel myDescriptionLabel;
+
+ public FrameworkSupportConfigurableBase(FrameworkSupportProviderBase frameworkSupportProvider) {
+ this(frameworkSupportProvider, Collections.emptyList(), null);
+ }
+
+ public FrameworkSupportConfigurableBase(final FrameworkSupportProviderBase frameworkSupportProvider, List versions, String versionLabelText) {
+ myFrameworkSupportProvider = frameworkSupportProvider;
+ if (versions.size() > 0) {
+ myDescriptionLabel.setText(versionLabelText);
+ String maxValue = "";
+ FrameworkVersion defaultVersion = versions.get(versions.size() - 1);
+ for (FrameworkVersion version : versions) {
+ myVersionComboBox.addItem(version);
+ FontMetrics fontMetrics = myVersionComboBox.getFontMetrics(myVersionComboBox.getFont());
+ if (fontMetrics.stringWidth(version.getVersionName()) > fontMetrics.stringWidth(maxValue)) {
+ maxValue = version.getVersionName();
+ }
+ if (version.isDefault()) {
+ defaultVersion = version;
+ }
+ }
+ myVersionComboBox.setPrototypeDisplayValue(maxValue + "_");
+ myVersionComboBox.setRenderer(new DefaultListCellRenderer() {
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ final Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ if (value instanceof FrameworkVersion) {
+ setText(((FrameworkVersion)value).getVersionName());
+ }
+ return component;
+ }
+ });
+ myVersionComboBox.setSelectedItem(defaultVersion);
+ myVersionComboBox.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ fireFrameworkVersionChanged();
+ }
+ });
+ }
+ else {
+ myDescriptionLabel.setVisible(false);
+ myVersionComboBox.setVisible(false);
+ }
+ }
+
+ public JComponent getComponent() {
+ return myMainPanel;
+ }
+
+ @NotNull
+ public LibraryInfo[] getLibraries() {
+ return getSelectedVersion().getLibraries();
+ }
+
+ public void addSupport(@NotNull final Module module, @NotNull final ModifiableRootModel rootModel, final @Nullable Library library) {
+ myFrameworkSupportProvider.addSupport(module, rootModel, getSelectedVersion(), library);
+ }
+
+ public FrameworkVersion getSelectedVersion() {
+ return (FrameworkVersion)myVersionComboBox.getSelectedItem();
+ }
+
+}
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableListener.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableListener.java
new file mode 100644
index 000000000000..fab1d957b3aa
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableListener.java
@@ -0,0 +1,12 @@
+package com.intellij.ide.util.frameworkSupport;
+
+import java.util.EventListener;
+
+/**
+ * @author nik
+ */
+public interface FrameworkSupportConfigurableListener extends EventListener {
+
+ void frameworkVersionChanged();
+
+}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModel.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModel.java
similarity index 94%
rename from java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModel.java
rename to platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModel.java
index 8a2b44ea8c97..79411a553c81 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModel.java
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModel.java
@@ -1,4 +1,4 @@
-package com.intellij.ide.util.newProjectWizard;
+package com.intellij.ide.util.frameworkSupport;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.openapi.project.Project;
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModelListener.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModelListener.java
similarity index 86%
rename from java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModelListener.java
rename to platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModelListener.java
index f4da1be8bcbe..e94270aa9c4a 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportModelListener.java
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportModelListener.java
@@ -1,4 +1,4 @@
-package com.intellij.ide.util.newProjectWizard;
+package com.intellij.ide.util.frameworkSupport;
import org.jetbrains.annotations.NotNull;
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportProvider.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProvider.java
similarity index 69%
rename from java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportProvider.java
rename to platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProvider.java
index 70431c587be6..34e4047575ee 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportProvider.java
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProvider.java
@@ -2,15 +2,13 @@
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
*/
-package com.intellij.ide.util.newProjectWizard;
+package com.intellij.ide.util.frameworkSupport;
+import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.openapi.extensions.ExtensionPointName;
-import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
-import com.intellij.openapi.project.Project;
import com.intellij.util.ArrayUtil;
-import com.intellij.ide.util.projectWizard.ModuleBuilder;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,18 +29,7 @@ public abstract class FrameworkSupportProvider {
}
@NotNull
- public FrameworkSupportConfigurable createConfigurable(@NotNull FrameworkSupportModel model) {
- return createConfigurable(model.getProject());
- }
-
- /**
- * @deprecated override {@link FrameworkSupportProvider#createConfigurable(FrameworkSupportModel)} instead
- */
- @Deprecated
- @NotNull
- public FrameworkSupportConfigurable createConfigurable(@Nullable final Project project) {
- return null;
- }
+ public abstract FrameworkSupportConfigurable createConfigurable(@NotNull FrameworkSupportModel model);
@NonNls
@Nullable
@@ -69,9 +56,7 @@ public abstract class FrameworkSupportProvider {
return null;
}
- public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) {
- return moduleType instanceof JavaModuleType;
- }
+ public abstract boolean isEnabledForModuleType(@NotNull ModuleType moduleType);
public boolean isEnabledForModuleBuilder(@NotNull ModuleBuilder builder) {
return isEnabledForModuleType(builder.getModuleType());
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java
new file mode 100644
index 000000000000..f596ac0bf30e
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
+ */
+
+package com.intellij.ide.util.frameworkSupport;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.roots.ModifiableRootModel;
+import com.intellij.openapi.roots.libraries.Library;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author nik
+ */
+public abstract class FrameworkSupportProviderBase extends FrameworkSupportProvider {
+
+ protected FrameworkSupportProviderBase(final @NonNls @NotNull String id, final @NotNull String title) {
+ super(id, title);
+ }
+
+ protected abstract void addSupport(@NotNull Module module, @NotNull ModifiableRootModel rootModel, FrameworkVersion version, final @Nullable Library library);
+
+ @NotNull
+ public List getVersions() {
+ return Collections.emptyList();
+ }
+
+ public String getVersionLabelText() {
+ return "Version:";
+ }
+
+ @NotNull
+ public FrameworkSupportConfigurableBase createConfigurable(final @NotNull FrameworkSupportModel model) {
+ return new FrameworkSupportConfigurableBase(this, getVersions(), getVersionLabelText());
+ }
+}
diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkVersion.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkVersion.java
new file mode 100644
index 000000000000..5ac5a39efaa1
--- /dev/null
+++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkVersion.java
@@ -0,0 +1,53 @@
+package com.intellij.ide.util.frameworkSupport;
+
+import com.intellij.facet.ui.libraries.LibraryInfo;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author nik
+ */
+public class FrameworkVersion {
+ public static final FrameworkVersion[] EMPTY_ARRAY = new FrameworkVersion[0];
+ private final String myVersionName;
+ private final String myLibraryName;
+ private final LibraryInfo[] myLibraries;
+ private final boolean myDefault;
+
+ public FrameworkVersion(String versionName) {
+ this(versionName, false);
+ }
+
+ public FrameworkVersion(@NotNull String versionName, boolean isDefault) {
+ myVersionName = versionName;
+ myDefault = isDefault;
+ myLibraryName = null;
+ myLibraries = LibraryInfo.EMPTY_ARRAY;
+ }
+
+ public FrameworkVersion(String versionName, String libraryName, LibraryInfo[] libraries) {
+ this(versionName, libraryName, libraries, false);
+ }
+
+ public FrameworkVersion(@NotNull String versionName, @NotNull String libraryName, @NotNull LibraryInfo[] libraries, boolean aDefault) {
+ myVersionName = versionName;
+ myLibraryName = libraryName;
+ myLibraries = libraries;
+ myDefault = aDefault;
+ }
+
+ public String getVersionName() {
+ return myVersionName;
+ }
+
+ public String getLibraryName() {
+ return myLibraryName;
+ }
+
+ public LibraryInfo[] getLibraries() {
+ return myLibraries;
+ }
+
+ public boolean isDefault() {
+ return myDefault;
+ }
+}
diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java
index 43e54b13c74b..2403044ec144 100644
--- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java
+++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilder.java
@@ -54,7 +54,6 @@ public abstract class ModuleBuilder extends ProjectBuilder{
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.projectWizard.ModuleBuilder");
private String myName;
@NonNls private String myModuleFilePath;
- @Nullable
private final List myUpdaters = new ArrayList();
private final EventDispatcher myDispatcher = EventDispatcher.create(ModuleBuilderListener.class);
@@ -243,7 +242,7 @@ public abstract class ModuleBuilder extends ProjectBuilder{
public static abstract class ModuleConfigurationUpdater {
- public abstract void update(Module module, ModifiableRootModel rootModel);
+ public abstract void update(@NotNull Module module, @NotNull ModifiableRootModel rootModel);
}
}
diff --git a/platform/platform-api/src/com/intellij/openapi/ui/LabeledComponent.java b/platform/platform-api/src/com/intellij/openapi/ui/LabeledComponent.java
index a6104479888d..7b788e55619c 100644
--- a/platform/platform-api/src/com/intellij/openapi/ui/LabeledComponent.java
+++ b/platform/platform-api/src/com/intellij/openapi/ui/LabeledComponent.java
@@ -19,6 +19,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.IdeBorderFactory;
import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
@@ -35,6 +36,14 @@ public class LabeledComponent extends JPanel {
updateUI();
}
+ @NotNull
+ public static LabeledComponent create(@NotNull Comp component, @NotNull String text) {
+ final LabeledComponent labeledComponent = new LabeledComponent();
+ labeledComponent.setComponent(component);
+ labeledComponent.setText(text);
+ return labeledComponent;
+ }
+
private void updateLabelBorder() {
int left = 0;
int bottom = 0;
diff --git a/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java b/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java
index 633ebf219080..7488fe797b16 100644
--- a/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java
+++ b/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java
@@ -284,9 +284,15 @@ public class CheckboxTreeBase extends Tree {
public static abstract class CheckboxTreeCellRendererBase extends JPanel implements TreeCellRenderer {
private final ColoredTreeCellRenderer myTextRenderer;
public final JCheckBox myCheckbox;
+ private final boolean myUsePartialStatusForParentNodes;
public CheckboxTreeCellRendererBase(boolean opaque) {
+ this(opaque, true);
+ }
+
+ public CheckboxTreeCellRendererBase(boolean opaque, final boolean usePartialStatusForParentNodes) {
super(new BorderLayout());
+ myUsePartialStatusForParentNodes = usePartialStatusForParentNodes;
myCheckbox = new JCheckBox();
myTextRenderer = new ColoredTreeCellRenderer() {
public void customizeCellRenderer(JTree tree,
@@ -337,7 +343,7 @@ public class CheckboxTreeBase extends Tree {
private NodeState getNodeStatus(final CheckedTreeNode node) {
final boolean checked = node.isChecked();
- if (node.getChildCount() == 0) return checked ? NodeState.FULL : NodeState.CLEAR;
+ if (node.getChildCount() == 0 || !myUsePartialStatusForParentNodes) return checked ? NodeState.FULL : NodeState.CLEAR;
NodeState result = null;
diff --git a/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java b/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java
index 7458bce2ac24..9e56a66b6c5e 100644
--- a/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java
+++ b/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java
@@ -16,6 +16,10 @@ public class CheckboxTree extends CheckboxTreeBase {
protected CheckboxTreeCellRenderer(final boolean opaque) {
super(opaque);
}
+
+ protected CheckboxTreeCellRenderer(boolean opaque, boolean usePartialStatusForParentNodes) {
+ super(opaque, usePartialStatusForParentNodes);
+ }
}
public CheckboxTree(final CheckboxTreeCellRenderer cellRenderer, CheckedTreeNode root) {
diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml
index 21509a878446..7611af6db818 100644
--- a/resources/src/META-INF/IdeaPlugin.xml
+++ b/resources/src/META-INF/IdeaPlugin.xml
@@ -123,7 +123,7 @@
-
+