void (CustomLibraryDescription libraryDescription, NotNullComputable<String> pathProvider, FrameworkLibraryVersionFilter versionFilter, boolean showDoNotCreateOption, final List<? extends FrameworkLibraryVersion> versions) { //todo create mySettings only in apply() method mySettings = new LibraryCompositionSettings(libraryDescription, pathProvider, versionFilter, versions); Disposer.register(this, mySettings); List<Library> libraries = calculateSuitableLibraries(); myButtonEnumModel = RadioButtonEnumModel.bindEnum(Choice.class, myButtonGroup); myButtonEnumModel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateState(); onVersionChanged(getPresentableVersion()); } }); myDoNotCreateRadioButton.setVisible(showDoNotCreateOption); myLibraryComboBoxModel = new SortedComboBoxModel<>((o1, o2) -> { final String name1 = o1.getName(); final String name2 = o2.getName(); return -StringUtil.notNullize(name1).compareToIgnoreCase(StringUtil.notNullize(name2)); }); for (Library library : libraries) { ExistingLibraryEditor libraryEditor = myLibrariesContainer.getLibraryEditor(library); if (libraryEditor == null) { libraryEditor = mySettings.getOrCreateEditor(library); } myLibraryComboBoxModel.add(libraryEditor); } myExistingLibraryComboBox.setModel(myLibraryComboBoxModel); if (libraries.isEmpty()) { myLibraryComboBoxModel.add(null); } myExistingLibraryComboBox.setSelectedIndex(0); myExistingLibraryComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED && e.getItem() != null) { myButtonEnumModel.setSelected(Choice.USE_LIBRARY); } updateState(); onVersionChanged(getPresentableVersion()); } }); myExistingLibraryComboBox.setRenderer(new ColoredListCellRenderer<>() { @Override protected void customizeCellRenderer(@NotNull JList<? extends LibraryEditor> list, LibraryEditor value, int index, boolean selected, boolean hasFocus) { if (value == null) { append(JavaUiBundle.message("library.options.panel.existing.library.combobox.label.no.library.selected")); } else if (value instanceof ExistingLibraryEditor) { final Library library = ((ExistingLibraryEditor)value).getLibrary(); final boolean invalid = !((LibraryEx)library).getInvalidRootUrls(OrderRootType.CLASSES).isEmpty(); OrderEntryAppearanceService.getInstance().forLibrary(getProject(), library, invalid).customize(this); } else if (value instanceof NewLibraryEditor) { setIcon(PlatformIcons.LIBRARY_ICON); final String name = value.getName(); append(name != null ? name : JavaUiBundle.message("unnamed.title")); } } }); boolean canDownload = mySettings.getDownloadSettings() != null; boolean canUseFromProvider = myLibraryProvider != null; myDownloadRadioButton.setVisible(canDownload); myUseFromProviderRadioButton.setVisible(canUseFromProvider); Choice selectedOption; if (canUseFromProvider) { selectedOption = Choice.USE_FROM_PROVIDER; } else if (libraries.isEmpty() && canDownload) { selectedOption = Choice.DOWNLOAD; } else { selectedOption = Choice.USE_LIBRARY; doCreate(true); } myButtonEnumModel.setSelected(selectedOption); if (!canDownload && !canUseFromProvider && !showDoNotCreateOption) { myUseLibraryRadioButton.setVisible(false); myUseLibraryLabel.setVisible(true); } else { myUseLibraryLabel.setVisible(false); } final Dimension minimumSize = new Dimension(-1, myMessageLabel.getFontMetrics(myMessageLabel.getFont()).getHeight() * 2); myHiddenLabel.setMinimumSize(minimumSize); myCreateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { doCreate(false); } }); myConfigureButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { doConfigure(); } }); updateState(); showCard("editing"); }