mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add empty panel shown when no certificate is selected like in TaskRepositoriesConfigurable. Tree builder is correctly reinitialized in reset(). Change grow policy of warning message in form.
This commit is contained in:
@@ -63,7 +63,26 @@
|
||||
<border type="none">
|
||||
<title-color color="-16777216"/>
|
||||
</border>
|
||||
<children/>
|
||||
<children>
|
||||
<grid id="2c4f3" binding="myEmptyPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<card name="Card1"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="fa818" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="No certificate selected"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
<component id="3a890" class="com.intellij.openapi.ui.Splitter">
|
||||
<constraints>
|
||||
|
||||
@@ -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<X509Certificate> myCertificates;
|
||||
private CertificateTreeBuilder myTreeBuilder = new CertificateTreeBuilder(myTree);
|
||||
private Set<X509Certificate> myCertificates = new HashSet<X509Certificate>();
|
||||
|
||||
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<X509Certificate> original = myTrustManager.getCertificates();
|
||||
myTreeBuilder = new CertificateTreeBuilder(myTree, original);
|
||||
myCertificates = new HashSet<X509Certificate>(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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<String, CertificateWrapper> myCertificates = new MultiMap<String, CertificateWrapper>();
|
||||
|
||||
public CertificateTreeBuilder(@NotNull Tree tree, @NotNull Collection<X509Certificate> certificates) {
|
||||
for (X509Certificate certificate : certificates) {
|
||||
addCertificate(certificate);
|
||||
}
|
||||
public CertificateTreeBuilder(@NotNull Tree tree) {
|
||||
init(tree, new DefaultTreeModel(new DefaultMutableTreeNode()), new MyTreeStructure(), new Comparator<NodeDescriptor>() {
|
||||
@Override
|
||||
public int compare(NodeDescriptor o1, NodeDescriptor o2) {
|
||||
@@ -58,6 +54,21 @@ public class CertificateTreeBuilder extends AbstractTreeBuilder {
|
||||
initRootNode();
|
||||
}
|
||||
|
||||
public void reset(@NotNull Collection<X509Certificate> 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<X509Certificate> getSelectedCertificates() {
|
||||
Set<X509Certificate> selected = new HashSet<X509Certificate>();
|
||||
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<X509Certificate> getSelectedCertificates(boolean addFromOrganization) {
|
||||
Set<X509Certificate> selected = getSelectedElements(X509Certificate.class);
|
||||
if (addFromOrganization) {
|
||||
for (String s : getSelectedElements(String.class)) {
|
||||
selected.addAll(getCertificatesByOrganization(s));
|
||||
}
|
||||
}
|
||||
return selected;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public X509Certificate getFirstSelectedCertificate() {
|
||||
Set<X509Certificate> certificates = getSelectedCertificates();
|
||||
public X509Certificate getFirstSelectedCertificate(boolean addFromOrganization) {
|
||||
Set<X509Certificate> certificates = getSelectedCertificates(addFromOrganization);
|
||||
return certificates.isEmpty() ? null : certificates.iterator().next();
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<properties>
|
||||
<contentType value="text/html"/>
|
||||
<opaque value="false"/>
|
||||
<text value="<html> <head> </head> <body> </body> </html> "/>
|
||||
<text value="<html> <head> </head> <body> <p style="margin-top: 0"> </p> </body> </html> "/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
@@ -61,7 +61,7 @@
|
||||
</vspacer>
|
||||
<component id="7dcbe" class="javax.swing.JLabel" binding="myWarningSign">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="2" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value=""/>
|
||||
@@ -69,7 +69,7 @@
|
||||
</component>
|
||||
<component id="192db" class="javax.swing.JTextPane" binding="myMessagePane">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="2" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="150" height="50"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
|
||||
Reference in New Issue
Block a user