blob: bc58aad340f4623e173c471beb7305621f04e0a8 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2007 The University of Manchester
*
* Modifications to the initial code base are copyright of their
* respective authors, or their employers as appropriate.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
******************************************************************************/
package net.sf.taverna.t2.activities.wsdl.servicedescriptions;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.math.BigInteger;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.JSeparator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
import net.sf.taverna.t2.lang.ui.DialogTextArea;
import net.sf.taverna.t2.security.credentialmanager.CMException;
import net.sf.taverna.t2.security.credentialmanager.CMUtils;
import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
import org.apache.log4j.Logger;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.misc.NetscapeCertType;
/**
* Displays the details of a X.509 certificate and asks user if they want to
* trust it.
*
* @author Alex Nenadic
*/
@SuppressWarnings("serial")
public class ConfirmTrustedCertificateDialog extends HelpEnabledDialog {
private static Logger logger = Logger.getLogger(ConfirmTrustedCertificateDialog.class);
// Stores certificate to display
private X509Certificate cert;
// Stores user's decision as whether to trust this service's certificaet or not.
private boolean shouldTrust;
/**
* Creates new ConfirmTrustedCertificateDialog where parent is a Frame.
*/
public ConfirmTrustedCertificateDialog(Frame parent, String title,
boolean modal, X509Certificate crt)
throws CMException {
super(parent, title, modal, null);
this.cert = crt;
initComponents();
}
/**
* Creates new ConfirmTrustedCertificateDialog where parent is a Dialog.
*/
public ConfirmTrustedCertificateDialog(Dialog parent, String title,
boolean modal, X509Certificate crt)
throws CMException {
super(parent, title, modal, null);
this.cert = crt;
initComponents();
}
/**
* Initialise the dialog's GUI components.
*/
private void initComponents(){
// title panel
JPanel titlePanel = new JPanel(new BorderLayout());
titlePanel.setBackground(Color.WHITE);
JLabel titleLabel = new JLabel("View service's certificate");
titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD, 13.5f));
titleLabel.setBorder(new EmptyBorder(10, 10, 0, 10));
DialogTextArea titleMessage = new DialogTextArea("This service requires HTTPS connection and has identified itself with the certificate below.\n" +
"Do you want to trust this service? (Refusing to trust means you will not be able to invoke it from a workflow.)");
titleMessage.setMargin(new Insets(5, 20, 10, 10));
titleMessage.setFont(titleMessage.getFont().deriveFont(11f));
titleMessage.setEditable(false);
titleMessage.setFocusable(false);
titlePanel.setBorder( new EmptyBorder(10, 10, 0, 10));
titlePanel.add(titleLabel, BorderLayout.NORTH);
titlePanel.add(titleMessage, BorderLayout.CENTER);
// Certificate details:
// Grid Bag Constraints templates for labels (column 1) and
// values (column 2) of certificate details
GridBagConstraints gbcLabel = new GridBagConstraints();
gbcLabel.gridx = 0;
gbcLabel.ipadx = 20;
gbcLabel.gridwidth = 1;
gbcLabel.gridheight = 1;
gbcLabel.insets = new Insets(2, 15, 2, 2);
gbcLabel.anchor = GridBagConstraints.LINE_START;
GridBagConstraints gbcValue = new GridBagConstraints();
gbcValue.gridx = 1;
gbcValue.gridwidth = 1;
gbcValue.gridheight = 1;
gbcValue.insets = new Insets(2, 5, 2, 2);
gbcValue.anchor = GridBagConstraints.LINE_START;
// Netscape Certificate Type non-critical extension (if any)
// defines the intended uses of the certificate - to make it look like
// firefox's view certificate dialog
byte[] intendedUses = cert.getExtensionValue("2.16.840.1.113730.1.1"); // Netscape Certificate Type OID
JLabel jlIntendedUses = null;
JTextField jtfIntendedUsesValue = null;
JPanel jpUses = null;
GridBagConstraints gbc_jpUses = null;
if (intendedUses != null) {
jlIntendedUses = new JLabel(
"This certificate has been approved for the following uses:");
jlIntendedUses.setFont(new Font(null, Font.BOLD, 11));
jlIntendedUses.setBorder(new EmptyBorder(5, 5, 5, 5));
jtfIntendedUsesValue = new JTextField(45);
jtfIntendedUsesValue.setText(getIntendedUses(intendedUses));
jtfIntendedUsesValue.setEditable(false);
jtfIntendedUsesValue.setFont(new Font(null, Font.PLAIN, 11));
jpUses = new JPanel(new BorderLayout());
jpUses.add(jlIntendedUses, BorderLayout.NORTH);
jpUses.add(jtfIntendedUsesValue, BorderLayout.CENTER);
JSeparator jsp = new JSeparator(JSeparator.HORIZONTAL);
jpUses.add(jsp, BorderLayout.SOUTH);
gbc_jpUses = (GridBagConstraints) gbcLabel.clone();
gbc_jpUses.gridy = 0;
gbc_jpUses.gridwidth = 2; // takes two columns
gbc_jpUses.insets = new Insets(5, 5, 5, 5);// has slightly bigger insets
}
// Issued To
JLabel jlIssuedTo = new JLabel("Issued To");
jlIssuedTo.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlIssuedTo = (GridBagConstraints) gbcLabel
.clone();
gbc_jlIssuedTo.gridy = 1;
gbc_jlIssuedTo.gridwidth = 2; // takes two columns
gbc_jlIssuedTo.insets = new Insets(5, 5, 5, 5);// has slightly bigger insets
// Distinguished Name (DN)
String sDN = cert.getSubjectX500Principal().getName(
X500Principal.RFC2253);
CMUtils util = new CMUtils();
util.parseDN(sDN);
// Extract the CN, O, OU and EMAILADDRESS fields
String sCN = util.getCN();
String sOrg = util.getO();
String sOU = util.getOU();
// String sEMAILADDRESS = CMX509Util.getEmilAddress();
// Common Name (CN)
JLabel jlCN = new JLabel("Common Name (CN)");
jlCN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlCN = (GridBagConstraints) gbcLabel.clone();
gbc_jlCN.gridy = 2;
JLabel jlCNValue = new JLabel(sCN);
jlCNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlCNValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlCNValue.gridy = 2;
// Organisation (O)
JLabel jlOrg = new JLabel("Organisation (O)");
jlOrg.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOrg = (GridBagConstraints) gbcLabel.clone();
gbc_jlOrg.gridy = 3;
JLabel jlOrgValue = new JLabel(sOrg);
jlOrgValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOrgValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlOrgValue.gridy = 3;
// Organisation Unit (OU)
JLabel jlOU = new JLabel("Organisation Unit (OU)");
jlOU.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOU = (GridBagConstraints) gbcLabel.clone();
gbc_jlOU.gridy = 4;
JLabel jlOUValue = new JLabel(sOU);
jlOUValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOUValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlOUValue.gridy = 4;
// E-mail Address
// JLabel jlEmail = new JLabel("E-mail Address");
// jlEmail.setFont(new Font(null, Font.PLAIN, 11));
// GridBagConstraints gbc_jlEmail = (GridBagConstraints)
// gbcLabel.clone();
// gbc_jlEmail.gridy = 5;
// JLabel jlEmailValue = new JLabel(sEMAILADDRESS);
// jlEmailValue.setFont(new Font(null, Font.PLAIN, 11));
// GridBagConstraints gbc_jlEmailValue = (GridBagConstraints)
// gbcValue.clone();
// gbc_jlEmailValue.gridy = 5;
// Serial Number
JLabel jlSN = new JLabel("Serial Number");
jlSN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSN = (GridBagConstraints) gbcLabel.clone();
gbc_jlSN.gridy = 6;
JLabel jlSNValue = new JLabel();
// Get the hexadecimal serial number
StringBuffer strBuff = new StringBuffer(new BigInteger(1, cert
.getSerialNumber().toByteArray()).toString(16).toUpperCase());
// Place colons at every two hexadecimal characters
if (strBuff.length() > 2) {
for (int iCnt = 2; iCnt < strBuff.length(); iCnt += 3) {
strBuff.insert(iCnt, ':');
}
}
jlSNValue.setText(strBuff.toString());
jlSNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSNValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlSNValue.gridy = 6;
// Version
JLabel jlVersion = new JLabel("Version");
jlVersion.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlVersion = (GridBagConstraints) gbcLabel
.clone();
gbc_jlVersion.gridy = 7;
JLabel jlVersionValue = new JLabel(Integer.toString(cert.getVersion()));
jlVersionValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlVersionValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlVersionValue.gridy = 7;
// Issued By
JLabel jlIssuedBy = new JLabel("Issued By");
jlIssuedBy.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlIssuedBy = (GridBagConstraints) gbcLabel
.clone();
gbc_jlIssuedBy.gridy = 8;
gbc_jlIssuedBy.gridwidth = 2; // takes two columns
gbc_jlIssuedBy.insets = new Insets(5, 5, 5, 5);// has slightly bigger
// insets
// Distinguished Name (DN)
String iDN = cert.getIssuerX500Principal().getName(
X500Principal.RFC2253);
util.parseDN(iDN);
// Extract the CN, O and OU fields
String iCN = util.getCN();
String iOrg = util.getO();
String iOU = util.getOU();
// Common Name (CN)
JLabel jlICN = new JLabel("Common Name (CN)");
jlICN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlICN = (GridBagConstraints) gbcLabel.clone();
gbc_jlICN.gridy = 9;
JLabel jlICNValue = new JLabel(iCN);
jlICNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlICNValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlICNValue.gridy = 9;
// Organisation (O)
JLabel jlIOrg = new JLabel("Organisation (O)");
jlIOrg.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOrg = (GridBagConstraints) gbcLabel.clone();
gbc_jlIOrg.gridy = 10;
JLabel jlIOrgValue = new JLabel(iOrg);
jlIOrgValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOrgValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlIOrgValue.gridy = 10;
// Organisation Unit (OU)
JLabel jlIOU = new JLabel("Organisation Unit (OU)");
jlIOU.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOU = (GridBagConstraints) gbcLabel.clone();
gbc_jlIOU.gridy = 11;
JLabel jlIOUValue = new JLabel(iOU);
jlIOUValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOUValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlIOUValue.gridy = 11;
// Validity
JLabel jlValidity = new JLabel("Validity");
jlValidity.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlValidity = (GridBagConstraints) gbcLabel
.clone();
gbc_jlValidity.gridy = 12;
gbc_jlValidity.gridwidth = 2; // takes two columns
gbc_jlValidity.insets = new Insets(5, 5, 5, 5);// has slightly bigger
// insets
// Issued On
JLabel jlIssuedOn = new JLabel("Issued On");
jlIssuedOn.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIssuedOn = (GridBagConstraints) gbcLabel
.clone();
gbc_jlIssuedOn.gridy = 13;
JLabel jlIssuedOnValue = new JLabel(cert.getNotBefore().toString());
jlIssuedOnValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIssuedOnValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlIssuedOnValue.gridy = 13;
// Expires On
JLabel jlExpiresOn = new JLabel("Expires On");
jlExpiresOn.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlExpiresOn = (GridBagConstraints) gbcLabel
.clone();
gbc_jlExpiresOn.gridy = 14;
JLabel jlExpiresOnValue = new JLabel(cert.getNotAfter().toString());
jlExpiresOnValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlExpiresOnValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlExpiresOnValue.gridy = 14;
// Fingerprints
byte[] bCert = new byte[0];
try {
bCert = cert.getEncoded();
} catch (CertificateEncodingException ex) {
logger.error("Could not get the encoded form of the certificate.", ex);
}
JLabel jlFingerprints = new JLabel("Fingerprints");
jlFingerprints.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlFingerprints = (GridBagConstraints) gbcLabel
.clone();
gbc_jlFingerprints.gridy = 15;
gbc_jlFingerprints.gridwidth = 2; // takes two columns
gbc_jlFingerprints.insets = new Insets(5, 5, 5, 5);// has slightly
// bigger insets
// SHA-1 Fingerprint
JLabel jlSHA1Fingerprint = new JLabel("SHA1 Fingerprint");
jlSHA1Fingerprint.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSHA1Fingerprint = (GridBagConstraints) gbcLabel
.clone();
gbc_jlSHA1Fingerprint.gridy = 16;
JLabel jlSHA1FingerprintValue = new JLabel(getMessageDigest(bCert,
"SHA1"));
jlSHA1FingerprintValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSHA1FingerprintValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlSHA1FingerprintValue.gridy = 16;
// MD5 Fingerprint
JLabel jlMD5Fingerprint = new JLabel("MD5 Fingerprint");
jlMD5Fingerprint.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlMD5Fingerprint = (GridBagConstraints) gbcLabel
.clone();
gbc_jlMD5Fingerprint.gridy = 17;
JLabel jlMD5FingerprintValue = new JLabel(
getMessageDigest(bCert, "MD5"));
jlMD5FingerprintValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlMD5FingerprintValue = (GridBagConstraints) gbcValue
.clone();
gbc_jlMD5FingerprintValue.gridy = 17;
// Empty label to add a bit space at the bottom of the panel
// to make it look like firefox's view certificate dialog
JLabel jlEmpty = new JLabel("");
GridBagConstraints gbc_jlEmpty = (GridBagConstraints) gbcLabel.clone();
gbc_jlEmpty.gridy = 18;
gbc_jlEmpty.gridwidth = 2; // takes two columns
gbc_jlEmpty.ipady = 40;
JPanel jpCertificate = new JPanel(new GridBagLayout());
jpCertificate.setBorder(new CompoundBorder(new EmptyBorder(15, 15, 15,
15), new EtchedBorder()));
if (intendedUses != null) {
jpCertificate.add(jpUses, gbc_jpUses);
}
jpCertificate.add(jlIssuedTo, gbc_jlIssuedTo); // Issued To
jpCertificate.add(jlCN, gbc_jlCN);
jpCertificate.add(jlCNValue, gbc_jlCNValue);
jpCertificate.add(jlOrg, gbc_jlOrg);
jpCertificate.add(jlOrgValue, gbc_jlOrgValue);
jpCertificate.add(jlOU, gbc_jlOU);
jpCertificate.add(jlOUValue, gbc_jlOUValue);
// jpCertificate.add(jlEmail, gbc_jlEmail);
// jpCertificate.add(jlEmailValue, gbc_jlEmailValue);
jpCertificate.add(jlSN, gbc_jlSN);
jpCertificate.add(jlSNValue, gbc_jlSNValue);
jpCertificate.add(jlVersion, gbc_jlVersion);
jpCertificate.add(jlVersionValue, gbc_jlVersionValue);
jpCertificate.add(jlIssuedBy, gbc_jlIssuedBy); // Issued By
jpCertificate.add(jlICN, gbc_jlICN);
jpCertificate.add(jlICNValue, gbc_jlICNValue);
jpCertificate.add(jlIOrg, gbc_jlIOrg);
jpCertificate.add(jlIOrgValue, gbc_jlIOrgValue);
jpCertificate.add(jlIOU, gbc_jlIOU);
jpCertificate.add(jlIOUValue, gbc_jlIOUValue);
jpCertificate.add(jlValidity, gbc_jlValidity); // Validity
jpCertificate.add(jlIssuedOn, gbc_jlIssuedOn);
jpCertificate.add(jlIssuedOnValue, gbc_jlIssuedOnValue);
jpCertificate.add(jlExpiresOn, gbc_jlExpiresOn);
jpCertificate.add(jlExpiresOnValue, gbc_jlExpiresOnValue);
jpCertificate.add(jlFingerprints, gbc_jlFingerprints); // Fingerprints
jpCertificate.add(jlSHA1Fingerprint, gbc_jlSHA1Fingerprint);
jpCertificate.add(jlSHA1FingerprintValue, gbc_jlSHA1FingerprintValue);
jpCertificate.add(jlMD5Fingerprint, gbc_jlMD5Fingerprint);
jpCertificate.add(jlMD5FingerprintValue, gbc_jlMD5FingerprintValue);
jpCertificate.add(jlEmpty, gbc_jlEmpty); // Empty label to get some vertical space on the frame
// OK button
JPanel jpButtons = new JPanel(new FlowLayout(FlowLayout.CENTER));
final JButton jbTrust = new JButton("Trust");
jbTrust.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
trustPressed();
}
});
final JButton jbDontTrust = new JButton("Do not trust");
jbDontTrust.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
dontTrustPressed();
}
});
jpButtons.add(jbTrust);
jpButtons.add(jbDontTrust);
// Put it all together
getContentPane().add(titlePanel, BorderLayout.NORTH);
getContentPane().add(jpCertificate, BorderLayout.CENTER);
getContentPane().add(jpButtons, BorderLayout.SOUTH);
// Resizing wreaks havoc
setResizable(false);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
closeDialog();
}
});
getRootPane().setDefaultButton(jbTrust);
pack();
}
/**
* Get the digest of a message as a formatted String.
*
* @param bMessage
* The message to digest
* @param digestType
* The message digest algorithm
* @return The message digest
*/
public static String getMessageDigest(byte[] bMessage, String digestType) {
// Create message digest object using the supplied algorithm
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance(digestType);
} catch (NoSuchAlgorithmException ex) {
logger.error("Failed to create message digest.", ex);
return "";
}
// Create raw message digest
byte[] bFingerPrint = messageDigest.digest(bMessage);
// Place the raw message digest into a StringBuffer as a Hex number
StringBuffer strBuff = new StringBuffer(new BigInteger(1, bFingerPrint)
.toString(16).toUpperCase());
// Odd number of characters so add in a padding "0"
if ((strBuff.length() % 2) != 0) {
strBuff.insert(0, '0');
}
// Place colons at every two hex characters
if (strBuff.length() > 2) {
for (int iCnt = 2; iCnt < strBuff.length(); iCnt += 3) {
strBuff.insert(iCnt, ':');
}
}
// Return the formatted message digest
return strBuff.toString();
}
/**
* Gets the intended certificate uses, i.e. Netscape Certificate Type
* extension (2.16.840.1.113730.1.1) value as a string
*
* @param value
* Extension value as a DER-encoded OCTET string
* @return Extension value as a string
*/
private String getIntendedUses(byte[] value) {
// Netscape Certificate Types (2.16.840.1.113730.1.1)
int[] INTENDED_USES = new int[] { NetscapeCertType.sslClient,
NetscapeCertType.sslServer, NetscapeCertType.smime,
NetscapeCertType.objectSigning, NetscapeCertType.reserved,
NetscapeCertType.sslCA, NetscapeCertType.smimeCA,
NetscapeCertType.objectSigningCA, };
// Netscape Certificate Type strings (2.16.840.1.113730.1.1)
HashMap<String, String> INTENDED_USES_STRINGS = new HashMap<String, String>();
INTENDED_USES_STRINGS.put("128", "SSL Client");
INTENDED_USES_STRINGS.put("64", "SSL Server");
INTENDED_USES_STRINGS.put("32", "S/MIME");
INTENDED_USES_STRINGS.put("16", "Object Signing");
INTENDED_USES_STRINGS.put("8", "Reserved");
INTENDED_USES_STRINGS.put("4", "SSL CA");
INTENDED_USES_STRINGS.put("2", "S/MIME CA");
INTENDED_USES_STRINGS.put("1", "Object Signing CA");
// Get octet string from extension value
ASN1OctetString fromByteArray = new DEROctetString(value);
byte[] octets = fromByteArray.getOctets();
DERBitString fromByteArray2 = new DERBitString(octets);
int val = new NetscapeCertType(fromByteArray2).intValue();
StringBuffer strBuff = new StringBuffer();
for (int i = 0, len = INTENDED_USES.length; i < len; i++) {
int use = INTENDED_USES[i];
if ((val & use) == use) {
strBuff.append(INTENDED_USES_STRINGS.get(String.valueOf(use))
+ ", \n");
}
}
// remove the last ", \n" from the end of the buffer
String str = strBuff.toString();
str = str.substring(0, str.length() - 3);
return str;
}
/**
* 'Trust' button pressed.
*/
private void trustPressed() {
shouldTrust = true;
closeDialog();
}
/**
* 'Do not trust' button pressed.
*/
private void dontTrustPressed() {
shouldTrust = false;
closeDialog();
}
/**
* Closes the dialog.
*/
public void closeDialog() {
setVisible(false);
dispose();
}
public boolean shouldTrust() {
return shouldTrust;
}
}