diff --git a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form
index 9d488f181bf2..ae7b2783d583 100644
--- a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form
+++ b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form
@@ -63,7 +63,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.java b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.java
index c18310ddd6fb..e3ae024e4d7b 100644
--- a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.java
+++ b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.java
@@ -17,6 +17,7 @@ import com.intellij.util.Consumer;
import com.intellij.util.containers.HashSet;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -37,6 +38,7 @@ import static com.intellij.util.net.ssl.ConfirmingTrustManager.MutableTrustManag
*/
public class CertificateConfigurable implements SearchableConfigurable, Configurable.NoScroll, CertificateListener {
private static final FileTypeDescriptor CERTIFICATE_DESCRIPTOR = new FileTypeDescriptor("Choose Certificate", ".crt", ".cer", ".pem");
+ @NonNls public static final String EMPTY_PANEL = "empty.panel";
private JPanel myRootPanel;
private JBCheckBox myCheckHostname;
@@ -44,11 +46,12 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
private JPanel myCertificatesListPanel;
private JPanel myDetailsPanel;
+ private JPanel myEmptyPanel;
private MutableTrustManager myTrustManager;
private Tree myTree = new Tree();
- private CertificateTreeBuilder myTreeBuilder;
- private Set myCertificates;
+ private CertificateTreeBuilder myTreeBuilder = new CertificateTreeBuilder(myTree);
+ private Set myCertificates = new HashSet();
public CertificateConfigurable() {
@@ -94,13 +97,12 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
@Override
public void run(AnActionButton button) {
// allow to delete several certificates at once
- for (X509Certificate certificate : myTreeBuilder.getSelectedCertificates()) {
+ for (X509Certificate certificate : myTreeBuilder.getSelectedCertificates(true)) {
myCertificates.remove(certificate);
myTreeBuilder.removeCertificate(certificate);
}
if (myCertificates.isEmpty()) {
- myDetailsPanel.removeAll();
- myDetailsPanel.repaint();
+ showCard(EMPTY_PANEL);
}
else {
myTreeBuilder.selectFirstCertificate();
@@ -111,17 +113,20 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
myTree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
- X509Certificate certificate = myTreeBuilder.getFirstSelectedCertificate();
+ X509Certificate certificate = myTreeBuilder.getFirstSelectedCertificate(true);
if (certificate != null) {
- String uniqueName = getCardName(certificate);
- ((CardLayout)myDetailsPanel.getLayout()).show(myDetailsPanel, uniqueName);
+ showCard(getCardName(certificate));
}
}
});
myCertificatesListPanel.add(decorator.createPanel(), BorderLayout.CENTER);
}
- private void addCertificatePanel(X509Certificate certificate) {
+ private void showCard(@NotNull String cardName) {
+ ((CardLayout)myDetailsPanel.getLayout()).show(myDetailsPanel, cardName);
+ }
+
+ private void addCertificatePanel(@NotNull X509Certificate certificate) {
String uniqueName = getCardName(certificate);
JPanel infoPanel = new CertificateInfoPanel(certificate);
UIUtil.addInsets(infoPanel, UIUtil.PANEL_REGULAR_INSETS);
@@ -130,7 +135,7 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
myDetailsPanel.add(scrollPane, uniqueName);
}
- private static String getCardName(X509Certificate certificate) {
+ private static String getCardName(@NotNull X509Certificate certificate) {
return certificate.getSubjectX500Principal().getName();
}
@@ -201,13 +206,23 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
@Override
public void reset() {
List original = myTrustManager.getCertificates();
- myTreeBuilder = new CertificateTreeBuilder(myTree, original);
- myCertificates = new HashSet(original);
+ myTreeBuilder.reset(original);
+
+ myCertificates.clear();
+ myCertificates.addAll(original);
+
+ myDetailsPanel.removeAll();
+ myDetailsPanel.add(myEmptyPanel, EMPTY_PANEL);
// fill lower panel with cards
for (X509Certificate certificate : original) {
addCertificatePanel(certificate);
}
+
+ if (!myCertificates.isEmpty()) {
+ myTreeBuilder.selectFirstCertificate();
+ }
+
CertificatesManager.Config state = CertificatesManager.getInstance().getState();
myCheckHostname.setSelected(state.checkHostname);
myCheckValidityPeriod.setSelected(state.checkValidity);
@@ -226,8 +241,8 @@ public class CertificateConfigurable implements SearchableConfigurable, Configur
if (!myCertificates.contains(certificate)) {
myCertificates.add(certificate);
myTreeBuilder.addCertificate(certificate);
+ addCertificatePanel(certificate);
}
- addCertificatePanel(certificate);
}
});
}
diff --git a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java
index bf952d7097e5..0d1141bf0998 100644
--- a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java
+++ b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java
@@ -10,7 +10,6 @@ import com.intellij.ui.treeStructure.Tree;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.containers.HashSet;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.ui.tree.TreeUtil;
import org.jetbrains.annotations.NotNull;
@@ -37,10 +36,7 @@ public class CertificateTreeBuilder extends AbstractTreeBuilder {
private final MultiMap myCertificates = new MultiMap();
- public CertificateTreeBuilder(@NotNull Tree tree, @NotNull Collection certificates) {
- for (X509Certificate certificate : certificates) {
- addCertificate(certificate);
- }
+ public CertificateTreeBuilder(@NotNull Tree tree) {
init(tree, new DefaultTreeModel(new DefaultMutableTreeNode()), new MyTreeStructure(), new Comparator() {
@Override
public int compare(NodeDescriptor o1, NodeDescriptor o2) {
@@ -58,6 +54,21 @@ public class CertificateTreeBuilder extends AbstractTreeBuilder {
initRootNode();
}
+ public void reset(@NotNull Collection certificates) {
+ myCertificates.clear();
+ for (X509Certificate certificate : certificates) {
+ addCertificate(certificate);
+ }
+ // expand organization nodes at the same time
+ //initRootNode();
+ queueUpdateFrom(RootDescriptor.ROOT, true).doWhenDone(new Runnable() {
+ @Override
+ public void run() {
+ CertificateTreeBuilder.this.expandAll(null);
+ }
+ });
+ }
+
public void addCertificate(@NotNull X509Certificate certificate) {
CertificateWrapper wrapper = new CertificateWrapper(certificate);
myCertificates.putValue(wrapper.getSubjectField(ORGANIZATION), wrapper);
@@ -105,22 +116,19 @@ public class CertificateTreeBuilder extends AbstractTreeBuilder {
* @return - selected certificates
*/
@NotNull
- public Set getSelectedCertificates() {
- Set selected = new HashSet();
- for (Object o : getSelectedElements()) {
- if (o instanceof CertificateWrapper) {
- selected.add(((CertificateWrapper)o).getCertificate());
- }
- else if (o instanceof String) {
- selected.addAll(getCertificatesByOrganization((String)o));
+ public Set getSelectedCertificates(boolean addFromOrganization) {
+ Set selected = getSelectedElements(X509Certificate.class);
+ if (addFromOrganization) {
+ for (String s : getSelectedElements(String.class)) {
+ selected.addAll(getCertificatesByOrganization(s));
}
}
return selected;
}
@Nullable
- public X509Certificate getFirstSelectedCertificate() {
- Set certificates = getSelectedCertificates();
+ public X509Certificate getFirstSelectedCertificate(boolean addFromOrganization) {
+ Set certificates = getSelectedCertificates(addFromOrganization);
return certificates.isEmpty() ? null : certificates.iterator().next();
}
diff --git a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateWarningDialog.form b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateWarningDialog.form
index 5a28836fb8ba..3421747cd043 100644
--- a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateWarningDialog.form
+++ b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateWarningDialog.form
@@ -49,7 +49,7 @@
-
+
@@ -61,7 +61,7 @@
-
+
@@ -69,7 +69,7 @@
-
+