📄 certdetailsviewpanel.java
字号:
package com.ca.commons.security.cert;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.util.*;
import java.io.*;
import java.lang.String;
import java.security.cert.*;
import java.security.*;
import java.security.interfaces.DSAPublicKey;
import java.security.interfaces.RSAPublicKey;
import com.ca.commons.security.asn1.*;
import com.ca.commons.security.cert.extensions.*;
import com.ca.commons.cbutil.*;
/**
* Second tab: Display details information about the certificate.
* Show combo <All>, Version 1 Fields Only, Extensions Only, Critical
* Extensions Only, Properties Only. Field-Value table, Field View text area,
* &Edit Properties... button disabled, &Copy to File... button.
*
* @author vbui
*/
public class CertDetailsViewPanel extends JPanel
{
private X509Certificate cert = null;
// visual elements
private CBToolBarButton editPropertiesButton = new CBToolBarButton("&Edit Properties...", "Edit Properties...");
private CBToolBarButton copyToFileButton = new CBToolBarButton("&Copy to File...", "Copy to File...");
private JLabel showLabel = new JLabel("Show:");
private String[] showOptions =
{
"<All>", "Version 1 Fields Only",
"Extensions Only", "Critical Extensions Only",
"Properties Only"
};
private JComboBox showCombo = new JComboBox(showOptions);
// table to display cert details with sample data
private JTable certDetailsTable = new JTable();
private JTextArea fieldText = new JTextArea(5, 20);
/**
* Constructor.
*/
public CertDetailsViewPanel(X509Certificate cert)
{
this.cert = cert;
// certDetailsTable cell renderer
certDetailsTable.setDefaultRenderer(JLabel.class,
new LabelRenderer(true));
// increase row height to fit labels with graphics
certDetailsTable.setRowHeight(19);
certDetailsTable.setShowGrid(false);
// prepare visual elements
editPropertiesButton.setWidthHeight(110, 23);
copyToFileButton.setWidthHeight(110, 23);
editPropertiesButton.setEnabled(false);
// fieldText.setFont(new Font("Monospaced", Font.PLAIN, 11));
showCombo.setPreferredSize(new Dimension(200, 23));
showCombo.setMinimumSize(new Dimension(200, 23));
certDetailsTable.setModel(new CertDetailsTableModel(cert, 0));
certDetailsTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
certDetailsTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
certDetailsTable_selectionChanged(e);
}
});
// layout
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
// buttonsPanel.add(editPropertiesButton);
buttonsPanel.add(copyToFileButton);
setLayout(new GridBagLayout());
add(showLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 10, 10, 10), 0, 0));
add(showCombo, new GridBagConstraints(1, 0, 2, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 0, 10, 10), 0, 0));
add(new JScrollPane(certDetailsTable), new GridBagConstraints(0, 1, 3, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 10, 10, 10), 0, 0));
add(new JScrollPane(fieldText), new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(5, 10, 6, 10), 0, 0));
add(buttonsPanel, new GridBagConstraints(0, 3, 3, 1, 1.0, 0.0,
GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL,
new Insets(0, 10, 6, 5), 0, 0));
// add listeners
editPropertiesButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
editPropertiesButton_actionPerformed(e);
}
});
copyToFileButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copyToFileButton_actionPerformed(e);
}
});
showCombo.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
showCombo_itemStateChanged(e);
}
});
}
/**
* Edit properties action.
*/
private void editPropertiesButton_actionPerformed(ActionEvent e)
{
System.out.println("Edit the selected property ");
}
/**
* Copy to file action.
*/
private void copyToFileButton_actionPerformed(ActionEvent e)
{
String filename = CBUtility.chooseFileToSave(this, "Please specify a location to save this certificate",
new String[] {"der"}, "Certificate file (*.der)");
if (filename == null) return;
if (!filename.toLowerCase().endsWith(".der"))
filename = filename + ".der";
if (!CBUtility.okToWriteFile(CBUtility.getParentFrame(this), filename))
{
return;
}
try
{
FileOutputStream fos = new FileOutputStream(filename);
byte[] derout = cert.getEncoded();
fos.write(derout);
fos.close();
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(this,
ex.getMessage(),
"Error!", JOptionPane.ERROR_MESSAGE);
}
}
/**
* Selection on the cert details table changed.
*/
private void certDetailsTable_selectionChanged(ListSelectionEvent e)
{
int selectedRow = certDetailsTable.getSelectedRow();
if (selectedRow >= 0)
{
String selectedValue=certDetailsTable.getValueAt(selectedRow, 1).toString();
CertDetailsTableModel model = (CertDetailsTableModel) certDetailsTable.getModel();
Object details = model.getDetails(selectedValue);
if (details != null)
fieldText.setText(details.toString());
else
fieldText.setText(selectedValue);
}
}
/**
* Selection on the show combo box changed.
*/
private void showCombo_itemStateChanged(ItemEvent e)
{
((CertDetailsTableModel) certDetailsTable.getModel()).
setViewMode(showCombo.getSelectedIndex());
fieldText.setText("");
}
}
class LabelRenderer extends JLabel implements TableCellRenderer
{
Border unselectedBorder = null;
Border selectedBorder = null;
boolean isBordered = true;
public LabelRenderer(boolean isBordered)
{
super();
this.isBordered = isBordered;
setOpaque(true); //MUST do this for background to show up.
}
public Component getTableCellRendererComponent(
JTable table, Object label,
boolean isSelected, boolean hasFocus,
int row, int column)
{
setIcon(((JLabel) label).getIcon());
setText(((JLabel) label).getText());
setBackground(Color.white);
if (isBordered)
{
if (isSelected)
{
if (selectedBorder == null)
{
selectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
table.getSelectionBackground());
}
setBorder(selectedBorder);
}
else
{
if (unselectedBorder == null)
{
unselectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
table.getBackground());
}
setBorder(unselectedBorder);
}
}
return this;
}
}
class CertDetailsTableModel extends AbstractTableModel
{
private String[] headers =
{
"Field", "Value"
};
private Vector data = new Vector();
private X509Certificate cert = null;
private Hashtable briefDetails = new Hashtable();
public Object getDetails(String brief)
{
return briefDetails.get(brief);
}
/**
* Table Model Constructor
*/
public CertDetailsTableModel(X509Certificate cert, int viewMode)
{
this.cert = cert;
setViewMode(viewMode);
}
/**
* Sets the view mode in CertDetailsViewPanel. The viewMode determines
* which attributes and extensions are shown. <br>
* View Modes: <br>
* <item>
* <li> 0 All
* <li> 1 X509 V1 attributes only
* <li> 2 Extensions only
* <li> 3 Critical Extensions only
* <li> 4 Properties only
* </item>
*/
public void setViewMode(int viewMode)
{
data = new Vector();
if (cert == null)
return;
if (viewMode == 0 || viewMode == 1)
{
Vector versionRow = new Vector();
versionRow.add(new JLabel("Version", CertViewer.attributeIcon, SwingConstants.LEFT));
versionRow.add("V" + cert.getVersion());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -