⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 certdetailsviewpanel.java

📁 JAVA开源LDAP浏览器jxplorer的源码!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

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 + -