blob: 0d665014fccb91eb71b159728a37a0917ec44337 [file] [log] [blame]
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;
}
}
}