/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.plugin.otr.authdialog; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.plugin.otr.*; import net.java.sip.communicator.service.protocol.*; /** * @author @George Politis * @author Yana Stamcheva */ public class KnownFingerprintsPanel extends TransparentPanel { /** * Serial version UID. */ private static final long serialVersionUID = 0L; private JButton btnVerifyFingerprint; private JButton btnForgetFingerprint; private JTable contactsTable; /** * Constructor. */ public KnownFingerprintsPanel() { this.initComponents(); this.setPreferredSize(new Dimension(400, 200)); openContact(getSelectedContact(), getSelectedFingerprint()); } /** * Initializes the {@link KnownFingerprintsTableModel} components. */ private void initComponents() { this.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), OtrActivator.resourceService .getI18NString("plugin.otr.configform.KNOWN_FINGERPRINTS"))); this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); contactsTable = new JTable(); contactsTable.setModel(new KnownFingerprintsTableModel()); contactsTable .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); contactsTable.setCellSelectionEnabled(false); contactsTable.setColumnSelectionAllowed(false); contactsTable.setRowSelectionAllowed(true); contactsTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; openContact(getSelectedContact(), getSelectedFingerprint()); } }); JScrollPane pnlContacts = new JScrollPane(contactsTable); this.add(pnlContacts); JPanel pnlButtons = new TransparentPanel(); this.add(pnlButtons); btnVerifyFingerprint = new JButton(); btnVerifyFingerprint.setText(OtrActivator.resourceService .getI18NString("plugin.otr.configform.VERIFY_FINGERPRINT")); btnVerifyFingerprint.setEnabled(false); btnVerifyFingerprint.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { OtrActivator.scOtrKeyManager .verify(OtrContactManager.getOtrContact( getSelectedContact(), null), getSelectedFingerprint()); openContact(getSelectedContact(), getSelectedFingerprint()); contactsTable.updateUI(); } }); pnlButtons.add(btnVerifyFingerprint); btnForgetFingerprint = new JButton(); btnForgetFingerprint.setText(OtrActivator.resourceService .getI18NString("plugin.otr.configform.FORGET_FINGERPRINT")); btnForgetFingerprint.setEnabled(false); btnForgetFingerprint.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { OtrActivator.scOtrKeyManager .unverify(OtrContactManager.getOtrContact( getSelectedContact(), null), getSelectedFingerprint()); openContact(getSelectedContact(), getSelectedFingerprint()); contactsTable.updateUI(); } }); pnlButtons.add(btnForgetFingerprint); } /** * Gets the selected {@link Contact} for this * {@link KnownFingerprintsTableModel}. * * @return the selected {@link Contact} */ private Contact getSelectedContact() { KnownFingerprintsTableModel model = (KnownFingerprintsTableModel) contactsTable.getModel(); int index = contactsTable.getSelectedRow(); if (index < 0 || index > model.getRowCount()) return null; return model.getContactFromRow(index); } /** * Gets the selected fingerprint for this * {@link KnownFingerprintsTableModel} * * return the selected fingerprint */ private String getSelectedFingerprint() { KnownFingerprintsTableModel model = (KnownFingerprintsTableModel) contactsTable.getModel(); int index = contactsTable.getSelectedRow(); if (index < 0 || index > model.getRowCount()) return null; return model.getFingerprintFromRow(index); } /** * Sets up the {@link KnownFingerprintsTableModel} components so that they * reflect the {@link Contact} param. * * @param contact the {@link Contact} to setup the components for. * @param fingerprint the fingerprint to setup the components for. */ private void openContact(Contact contact, String fingerprint) { if (contact == null || fingerprint == null) { btnForgetFingerprint.setEnabled(false); btnVerifyFingerprint.setEnabled(false); } else { boolean verified = OtrActivator.scOtrKeyManager .isVerified(contact, fingerprint); btnForgetFingerprint.setEnabled(verified); btnVerifyFingerprint.setEnabled(!verified); } } }