| package org.jetbrains.android.compiler.artifact; |
| |
| import com.intellij.CommonBundle; |
| import com.intellij.ide.wizard.CommitStepException; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.DialogWrapper; |
| import com.intellij.openapi.ui.Messages; |
| import com.intellij.ui.CollectionComboBoxModel; |
| import com.intellij.ui.components.JBRadioButton; |
| import com.intellij.util.ui.UIUtil; |
| import org.jetbrains.android.exportSignedPackage.NewKeyForm; |
| 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.List; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public class ChooseKeyDialog extends DialogWrapper { |
| private JPanel myNewKeyPanel; |
| private JBRadioButton myCreateNewKeyRadioButton; |
| private JBRadioButton myUseExistingKeyRadioButton; |
| private JComboBox myKeyCombo; |
| private JPanel myPanel; |
| |
| private final NewKeyForm myNewKeyForm = new MyNewKeyForm(); |
| private final Project myProject; |
| private final String myKeyStorePath; |
| private final char[] myKeyStorePassword; |
| private final List<String> myExistingKeys; |
| |
| public ChooseKeyDialog(@NotNull Project project, |
| @NotNull String keyStorePath, |
| @NotNull char[] password, |
| @NotNull List<String> existingKeys, |
| @Nullable String keyToSelect) { |
| super(project); |
| myProject = project; |
| myKeyStorePath = keyStorePath; |
| myKeyStorePassword = password; |
| myExistingKeys = existingKeys; |
| myKeyCombo.setModel(new CollectionComboBoxModel(existingKeys, existingKeys.get(0))); |
| |
| if (keyToSelect != null && existingKeys.contains(keyToSelect)) { |
| myKeyCombo.setSelectedItem(keyToSelect); |
| } |
| myNewKeyPanel.add(myNewKeyForm.getContentPanel(), BorderLayout.CENTER); |
| |
| final ActionListener listener = new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| UIUtil.setEnabled(myNewKeyPanel, myCreateNewKeyRadioButton.isSelected(), true); |
| } |
| }; |
| myCreateNewKeyRadioButton.addActionListener(listener); |
| myUseExistingKeyRadioButton.addActionListener(listener); |
| |
| final boolean useExisting = existingKeys.size() > 0; |
| myUseExistingKeyRadioButton.setSelected(useExisting); |
| myCreateNewKeyRadioButton.setSelected(!useExisting); |
| UIUtil.setEnabled(myNewKeyPanel, !useExisting, true); |
| |
| setTitle("Choose Key"); |
| init(); |
| } |
| |
| @Override |
| protected JComponent createCenterPanel() { |
| return myPanel; |
| } |
| |
| @Override |
| protected void doOKAction() { |
| if (myCreateNewKeyRadioButton.isSelected()) { |
| try { |
| myNewKeyForm.createKey(); |
| } |
| catch (CommitStepException e) { |
| Messages.showErrorDialog(myPanel, e.getMessage(), CommonBundle.getErrorTitle()); |
| return; |
| } |
| } |
| super.doOKAction(); |
| } |
| |
| @Nullable |
| public String getChosenKey() { |
| return myUseExistingKeyRadioButton.isSelected() |
| ? (String)myKeyCombo.getSelectedItem() |
| : myNewKeyForm.getKeyAlias(); |
| } |
| |
| @Nullable |
| public char[] getChosenKeyPassword() { |
| return myCreateNewKeyRadioButton.isSelected() |
| ? myNewKeyForm.getKeyPassword() |
| : null; |
| } |
| |
| private class MyNewKeyForm extends NewKeyForm { |
| @Override |
| protected List<String> getExistingKeyAliasList() { |
| return myExistingKeys; |
| } |
| |
| @NotNull |
| @Override |
| protected Project getProject() { |
| return myProject; |
| } |
| |
| @NotNull |
| @Override |
| protected char[] getKeyStorePassword() { |
| return myKeyStorePassword; |
| } |
| |
| @NotNull |
| @Override |
| protected String getKeyStoreLocation() { |
| return myKeyStorePath; |
| } |
| } |
| } |