/*
*
* Panbox - encryption for cloud storage
* Copyright (C) 2014-2015 by Fraunhofer SIT and Sirrix AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additonally, third party code may be provided with notices and open source
* licenses from communities and third parties that govern the use of those
* portions, and any licenses granted hereunder do not alter any rights and
* obligations you may have under such open source licenses, however, the
* disclaimer of warranty and limitation of liability provisions of the GPLv3
* will apply to all the product.
*
*/
package org.panbox.desktop.common.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.Flushable;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.URI;
import java.net.UnknownHostException;
import java.security.UnrecoverableKeyException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.log4j.Logger;
import org.panbox.OS;
import org.panbox.Settings;
import org.panbox.core.Utils;
import org.panbox.core.csp.CSPAdapterFactory;
import org.panbox.core.csp.StorageBackendType;
import org.panbox.core.exception.ShareMetaDataException;
import org.panbox.core.identitymgmt.CloudProviderInfo;
import org.panbox.desktop.common.PanboxClient;
import org.panbox.desktop.common.devicemgmt.DeviceManagerException;
import org.panbox.desktop.common.gui.PasswordEnterDialog.PermissionType;
import org.panbox.desktop.common.gui.addressbook.CSPTableCellEditor;
import org.panbox.desktop.common.gui.addressbook.CSPTableModel;
import org.panbox.desktop.common.gui.addressbook.ContactListCellRenderer;
import org.panbox.desktop.common.gui.addressbook.ContactListModel;
import org.panbox.desktop.common.gui.addressbook.ContactShareParticipant;
import org.panbox.desktop.common.gui.addressbook.PanboxGUIContact;
import org.panbox.desktop.common.gui.addressbook.PanboxMyContact;
import org.panbox.desktop.common.gui.devices.AddDeviceBluetoothActionListener;
import org.panbox.desktop.common.gui.devices.AddDeviceFileActionListener;
import org.panbox.desktop.common.gui.devices.AddDeviceNetworkActionListener;
import org.panbox.desktop.common.gui.devices.DeviceListCellRenderer;
import org.panbox.desktop.common.gui.devices.DeviceListModel;
import org.panbox.desktop.common.gui.devices.DeviceShareParticipant;
import org.panbox.desktop.common.gui.devices.PanboxDevice;
import org.panbox.desktop.common.gui.shares.DropboxPanboxShare;
import org.panbox.desktop.common.gui.shares.FolderPanboxShare;
import org.panbox.desktop.common.gui.shares.PanboxShare;
import org.panbox.desktop.common.gui.shares.PanboxSharePermission;
import org.panbox.desktop.common.gui.shares.ShareListCellRenderer;
import org.panbox.desktop.common.gui.shares.ShareListModel;
import org.panbox.desktop.common.gui.shares.ShareParticipantListCellRenderer;
import org.panbox.desktop.common.gui.shares.ShareParticipantListModel;
import org.panbox.desktop.common.sharemgmt.ShareDoesNotExistException;
import org.panbox.desktop.common.sharemgmt.ShareManagerException;
import org.panbox.desktop.common.urihandler.PanboxURICmdShareInvitation;
import org.panbox.desktop.common.utils.DesktopApi;
import org.panbox.desktop.common.utils.FileUtils;
import org.panbox.desktop.common.utils.SupportedLanguage;
import org.panbox.desktop.common.vfs.backend.dropbox.CSPApiException;
import org.panbox.desktop.common.vfs.backend.dropbox.DropboxAPIIntegration;
import org.panbox.desktop.common.vfs.backend.dropbox.DropboxAdapterFactory;
import org.panbox.desktop.common.vfs.backend.dropbox.DropboxClientIntegration;
public class PanboxClientGUI extends javax.swing.JFrame {
private static final long serialVersionUID = -8164912949809840568L;
private final PanboxClient client;
private final ShareListModel shareModel;
private final ContactListModel contactModel;
private final DeviceListModel deviceModel;
private PanboxShare share;
private PanboxGUIContact contact;
private List<PanboxGUIContact> contacts;
private PanboxDevice device;
private final static Logger logger = Logger
.getLogger(PanboxClientGUI.class);
// no effect on initComponents
private static final ResourceBundle bundle = ResourceBundle.getBundle(
"org.panbox.desktop.common.gui.Messages", Settings.getInstance()
.getLocale());
private boolean unsavedContactChanges = false;
private ArrayList<CloudProviderInfo> removedCSPs = new ArrayList<>();
private int addedCSPCount = 0;
private DropboxSettingsPanel dropboxSettingsPanel;
public PanboxClientGUI(final PanboxClient client) {
this.client = client;
this.shareModel = client.getShareList();
this.contactModel = client.getContactList();
this.deviceModel = client.getDeviceList();
initComponents();
ActionListener changesDetectedActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setSettingsChangesDetected();
}
};
DocumentListener changesDetectedDocumentListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
setSettingsChangesDetected();
}
@Override
public void removeUpdate(DocumentEvent e) {
setSettingsChangesDetected();
}
@Override
public void changedUpdate(DocumentEvent e) {
}
};
dropboxSettingsPanel = new DropboxSettingsPanel(
changesDetectedActionListener, changesDetectedDocumentListener);
initSettingsConfig();
// set the icon
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(getClass().getResource(
"panbox-icon-big.png"));
setIconImage(img);
// set the default locale for popup messages
JOptionPane.setDefaultLocale(Settings.getInstance().getLocale());
// Hide these for now. Do we still need this?
syncStatusLabel.setVisible(false);
syncStatusTextField.setVisible(false);
cspInfoTable
.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); // NOI18N
shareList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
refreshShare();
}
});
shareList.setSelectedIndex(0); // always try to select first share
enableDisableAddDeviceContactForShare();
addressbookList.addListSelectionListener(new ListSelectionListener() {
private DocumentListener firstNameFieldDocListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
changed();
}
@Override
public void removeUpdate(DocumentEvent e) {
changed();
}
@Override
public void changedUpdate(DocumentEvent e) {
}
public void changed() {
if (!firstNameTextField.getText().equals(
contact.getFirstName())
&& !unsavedContactChanges) {
setContactChangesDetected();
}
}
};
private DocumentListener lastNameFieldDocListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
changed();
}
@Override
public void removeUpdate(DocumentEvent e) {
changed();
}
@Override
public void changedUpdate(DocumentEvent e) {
}
public void changed() {
if (!lastNameTextField.getText().equals(contact.getName())
&& !unsavedContactChanges) {
setContactChangesDetected();
}
}
};
private ListSelectionListener cspListSelectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int selectedIndex = cspInfoTable.getSelectedRow();
int max = ((CSPTableModel) cspInfoTable.getModel())
.getMax();
if (selectedIndex != -1 && selectedIndex < max) {
removeCSPInfoButton.setEnabled(true);
} else {
removeCSPInfoButton.setEnabled(false);
}
}
};
boolean manuallySetSelection = false;
@Override
public void valueChanged(ListSelectionEvent e) {
final List<PanboxGUIContact> selected = addressbookList
.getSelectedValuesList();
firstNameTextField.getDocument().removeDocumentListener(
firstNameFieldDocListener);
lastNameTextField.getDocument().removeDocumentListener(
lastNameFieldDocListener);
cspInfoTable.getSelectionModel().removeListSelectionListener(
cspListSelectionListener);
if (!manuallySetSelection) {
if (!uneditedCSPsExist()) {
if (unsavedContactChanges) {
int saveUnchanged = JOptionPane.showConfirmDialog(
null,
bundle.getString("PanboxClientGUI.unsavedChangesToContact"), // NOI18N
bundle.getString("PanboxClientGUI.panboxMessage"), // NOI18N
JOptionPane.YES_NO_CANCEL_OPTION);
if (saveUnchanged == JOptionPane.YES_OPTION) {
saveContactChanges();
refreshContact();
resetContactApplyDiscardButtons();
} else if (saveUnchanged == JOptionPane.CANCEL_OPTION) {
manuallySetSelection = true;
int previousIndex = e.getFirstIndex() == addressbookList
.getSelectedIndex() ? e.getLastIndex()
: e.getFirstIndex();
addressbookList.setSelectedIndex(previousIndex);
} else {
refreshContact();
resetContactApplyDiscardButtons();
}
unsavedContactChanges = false;
}
int selectedIndex = addressbookList.getSelectedIndex();
if (selectedIndex != -1) {
// enable Buttons
removeContactButton.setEnabled(true);
exportContactButton.setEnabled(true);
// refresh contact infos
contact = contactModel.getElementAt(selectedIndex);
contacts = selected;
firstNameTextField.setText(contact.getFirstName());
lastNameTextField.setText(contact.getName());
emailTextField.setText(contact.getEmail());
cspInfoTable.setModel(contact
.generateCspInfoTableModel());
cspInfoTable.getSelectionModel()
.addListSelectionListener(
cspListSelectionListener);
// show certificate info
encKeyFprintTextField.setText(contact
.getCertEncFingerprint());
signKeyFprintTextField.setText(contact
.getCertSignFingerprint());
validFromUntilLabel.setText(bundle
.getString("valid.from")
+ " "
+ contact.getFromDate()
+ " "
+ bundle.getString("valid.to")
+ " "
+ contact.getUntilDate());
// disable apply and discard buttons when contact
// selection
// changes
contactApplyButton.setEnabled(false);
contactDiscardButton.setEnabled(false);
// disable csp add button when no further csps are
// available to add
if (contact.getAvailableCSPs() > 0) {
addCSPInfoButton.setEnabled(true);
} else {
addCSPInfoButton.setEnabled(false);
}
removeCSPInfoButton.setEnabled(false);
if (contact instanceof PanboxMyContact) {
firstNameTextField.setEnabled(false);
lastNameTextField.setEnabled(false);
removeContactButton.setEnabled(false);
contactVerificationStatusCheckBox
.setEnabled(false);
} else {
firstNameTextField.setEnabled(true);
lastNameTextField.setEnabled(true);
removeContactButton.setEnabled(true);
firstNameTextField.getDocument()
.addDocumentListener(
firstNameFieldDocListener);
lastNameTextField.getDocument()
.addDocumentListener(
lastNameFieldDocListener);
contactVerificationStatusCheckBox
.setEnabled(true);
}
} else {
// disable export and remove button when no item is
// selected
removeContactButton.setEnabled(false);
exportContactButton.setEnabled(false);
}
} else {
manuallySetSelection = true;
int previousIndex = e.getFirstIndex() == addressbookList
.getSelectedIndex() ? e.getLastIndex() : e
.getFirstIndex();
addressbookList.setSelectedIndex(previousIndex);
}
} else {
manuallySetSelection = false;
}
if (contact.isVerified()) {
contactVerificationStatusCheckBox.setSelected(true);
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
} else {
contactVerificationStatusCheckBox.setSelected(false);
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
}
}
});
addressbookList.setSelectedIndex(0); // always try to select first
// contact
// contact
firstNameTextField.setDisabledTextColor(Color.BLACK);
lastNameTextField.setDisabledTextColor(Color.BLACK);
emailTextField.setDisabledTextColor(Color.BLACK);
encKeyFprintTextField.setDisabledTextColor(Color.BLACK);
signKeyFprintTextField.setDisabledTextColor(Color.BLACK);
deviceList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int selected = deviceList.getSelectedIndex();
if (!e.getValueIsAdjusting() && selected != -1) {
device = deviceModel.getElementAt(selected);
deviceKeyFprintTextField.setText(device
.getDevicePubKeyFingerprint());
deviceShareList.setModel(client.getDeviceShares(device));
checkIfRemoveDeviceShouldBeEnabled();
}
}
});
deviceList.setSelectedIndex(0); // always try to select first device
checkIfRemoveDeviceShouldBeEnabled();
// expert mode visible/invisible
expertModeCheckBoxActionPerformed(null);
languageComboBox.addActionListener(changesDetectedActionListener);
expertModeCheckBox.addActionListener(changesDetectedActionListener);
networkAddressComboBox.addActionListener(changesDetectedActionListener);
networkInterfaceComboBox
.addActionListener(changesDetectedActionListener);
panboxFolderTextField.getDocument().addDocumentListener(
changesDetectedDocumentListener);
settingsFolderTextField.getDocument().addDocumentListener(
changesDetectedDocumentListener);
// disable settings apply and discard buttons
settingsApplyButton.setEnabled(false);
settingsRevertButton.setEnabled(false);
// TODO: add action and document listeners to the csp settings after it
// has been fixed (see trac ticket #139)
// Disable device pairing for SLAVE devices and enable the click for MASTER devices!
if (Settings.getInstance().isSlave()) {
addDeviceButton.setEnabled(false);
addDeviceButton.setToolTipText(bundle
.getString("client.disabledPairingSlave"));
} else {
addDeviceButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
addDeviceButtonMousePressed(evt);
}
});
}
if (OS.getOperatingSystem().isWindows()) {
panboxFolderLabel.setText(bundle
.getString("client.settings.panboxDrive")); // NOI18N
panboxFolderChooseButton.setVisible(false);
}
}
private void checkIfRemoveDeviceShouldBeEnabled() {
if (client.getDeviceList().size() <= 0) {
removeDeviceButton.setToolTipText(bundle
.getString("client.deviceList.removeDevice.disabled")); // NOI18N
removeDeviceButton.setEnabled(false);
} else {
if (deviceList.getSelectedValue() == null) {
removeDeviceButton.setToolTipText(bundle
.getString("client.deviceList.removeDevice.noDevice")); // NOI18N
removeDeviceButton.setEnabled(false);
} else if (deviceList.getSelectedValue().getDeviceName()
.equals(Settings.getInstance().getDeviceName())) {
removeDeviceButton
.setToolTipText(bundle
.getString("client.deviceList.removeDevice.thisDevice")); // NOI18N
removeDeviceButton.setEnabled(false);
} else {
removeDeviceButton.setToolTipText(bundle
.getString("client.deviceList.removeDevice")); // NOI18N
removeDeviceButton.setEnabled(true);
}
}
}
public void refreshShare() {
int selected = shareList.getSelectedIndex();
if (selected != -1) {
share = shareModel.getElementAt(selected);
ownerTextField.setText(share.isOwner() ? "Owner" : "User"); // NOI18N
try {
syncStatusTextField
.setText(share.getSyncStatus() == 0 ? "Fully synchronized"
: "Not fully synchronized"); // NOI18N
} catch (NullPointerException ex) {
syncStatusTextField.setText("Unknown synchronization state"); // NOI18N
}
if (share instanceof DropboxPanboxShare) {
DropboxPanboxShare dbitem = (DropboxPanboxShare) share;
urlTextField.setText(dbitem.getPath());
} else if (share instanceof FolderPanboxShare) {
FolderPanboxShare folderitem = (FolderPanboxShare) share;
urlTextField.setText(folderitem.getPath());
}
usersList.setModel(client.getShareParticipantListForShare(share));
removeShare.setEnabled(true);
if (share instanceof DropboxPanboxShare) {
restoreRevButton.setEnabled(true);
} else {
restoreRevButton.setEnabled(false);
}
} else {
removeShare.setEnabled(false);
restoreRevButton.setEnabled(false);
usersList.setModel(new ShareParticipantListModel());
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed"
// <editor-fold defaultstate="collapsed"
// desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
mainTabbedPane = new javax.swing.JTabbedPane();
shareListTabPanel = new javax.swing.JPanel();
shareListPanel = new javax.swing.JPanel();
shareListScrollPane = new javax.swing.JScrollPane();
shareList = new javax.swing.JList<PanboxShare>();
removeShare = new javax.swing.JButton();
addShare = new javax.swing.JButton();
restoreRevButton = new javax.swing.JButton();
sharePropertiesPanel = new javax.swing.JPanel();
sharePropertiesLabel = new javax.swing.JLabel();
usersLabel = new javax.swing.JLabel();
usersListScrollPane = new javax.swing.JScrollPane();
usersList = new javax.swing.JList<PanboxSharePermission>();
permissionsLabel = new javax.swing.JLabel();
urlLabel = new javax.swing.JLabel();
syncStatusLabel = new javax.swing.JLabel();
ownerTextField = new javax.swing.JTextField();
urlTextField = new javax.swing.JTextField();
syncStatusTextField = new javax.swing.JTextField();
removeDeviceContactShareButton = new javax.swing.JButton();
addDeviceContactShareButton = new javax.swing.JButton();
addressbookTabPanel = new javax.swing.JPanel();
addressbookPanel = new javax.swing.JPanel();
addressbookListScrollPane = new javax.swing.JScrollPane();
addressbookList = new javax.swing.JList<PanboxGUIContact>();
exportContactButton = new javax.swing.JButton();
removeContactButton = new javax.swing.JButton();
importContactButton = new javax.swing.JButton();
publishContactButton = new javax.swing.JButton();
contactPropertiesPanell = new javax.swing.JPanel();
contactPropertiesLabel = new javax.swing.JLabel();
firstNameLabel = new javax.swing.JLabel();
removeCSPInfoButton = new javax.swing.JButton();
addCSPInfoButton = new javax.swing.JButton();
lastNameLabel = new javax.swing.JLabel();
emailLabel = new javax.swing.JLabel();
cspAccountsLabel = new javax.swing.JLabel();
firstNameTextField = new javax.swing.JTextField();
lastNameTextField = new javax.swing.JTextField();
emailTextField = new javax.swing.JTextField();
cspInfoTableScrollPanel = new javax.swing.JScrollPane();
cspInfoTable = new javax.swing.JTable();
expertModeContactPanel = new javax.swing.JPanel();
encKeyFprintLabel = new javax.swing.JLabel();
encKeyFprintTextField = new javax.swing.JTextField();
signKeyFprintLabel = new javax.swing.JLabel();
signKeyFprintTextField = new javax.swing.JTextField();
validFromUntilLabel = new javax.swing.JLabel();
contactApplyButton = new javax.swing.JButton();
contactDiscardButton = new javax.swing.JButton();
contactVerificationStatusCheckBox = new javax.swing.JCheckBox();
devicesTabPanel = new javax.swing.JPanel();
deviceListPanel = new javax.swing.JPanel();
deviceListScrollPane = new javax.swing.JScrollPane();
deviceList = new javax.swing.JList<PanboxDevice>();
addDeviceButton = new javax.swing.JButton();
removeDeviceButton = new javax.swing.JButton();
devicePropertiesPanel = new javax.swing.JPanel();
devicePropertiesLabel = new javax.swing.JLabel();
expertModeDevicePanel = new javax.swing.JPanel();
deviceKeyFprintLabel = new javax.swing.JLabel();
deviceKeyFprintTextField = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
usersListScrollPane1 = new javax.swing.JScrollPane();
deviceShareList = new javax.swing.JList<PanboxShare>();
settingsTabPanel = new javax.swing.JPanel();
languageLabel = new javax.swing.JLabel();
languageComboBox = new javax.swing.JComboBox<SupportedLanguage>();
settingsFolderLabel = new javax.swing.JLabel();
settingsFolderTextField = new javax.swing.JTextField();
settingsFolderChooseButton = new javax.swing.JButton();
panboxFolderLabel = new javax.swing.JLabel();
panboxFolderTextField = new javax.swing.JTextField();
panboxFolderChooseButton = new javax.swing.JButton();
settingsApplyButton = new javax.swing.JButton();
settingsRevertButton = new javax.swing.JButton();
expertModeCheckBox = new javax.swing.JCheckBox();
networkDevicePairingPanel = new javax.swing.JPanel();
networkDevicePairingLabel = new javax.swing.JLabel();
networkInterfaceLabel = new javax.swing.JLabel();
networkInterfaceComboBox = new javax.swing.JComboBox<Object>();
networkAddressLabel = new javax.swing.JLabel();
networkAddressComboBox = new javax.swing.JComboBox<Object>();
cspSettingsPanel = new javax.swing.JPanel();
selectedCSPLabel = new javax.swing.JLabel();
cspSelectionComboBox = new javax.swing.JComboBox<String>();
selectedCSPContentPanel = new javax.swing.JPanel();
uriHandlerCheckbox = new javax.swing.JCheckBox();
mailtoSchemeCheckbox = new javax.swing.JCheckBox();
clipboardHandlerCheckbox = new javax.swing.JCheckBox();
setTitle(bundle.getString("PanboxClientGUI.title")); // NOI18N
setMinimumSize(new java.awt.Dimension(800, 600));
setResizable(false);
mainTabbedPane.setPreferredSize(new java.awt.Dimension(813, 609));
shareListTabPanel.setLayout(new java.awt.GridLayout(1, 2, 10, 10));
shareList.setModel(shareModel);
shareList
.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
shareList.setCellRenderer(new ShareListCellRenderer());
shareList.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
shareListMouseClicked(evt);
}
});
shareList
.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(
javax.swing.event.ListSelectionEvent evt) {
shareListValueChanged(evt);
}
});
shareListScrollPane.setViewportView(shareList);
removeShare.setIcon(new javax.swing.ImageIcon(getClass().getResource(
"/org/panbox/desktop/common/gui/removebutton.png"))); // NOI18N
removeShare.setToolTipText(bundle
.getString("client.shareList.removeShareToolTip")); // NOI18N
removeShare.setEnabled(false);
removeShare.setPreferredSize(new java.awt.Dimension(28, 28));
removeShare.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeShareActionPerformed(evt);
}
});
addShare.setIcon(new javax.swing.ImageIcon(getClass().getResource(
"/org/panbox/desktop/common/gui/addbutton.png"))); // NOI18N
addShare.setToolTipText(bundle
.getString("client.shareList.addShareToolTip")); // NOI18N
addShare.setPreferredSize(new java.awt.Dimension(28, 28));
addShare.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addShareActionPerformed(evt);
}
});
restoreRevButton.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
"/org/panbox/desktop/common/gui/restorebutton.png"))); // NOI18N
restoreRevButton.setToolTipText(bundle
.getString("PanboxClientGUI.restoreRevButton.tooltip")); // NOI18N
restoreRevButton.setEnabled(false);
restoreRevButton.setPreferredSize(new java.awt.Dimension(28, 28));
restoreRevButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
restoreRevButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout shareListPanelLayout = new javax.swing.GroupLayout(
shareListPanel);
shareListPanel.setLayout(shareListPanelLayout);
shareListPanelLayout
.setHorizontalGroup(shareListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareListPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
shareListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
shareListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
371,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
shareListPanelLayout
.createSequentialGroup()
.addGap(0,
0,
Short.MAX_VALUE)
.addComponent(
restoreRevButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
addShare,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
removeShare,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap()));
shareListPanelLayout
.setVerticalGroup(shareListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareListPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
shareListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
594, Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
shareListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
removeShare,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
addShare,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
restoreRevButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap()));
shareListTabPanel.add(shareListPanel);
sharePropertiesLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
sharePropertiesLabel.setText(bundle
.getString("client.shareList.shareProperties")); // NOI18N
usersLabel.setText(bundle.getString("PanboxClientGUI.usersLabel.text")); // NOI18N
usersList
.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
usersList.setCellRenderer(new ShareParticipantListCellRenderer());
usersList
.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(
javax.swing.event.ListSelectionEvent evt) {
usersListValueChanged(evt);
}
});
usersListScrollPane.setViewportView(usersList);
permissionsLabel.setText(bundle
.getString("client.shareList.permissions")); // NOI18N
urlLabel.setText(bundle.getString("client.shareList.url")); // NOI18N
syncStatusLabel
.setText(bundle.getString("client.shareList.syncStatus")); // NOI18N
ownerTextField.setEnabled(false);
urlTextField.setEnabled(false);
syncStatusTextField.setEnabled(false);
removeDeviceContactShareButton.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
"/org/panbox/desktop/common/gui/removebutton.png"))); // NOI18N
removeDeviceContactShareButton
.setToolTipText(bundle
.getString("client.shareList.removeUserDeviceFromShareToolTip")); // NOI18N
removeDeviceContactShareButton.setEnabled(false);
removeDeviceContactShareButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeDeviceContactShareButtonActionPerformed(evt);
}
});
addDeviceContactShareButton.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
"/org/panbox/desktop/common/gui/addbutton.png"))); // NOI18N
addDeviceContactShareButton.setToolTipText(bundle
.getString("client.shareList.addUserDeviceToShareToolTip")); // NOI18N
addDeviceContactShareButton
.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
addDeviceContactShareButtonMousePressed(evt);
}
});
javax.swing.GroupLayout sharePropertiesPanelLayout = new javax.swing.GroupLayout(
sharePropertiesPanel);
sharePropertiesPanel.setLayout(sharePropertiesPanelLayout);
sharePropertiesPanelLayout
.setHorizontalGroup(sharePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
sharePropertiesPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
sharePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
syncStatusLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
permissionsLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
usersListScrollPane)
.addGroup(
sharePropertiesPanelLayout
.createSequentialGroup()
.addGap(10,
10,
10)
.addGroup(
sharePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
urlTextField)
.addComponent(
syncStatusTextField)
.addComponent(
ownerTextField)))
.addComponent(
usersLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
urlLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
sharePropertiesPanelLayout
.createSequentialGroup()
.addGap(0,
283,
Short.MAX_VALUE)
.addComponent(
addDeviceContactShareButton)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
removeDeviceContactShareButton))
.addGroup(
sharePropertiesPanelLayout
.createSequentialGroup()
.addComponent(
sharePropertiesLabel)
.addGap(0,
44,
Short.MAX_VALUE)))
.addContainerGap()));
sharePropertiesPanelLayout
.setVerticalGroup(sharePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
sharePropertiesPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(sharePropertiesLabel)
.addGap(18, 18, 18)
.addComponent(usersLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
usersListScrollPane,
javax.swing.GroupLayout.PREFERRED_SIZE,
148,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
sharePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
removeDeviceContactShareButton)
.addComponent(
addDeviceContactShareButton))
.addGap(18, 18, 18)
.addComponent(permissionsLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
ownerTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(urlLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
urlTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(syncStatusLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
syncStatusTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(165, Short.MAX_VALUE)));
sharePropertiesLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.shareProperties")); // NOI18N
usersLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.usersDevices")); // NOI18N
permissionsLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.permissions")); // NOI18N
urlLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.url")); // NOI18N
syncStatusLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.syncStatus")); // NOI18N
shareListTabPanel.add(sharePropertiesPanel);
mainTabbedPane.addTab(bundle.getString("client.shareList.tabTitle"),
shareListTabPanel); // NOI18N
shareListTabPanel.getAccessibleContext().setAccessibleName(
bundle.getString("client.shareList.tabTitle")); // NOI18N
addressbookTabPanel.setLayout(new java.awt.GridLayout(1, 2, 10, 10));
addressbookList.setModel(contactModel);
addressbookList.setCellRenderer(new ContactListCellRenderer());
addressbookListScrollPane.setViewportView(addressbookList);
exportContactButton.setIcon(new javax.swing.ImageIcon(getClass()
.getResource("/org/panbox/desktop/common/gui/savebutton.png"))); // NOI18N
exportContactButton.setToolTipText(bundle
.getString("client.addressList.exportContact")); // NOI18N
exportContactButton.setPreferredSize(new java.awt.Dimension(28, 28));
exportContactButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exportContactButtonActionPerformed(evt);
}
});
removeContactButton
.setIcon(new javax.swing.ImageIcon(getClass().getResource(
"/org/panbox/desktop/common/gui/removebutton.png"))); // NOI18N
removeContactButton.setToolTipText(bundle
.getString("client.addressList.removeContact")); // NOI18N
removeContactButton.setPreferredSize(new java.awt.Dimension(28, 28));
removeContactButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeContactButtonActionPerformed(evt);
}
});
importContactButton.setIcon(new javax.swing.ImageIcon(getClass()
.getResource("/org/panbox/desktop/common/gui/addbutton.png"))); // NOI18N
importContactButton.setToolTipText(bundle
.getString("client.addressList.importContact")); // NOI18N
importContactButton.setPreferredSize(new java.awt.Dimension(28, 28));
importContactButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
importContactButtonActionPerformed(evt);
}
});
publishContactButton.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
"/org/panbox/desktop/common/gui/publishbutton.png"))); // NOI18N
publishContactButton.setToolTipText(bundle
.getString("PanboxClientGUI.publishContactButton.toolTipText")); // NOI18N
publishContactButton.setPreferredSize(new java.awt.Dimension(28, 28));
publishContactButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
publishContactButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout addressbookPanelLayout = new javax.swing.GroupLayout(
addressbookPanel);
addressbookPanel.setLayout(addressbookPanelLayout);
addressbookPanelLayout
.setHorizontalGroup(addressbookPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
addressbookPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
addressbookPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
addressbookListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
375,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
addressbookPanelLayout
.createSequentialGroup()
.addGap(0,
0,
Short.MAX_VALUE)
.addComponent(
importContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
removeContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
exportContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
publishContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap()));
addressbookPanelLayout
.setVerticalGroup(addressbookPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
addressbookPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
addressbookListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
594, Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
addressbookPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
exportContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
removeContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
importContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
publishContactButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap()));
exportContactButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.addressList.exportContact")); // NOI18N
removeContactButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.addressList.removeContact")); // NOI18N
importContactButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.addressList.importContact")); // NOI18N
addressbookTabPanel.add(addressbookPanel);
contactPropertiesLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
contactPropertiesLabel.setText(bundle
.getString("client.addressList.properties")); // NOI18N
firstNameLabel
.setText(bundle.getString("client.addressList.firstName")); // NOI18N
removeCSPInfoButton
.setIcon(new javax.swing.ImageIcon(getClass().getResource(
"/org/panbox/desktop/common/gui/removebutton.png"))); // NOI18N
removeCSPInfoButton.setToolTipText(bundle
.getString("client.addressList.cspRemoveAccount")); // NOI18N
removeCSPInfoButton.setEnabled(false);
removeCSPInfoButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeCSPInfoButtonActionPerformed(evt);
}
});
addCSPInfoButton.setIcon(new javax.swing.ImageIcon(getClass()
.getResource("/org/panbox/desktop/common/gui/addbutton.png"))); // NOI18N
addCSPInfoButton.setToolTipText(bundle
.getString("client.addressList.cspAddAccount")); // NOI18N
addCSPInfoButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addCSPInfoButtonActionPerformed(evt);
}
});
lastNameLabel.setText(bundle.getString("client.addressList.lastName")); // NOI18N
emailLabel.setText(bundle.getString("client.addressList.email")); // NOI18N
cspAccountsLabel.setText(bundle
.getString("client.addressList.cspAccounts")); // NOI18N
emailTextField.setEditable(false);
cspInfoTable.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "Cloud Storage Provider", "Useraccount" }));
cspInfoTable.setRowHeight(20);
cspInfoTableScrollPanel.setViewportView(cspInfoTable);
encKeyFprintLabel.setText(bundle
.getString("client.addressList.fprintEnc")); // NOI18N
encKeyFprintTextField.setEnabled(false);
encKeyFprintTextField.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 9));
signKeyFprintLabel.setText(bundle
.getString("client.addressList.fprintSign")); // NOI18N
signKeyFprintTextField.setEnabled(false);
signKeyFprintTextField
.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 9));
validFromUntilLabel.setText("null");
javax.swing.GroupLayout expertModeContactPanelLayout = new javax.swing.GroupLayout(
expertModeContactPanel);
expertModeContactPanel.setLayout(expertModeContactPanelLayout);
expertModeContactPanelLayout
.setHorizontalGroup(expertModeContactPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(validFromUntilLabel,
javax.swing.GroupLayout.DEFAULT_SIZE, 375,
Short.MAX_VALUE)
.addComponent(signKeyFprintLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(encKeyFprintLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
expertModeContactPanelLayout
.createSequentialGroup()
.addGap(12, 12, 12)
.addGroup(
expertModeContactPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
encKeyFprintTextField)
.addComponent(
signKeyFprintTextField))));
expertModeContactPanelLayout
.setVerticalGroup(expertModeContactPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
expertModeContactPanelLayout
.createSequentialGroup()
.addContainerGap(
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(encKeyFprintLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
encKeyFprintTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(signKeyFprintLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
signKeyFprintTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(validFromUntilLabel)));
encKeyFprintLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.fprintEnc")); // NOI18N
signKeyFprintLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.fprintSign")); // NOI18N
contactApplyButton.setText(bundle.getString("client.apply")); // NOI18N
contactApplyButton.setEnabled(false);
contactApplyButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
contactApplyButtonActionPerformed(evt);
}
});
contactDiscardButton.setText(bundle.getString("client.discard")); // NOI18N
contactDiscardButton.setEnabled(false);
contactDiscardButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
contactDiscardButtonActionPerformed(evt);
}
});
contactVerificationStatusCheckBox
.setText(bundle
.getString("PanboxClientGUI.contactVerificationStatusCheckBox.text")); // NOI18N
contactVerificationStatusCheckBox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
contactVerificationStatusCheckBoxActionPerformed(evt);
}
});
javax.swing.GroupLayout contactPropertiesPanellLayout = new javax.swing.GroupLayout(
contactPropertiesPanell);
contactPropertiesPanell.setLayout(contactPropertiesPanellLayout);
contactPropertiesPanellLayout
.setHorizontalGroup(contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
contactPropertiesPanellLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
expertModeContactPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
cspInfoTableScrollPanel)
.addComponent(
lastNameLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
emailLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
firstNameLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
contactPropertiesPanellLayout
.createSequentialGroup()
.addGap(10,
10,
10)
.addGroup(
contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
lastNameTextField)
.addComponent(
emailTextField)
.addComponent(
firstNameTextField)))
.addComponent(
cspAccountsLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
contactPropertiesPanellLayout
.createSequentialGroup()
.addComponent(
contactPropertiesLabel)
.addGap(0,
0,
Short.MAX_VALUE))
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
contactPropertiesPanellLayout
.createSequentialGroup()
.addGap(0,
0,
Short.MAX_VALUE)
.addComponent(
contactDiscardButton)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
contactApplyButton))
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
contactPropertiesPanellLayout
.createSequentialGroup()
.addGap(12,
12,
12)
.addComponent(
contactVerificationStatusCheckBox,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGap(18,
18,
18)
.addComponent(
addCSPInfoButton)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
removeCSPInfoButton)))
.addContainerGap()));
contactPropertiesPanellLayout
.setVerticalGroup(contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
contactPropertiesPanellLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(contactPropertiesLabel)
.addGap(18, 18, 18)
.addComponent(firstNameLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
firstNameTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lastNameLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
lastNameTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(emailLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
emailTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(cspAccountsLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
cspInfoTableScrollPanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
80,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
removeCSPInfoButton)
.addComponent(
addCSPInfoButton)
.addComponent(
contactVerificationStatusCheckBox))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
expertModeContactPanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
contactPropertiesPanellLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
contactApplyButton)
.addComponent(
contactDiscardButton))
.addContainerGap()));
contactPropertiesLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.properties")); // NOI18N
firstNameLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.firstName")); // NOI18N
removeCSPInfoButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.addressList.cspRemoveAccount")); // NOI18N
addCSPInfoButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.addressList.cspAddAccount")); // NOI18N
lastNameLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.lastName")); // NOI18N
emailLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.email")); // NOI18N
cspAccountsLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.addressList.cspAccounts")); // NOI18N
emailTextField.setBackground(Color.WHITE);
contactApplyButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.apply")); // NOI18N
contactDiscardButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.discard")); // NOI18N
addressbookTabPanel.add(contactPropertiesPanell);
mainTabbedPane.addTab(bundle.getString("client.addressList.tabTitle"),
addressbookTabPanel); // NOI18N
devicesTabPanel.setLayout(new java.awt.GridLayout(1, 2, 10, 10));
deviceList.setModel(deviceModel);
deviceList
.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
deviceList.setCellRenderer(new DeviceListCellRenderer());
deviceListScrollPane.setViewportView(deviceList);
addDeviceButton.setIcon(new javax.swing.ImageIcon(getClass()
.getResource("/org/panbox/desktop/common/gui/addbutton.png"))); // NOI18N
addDeviceButton.setToolTipText(bundle
.getString("client.deviceList.addDevice")); // NOI18N
addDeviceButton.setPreferredSize(new java.awt.Dimension(28, 28));
removeDeviceButton
.setIcon(new javax.swing.ImageIcon(getClass().getResource(
"/org/panbox/desktop/common/gui/removebutton.png"))); // NOI18N
removeDeviceButton.setToolTipText(bundle
.getString("client.deviceList.removeDevice")); // NOI18N
removeDeviceButton.setEnabled(false);
removeDeviceButton.setPreferredSize(new java.awt.Dimension(28, 28));
removeDeviceButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeDeviceButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout deviceListPanelLayout = new javax.swing.GroupLayout(
deviceListPanel);
deviceListPanel.setLayout(deviceListPanelLayout);
deviceListPanelLayout
.setHorizontalGroup(deviceListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
deviceListPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
deviceListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
deviceListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
362,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
deviceListPanelLayout
.createSequentialGroup()
.addGap(0,
0,
Short.MAX_VALUE)
.addComponent(
addDeviceButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
removeDeviceButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap()));
deviceListPanelLayout
.setVerticalGroup(deviceListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
deviceListPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
deviceListScrollPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
594, Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
deviceListPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
addDeviceButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
removeDeviceButton,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap()));
addDeviceButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.deviceList.addDevice")); // NOI18N
removeDeviceButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("client.deviceList.removeDevice")); // NOI18N
devicesTabPanel.add(deviceListPanel);
devicePropertiesLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
devicePropertiesLabel.setText(bundle
.getString("client.deviceList.properties")); // NOI18N
deviceKeyFprintLabel.setText(bundle
.getString("client.deviceList.fprintDeviceKey")); // NOI18N
deviceKeyFprintTextField.setEnabled(false);
deviceKeyFprintTextField.setFont(new Font(Font.MONOSPACED, Font.PLAIN,
9));
javax.swing.GroupLayout expertModeDevicePanelLayout = new javax.swing.GroupLayout(
expertModeDevicePanel);
expertModeDevicePanel.setLayout(expertModeDevicePanelLayout);
expertModeDevicePanelLayout
.setHorizontalGroup(expertModeDevicePanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
expertModeDevicePanelLayout
.createSequentialGroup()
.addComponent(deviceKeyFprintLabel)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
expertModeDevicePanelLayout
.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(
deviceKeyFprintTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
359,
javax.swing.GroupLayout.PREFERRED_SIZE)));
expertModeDevicePanelLayout
.setVerticalGroup(expertModeDevicePanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
expertModeDevicePanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(deviceKeyFprintLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
deviceKeyFprintTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)));
deviceKeyFprintLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.deviceList.fprintDeviceKey")); // NOI18N
jLabel1.setText(bundle.getString("client.deviceList.shareList")); // NOI18N
deviceShareList
.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
deviceShareList.setCellRenderer(new ShareListCellRenderer());
usersListScrollPane1.setViewportView(deviceShareList);
javax.swing.GroupLayout devicePropertiesPanelLayout = new javax.swing.GroupLayout(
devicePropertiesPanel);
devicePropertiesPanel.setLayout(devicePropertiesPanelLayout);
devicePropertiesPanelLayout
.setHorizontalGroup(devicePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
devicePropertiesPanelLayout
.createSequentialGroup()
.addGroup(
devicePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
devicePropertiesPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
devicePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
devicePropertiesLabel)
.addComponent(
jLabel1)
.addComponent(
expertModeDevicePanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0,
20,
Short.MAX_VALUE))
.addComponent(
usersListScrollPane1,
javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap()));
devicePropertiesPanelLayout
.setVerticalGroup(devicePropertiesPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
devicePropertiesPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(devicePropertiesLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel1)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
usersListScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE,
150,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
expertModeDevicePanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(299, Short.MAX_VALUE)));
devicePropertiesLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.deviceList.properties")); // NOI18N
jLabel1.getAccessibleContext().setAccessibleName(
bundle.getString("client.deviceList.shareList")); // NOI18N
devicesTabPanel.add(devicePropertiesPanel);
mainTabbedPane.addTab(bundle.getString("client.deviceList.tabTitle"),
devicesTabPanel); // NOI18N
devicesTabPanel.getAccessibleContext().setAccessibleName(
bundle.getString("client.deviceList.tabTitle")); // NOI18N
languageLabel.setText(bundle.getString("client.settings.language")); // NOI18N
languageComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(
SupportedLanguage.values()));
languageComboBox
.setRenderer(new org.panbox.desktop.common.gui.settings.LanguageListCellRenderer());
settingsFolderLabel.setText(bundle
.getString("client.settings.settingsFolder")); // NOI18N
settingsFolderChooseButton.setText(bundle.getString("client.choose")); // NOI18N
settingsFolderChooseButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
settingsFolderChooseButtonActionPerformed(evt);
}
});
panboxFolderLabel.setText(bundle
.getString("client.settings.panboxFolder")); // NOI18N
panboxFolderChooseButton.setText(bundle.getString("client.choose")); // NOI18N
panboxFolderChooseButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
panboxFolderChooseButtonActionPerformed(evt);
}
});
settingsApplyButton.setText(bundle.getString("client.apply")); // NOI18N
settingsApplyButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
settingsApplyButtonActionPerformed(evt);
}
});
settingsRevertButton.setText(bundle.getString("client.discard")); // NOI18N
settingsRevertButton
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
settingsRevertButtonActionPerformed(evt);
}
});
expertModeCheckBox.setText(bundle
.getString("client.settings.expertmode")); // NOI18N
expertModeCheckBox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
expertModeCheckBoxActionPerformed(evt);
}
});
networkDevicePairingPanel
.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle
.getString("client.settings.devicePairing.netSettingsTitle"))); // NOI18N
networkDevicePairingLabel.setText(bundle
.getString("client.settings.devicePairingMessage")); // NOI18N
networkInterfaceLabel.setText(bundle
.getString("client.settings.devicePairing.netInterface")); // NOI18N
networkInterfaceComboBox
.setModel(new javax.swing.DefaultComboBoxModel<Object>(
new Object[] {}));
networkInterfaceComboBox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
networkInterfaceComboBoxActionPerformed(evt);
}
});
networkAddressLabel.setText(bundle
.getString("client.settings.devicePairing.netAddress")); // NOI18N
networkAddressComboBox
.setModel(new javax.swing.DefaultComboBoxModel<Object>(
new Object[] {}));
networkAddressComboBox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
networkAddressComboBoxActionPerformed(evt);
}
});
javax.swing.GroupLayout networkDevicePairingPanelLayout = new javax.swing.GroupLayout(
networkDevicePairingPanel);
networkDevicePairingPanel.setLayout(networkDevicePairingPanelLayout);
networkDevicePairingPanelLayout
.setHorizontalGroup(networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
networkDevicePairingPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
networkDevicePairingPanelLayout
.createSequentialGroup()
.addComponent(
networkDevicePairingLabel)
.addGap(0,
150,
Short.MAX_VALUE))
.addGroup(
networkDevicePairingPanelLayout
.createSequentialGroup()
.addGroup(
networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
networkInterfaceLabel,
javax.swing.GroupLayout.PREFERRED_SIZE,
192,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
networkAddressLabel))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
networkInterfaceComboBox,
0,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
networkAddressComboBox,
0,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))))
.addContainerGap()));
networkDevicePairingPanelLayout
.setVerticalGroup(networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
networkDevicePairingPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(networkDevicePairingLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
networkInterfaceLabel)
.addComponent(
networkInterfaceComboBox,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
networkDevicePairingPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
networkAddressLabel)
.addComponent(
networkAddressComboBox,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)));
cspSettingsPanel.setBorder(javax.swing.BorderFactory
.createTitledBorder(bundle
.getString("PanboxClientGUI.cspSettingsPanel.title"))); // NOI18N
cspSettingsPanel.setMaximumSize(new java.awt.Dimension(694, 32767));
selectedCSPLabel.setText(bundle
.getString("PanboxClientGUI.selectedCSPLabel.text")); // NOI18N
cspSelectionComboBox.setModel(generateCSPSelectionModel());
cspSelectionComboBox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cspSelectionComboBoxActionPerformed(evt);
}
});
selectedCSPContentPanel.setBorder(javax.swing.BorderFactory
.createEmptyBorder(1, 1, 1, 1));
selectedCSPContentPanel.setAutoscrolls(true);
selectedCSPContentPanel.setLayout(new java.awt.GridLayout(0, 1));
javax.swing.GroupLayout cspSettingsPanelLayout = new javax.swing.GroupLayout(
cspSettingsPanel);
cspSettingsPanel.setLayout(cspSettingsPanelLayout);
cspSettingsPanelLayout
.setHorizontalGroup(cspSettingsPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
cspSettingsPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
cspSettingsPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
selectedCSPContentPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
cspSettingsPanelLayout
.createSequentialGroup()
.addComponent(
selectedCSPLabel)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
cspSelectionComboBox,
javax.swing.GroupLayout.PREFERRED_SIZE,
535,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap()));
cspSettingsPanelLayout
.setVerticalGroup(cspSettingsPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
cspSettingsPanelLayout
.createSequentialGroup()
.addGroup(
cspSettingsPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
selectedCSPLabel)
.addComponent(
cspSelectionComboBox,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
selectedCSPContentPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)));
uriHandlerCheckbox.setText(bundle
.getString("PanboxClientGUI.uriHandlerCheckbox.text")); // NOI18N
uriHandlerCheckbox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
uriHandlerCheckboxActionPerformed(evt);
}
});
mailtoSchemeCheckbox.setText(bundle
.getString("PanboxClientGUI.mailtoSchemeCheckbox.text")); // NOI18N
mailtoSchemeCheckbox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mailtoSchemeCheckboxActionPerformed(evt);
}
});
clipboardHandlerCheckbox.setText(bundle
.getString("PanboxClientGUI.clipboardHandlerCheckbox.text")); // NOI18N
clipboardHandlerCheckbox
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clipboardHandlerCheckboxActionPerformed(evt);
}
});
javax.swing.GroupLayout settingsTabPanelLayout = new javax.swing.GroupLayout(
settingsTabPanel);
settingsTabPanel.setLayout(settingsTabPanelLayout);
settingsTabPanelLayout
.setHorizontalGroup(settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
settingsTabPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(
networkDevicePairingPanel,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.LEADING,
settingsTabPanelLayout
.createSequentialGroup()
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
false)
.addComponent(
panboxFolderLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
settingsFolderLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
200,
Short.MAX_VALUE)
.addComponent(
languageLabel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
languageComboBox,
0,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
settingsTabPanelLayout
.createSequentialGroup()
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(
panboxFolderTextField,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
457,
Short.MAX_VALUE)
.addComponent(
settingsFolderTextField))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING,
false)
.addComponent(
settingsFolderChooseButton,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
panboxFolderChooseButton,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)))
.addGroup(
settingsTabPanelLayout
.createSequentialGroup()
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
expertModeCheckBox)
.addComponent(
mailtoSchemeCheckbox))
.addGap(90,
90,
90)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
clipboardHandlerCheckbox)
.addComponent(
uriHandlerCheckbox))
.addGap(0,
0,
Short.MAX_VALUE))))
.addGroup(
settingsTabPanelLayout
.createSequentialGroup()
.addGap(0,
0,
Short.MAX_VALUE)
.addComponent(
settingsRevertButton)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
settingsApplyButton))
.addComponent(
cspSettingsPanel,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addContainerGap()));
settingsTabPanelLayout
.setVerticalGroup(settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
settingsTabPanelLayout
.createSequentialGroup()
.addContainerGap()
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
languageLabel)
.addComponent(
languageComboBox,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
settingsFolderLabel)
.addComponent(
settingsFolderTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
settingsFolderChooseButton))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
panboxFolderLabel)
.addComponent(
panboxFolderTextField,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(
panboxFolderChooseButton))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
expertModeCheckBox)
.addComponent(
uriHandlerCheckbox))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
mailtoSchemeCheckbox)
.addComponent(
clipboardHandlerCheckbox))
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
networkDevicePairingPanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
cspSettingsPanel,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED,
158, Short.MAX_VALUE)
.addGroup(
settingsTabPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
settingsApplyButton)
.addComponent(
settingsRevertButton))
.addContainerGap()));
languageLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.settings.language")); // NOI18N
settingsFolderLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.settings.settingsFolder")); // NOI18N
settingsFolderChooseButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.choose")); // NOI18N
panboxFolderLabel.getAccessibleContext().setAccessibleName(
bundle.getString("client.settings.panboxFolder")); // NOI18N
panboxFolderChooseButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.choose")); // NOI18N
settingsApplyButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.apply")); // NOI18N
settingsRevertButton.getAccessibleContext().setAccessibleName(
bundle.getString("client.discard")); // NOI18N
expertModeCheckBox.getAccessibleContext().setAccessibleName(
bundle.getString("client.settings.expertmode")); // NOI18N
mainTabbedPane.addTab(bundle.getString("client.settings.tabTitle"),
settingsTabPanel); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup()
.addContainerGap()
.addComponent(mainTabbedPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE).addContainerGap()));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup()
.addContainerGap()
.addComponent(mainTabbedPane,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE).addContainerGap()));
mainTabbedPane
.getAccessibleContext()
.setAccessibleName(
bundle.getString("PanboxClientGUI.mainTabbedPane.AccessibleContext.accessibleName")); // NOI18N
pack();
setLocationRelativeTo(null);
}// </editor-fold>//GEN-END:initComponents
protected void removeDeviceButtonActionPerformed(ActionEvent evt) {
int index = deviceList.getSelectedIndex();
if (index != -1) {
PanboxDevice selDevice = client.getDeviceList().get(
deviceList.getSelectedIndex());
ShareListModel connectedShares = client.getDeviceShares(selDevice);
if (connectedShares.getSize() > 0) {
// We still know shares for that the device has been added!
String shareText = "";
for (int i = 0; i < connectedShares.getSize(); ++i) {
shareText += ("- " + connectedShares.get(i).getName() + "<br>");
}
String message = MessageFormat
.format(bundle
.getString("client.deviceList.removeDevice.shareExistsMsg"),
shareText, selDevice.getDeviceName());
int okResult = JOptionPane
.showConfirmDialog(
this,
message,
bundle.getString("client.deviceList.removeDevice.reallyTitle"),
JOptionPane.WARNING_MESSAGE);
if (okResult == JOptionPane.OK_OPTION) {
try {
// TODO: Also remove device from connected known shares
client.deviceManager.removeDevice(selDevice);
client.refreshDeviceListModel();
} catch (DeviceManagerException e) {
logger.error("RemoveDevice : Operation failed.", e);
}
} else {
logger.debug("RemoveDevice : Operation cancled.");
}
} else {
// No shares are known for this device. So removing should not
// be a problem!
String message = MessageFormat
.format(bundle
.getString("client.deviceList.removeDevice.shareNotExistsMsg"),
selDevice.getDeviceName());
int okResult = JOptionPane
.showConfirmDialog(
this,
message,
bundle.getString("client.deviceList.removeDevice.reallyTitle"),
JOptionPane.WARNING_MESSAGE);
if (okResult == JOptionPane.OK_OPTION) {
try {
client.deviceManager.removeDevice(selDevice);
client.refreshDeviceListModel();
} catch (DeviceManagerException e) {
logger.error("RemoveDevice : Operation failed.", e);
}
} else {
logger.debug("RemoveDevice : Operation cancled.");
}
}
checkIfRemoveDeviceShouldBeEnabled();
} else {
logger.error(PanboxClientGUI.class.getName()
+ " : Remove device was called even if it should not be possible");
}
}
private void shareListMouseClicked(java.awt.event.MouseEvent evt) {// GEN-FIRST:event_shareListMouseClicked
if (evt.getClickCount() == 2) {
int index = shareList.locationToIndex(evt.getPoint());
PanboxShare share = shareModel.getElementAt(index);
client.openShareFolder(share.getName());
}
}// GEN-LAST:event_shareListMouseClicked
private void uriHandlerCheckboxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_uriHandlerCheckboxActionPerformed
clipboardHandlerCheckbox.setEnabled(uriHandlerCheckbox.isSelected());
setSettingsChangesDetected();
}// GEN-LAST:event_uriHandlerCheckboxActionPerformed
private void mailtoSchemeCheckboxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_mailtoSchemeCheckboxActionPerformed
setSettingsChangesDetected();
}// GEN-LAST:event_mailtoSchemeCheckboxActionPerformed
private void clipboardHandlerCheckboxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_clipboardHandlerCheckboxActionPerformed
setSettingsChangesDetected();
}// GEN-LAST:event_clipboardHandlerCheckboxActionPerformed
private void cspSelectionComboBoxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cspSelectionComboBoxActionPerformed
String sel = (String) cspSelectionComboBox.getSelectedItem();
StorageBackendType t = StorageBackendType.fromDisplayName(sel);
selectedCSPContentPanel.removeAll();
if (t == StorageBackendType.DROPBOX) {
selectedCSPContentPanel.add(dropboxSettingsPanel);
}
revalidate();
}// GEN-LAST:event_cspSelectionComboBoxActionPerformed
private void publishContactButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_publishContactButtonActionPerformed
PublishIdentitiesWoPINDialog d = new PublishIdentitiesWoPINDialog(
client, contacts);
d.setLocationRelativeTo(this);
d.setVisible(true);
}// GEN-LAST:event_publishContactButtonActionPerformed
private void contactVerificationStatusCheckBoxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_contactVerificationStatusCheckBoxActionPerformed
if (contactVerificationStatusCheckBox.isSelected()) {
String message = bundle
.getString("PanboxClientGUI.really.verifiy.contact")
+ "\nFingerprint Enc: "
+ contact.getCertEncFingerprint()
+ "\nFingerprint Sign: " + contact.getCertSignFingerprint();
int reallyTrust = JOptionPane.showConfirmDialog(null, message,
bundle.getString("PanboxClientGUI.panboxMessage"),
JOptionPane.YES_NO_OPTION);
if (reallyTrust == JOptionPane.NO_OPTION) {
contactVerificationStatusCheckBox.setSelected(false);
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
} else {
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
}
} else {
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
}
setContactChangesDetected();
}// GEN-LAST:event_contactVerificationStatusCheckBoxActionPerformed
private void usersListValueChanged(javax.swing.event.ListSelectionEvent evt) {// GEN-FIRST:event_usersListValueChanged
if (!evt.getValueIsAdjusting()) {
// Object selection = usersList.getSelectedValue();
// TODO: Removing devices or contacts is not supported for now
removeDeviceContactShareButton.setEnabled(false);
// removeDeviceContactShareButton
// .setEnabled((selection instanceof DeviceShareParticipant)
// || (selection instanceof ContactShareParticipant
// && shareList.getSelectedValue() != null && ((PanboxShare)
// shareList
// .getSelectedValue()).isOwner()));
}
}// GEN-LAST:event_usersListValueChanged
private void removeDeviceContactShareButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_removeDeviceContactShareButtonActionPerformed
int selected = shareList.getSelectedIndex();
if ((selected != -1)) {
PanboxShare share = shareModel.getElementAt(selected);
ShareParticipantListModel model = (ShareParticipantListModel) usersList
.getModel();
Object o = usersList.getSelectedValue();
if (share != null && o != null) {
if (o instanceof PanboxSharePermission) {
char[] password = PasswordEnterDialog
.invoke(PermissionType.SHARE);
PanboxSharePermission p = (PanboxSharePermission) o;
client.removePermissionFromShare(share, p, password);
model.removeElement(p);
Arrays.fill(password, (char) 0);
}
}
}
}// GEN-LAST:event_removeDeviceContactShareButtonActionPerformed
private void restoreRevButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_restoreRevButtonActionPerformed
PanboxShare share = (PanboxShare) shareList.getSelectedValue();
if (share instanceof DropboxPanboxShare) {
DropboxAdapterFactory dbxFac = (DropboxAdapterFactory) CSPAdapterFactory
.getInstance(StorageBackendType.DROPBOX);
DropboxAPIIntegration dbIntegration = (DropboxAPIIntegration) dbxFac
.getAPIAdapter();
RestoreRevisionDialog restoreRevisionDialog = new RestoreRevisionDialog(
client, dbIntegration, share.getName());
restoreRevisionDialog.setLocationRelativeTo(this);
restoreRevisionDialog.setVisible(true);
}
}// GEN-LAST:event_restoreRevButtonActionPerformed
private void shareListValueChanged(javax.swing.event.ListSelectionEvent evt) {// GEN-FIRST:event_shareListValueChanged
// if (shareList.getSelectedValuesList().size() > 0) {
// removeShare.setEnabled(true);
// if (shareList.getSelectedValuesList().size() == 1) {
// PanboxShare share = (PanboxShare) shareList.getSelectedValue();
// if (share instanceof DropboxPanboxShare) {
// restoreRevButton.setEnabled(true);
// } else {
// restoreRevButton.setEnabled(false);
// }
// } else {
// restoreRevButton.setEnabled(false);
// }
// } else {
// removeShare.setEnabled(false);
// restoreRevButton.setEnabled(false);
// }
}// GEN-LAST:event_shareListValueChanged
private void expertModeCheckBoxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_expertModeCheckBoxActionPerformed
if (expertModeCheckBox.isSelected()) {
expertModeContactPanel.setVisible(true);
expertModeDevicePanel.setVisible(true);
contactVerificationStatusCheckBox.setVisible(true);
} else {
expertModeContactPanel.setVisible(false);
expertModeDevicePanel.setVisible(false);
contactVerificationStatusCheckBox.setVisible(false);
}
}// GEN-LAST:event_expertModeCheckBoxActionPerformed
private void addShareActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_addShareActionPerformed
AddShareDialog addShareDialog = new AddShareDialog(this);
addShareDialog.setLocationRelativeTo(this);
addShareDialog.setVisible(true);
try {
addShare(addShareDialog.getResult());
} catch (OperationAbortedException e) {
// do nothing if operation was aborted
}
}// GEN-LAST:event_addShareActionPerformed
public void addShare(PanboxShare newShare) {
char[] password = null;
try {
password = PasswordEnterDialog.invoke(PermissionType.SHARE);
client.showTrayMessage(bundle.getString("PleaseWait"),
bundle.getString("tray.addShare.message"), MessageType.INFO);
client.addShare(newShare, password);
enableDisableAddDeviceContactForShare();
// Also update share list for selected device
if (device != null) {
deviceShareList.setModel(client.getDeviceShares(device));
}
} finally {
if (password != null) {
Utils.eraseChars(password);
}
}
}
public void refreshDeviceShareList() {
deviceShareList.setModel(client.getDeviceShares(device));
}
public void refreshAddressbookList() {
addressbookList.setModel(client.getContactList());
}
private void removeShareActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_removeShareActionPerformed
JCheckBox checkbox = new JCheckBox(
bundle.getString("client.shareList.removeShareDirectoryMessage"));
String message = bundle
.getString("really.shareList.removeShareMessage");
Object[] params = { message, checkbox };
int reallyRemove = JOptionPane.showConfirmDialog(null, params,
bundle.getString("PanboxClientGUI.panboxMessage"),
JOptionPane.YES_NO_OPTION);
// int reallyRemove =
// JOptionPane.showConfirmDialog(this,
// "You are about to remove a share. Do you really want to continue?",
// "Really remove this share?", JOptionPane.YES_NO_OPTION);
if (reallyRemove == JOptionPane.YES_OPTION) {
PanboxShare share = (PanboxShare) shareList.getSelectedValue();
if (checkbox.isSelected()) {
PleaseWaitDialog d = null;
try {
d = new PleaseWaitDialog(
this,
bundle.getString("PanboxClient.operationInProgress"));
d.setLocationRelativeTo(this);
d.setVisible(true);
FileUtils.deleteDirectoryTree(new File(share.getPath()));
// shareList.setSelectedIndex(--idx);
shareList.setSelectedIndex(-1);
} catch (IOException e) {
logger.error("Failed to remove share source directory!", e);
JOptionPane
.showMessageDialog(
this,
bundle.getString("PanboxClient.deleteShareContentsFailed"),
bundle.getString("error"),
JOptionPane.ERROR_MESSAGE);
} finally {
if (d != null) {
d.dispose();
}
}
}
// remove share from view
client.removeShare(share);
enableDisableAddDeviceContactForShare();
// Also update share list for selected device
if (device != null) {
deviceShareList.setModel(client.getDeviceShares(device));
}
}
}// GEN-LAST:event_removeShareActionPerformed
private void addDeviceContactShareButtonMousePressed(
java.awt.event.MouseEvent evt) {// GEN-FIRST:event_addDeviceContactShareButtonMousePressed
final JFrame thisFrame = this;
JPopupMenu menu = new JPopupMenu();
JMenuItem addDevice = new JMenuItem(
bundle.getString("shareUserList.device"));
addDevice.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int selected = shareList.getSelectedIndex();
PanboxShare share = shareModel.getElementAt(selected);
if (share instanceof DropboxPanboxShare) {
DropboxAdapterFactory dbxFac = (DropboxAdapterFactory) CSPAdapterFactory
.getInstance(StorageBackendType.DROPBOX);
DropboxAPIIntegration api = (DropboxAPIIntegration) dbxFac
.getAPIAdapter();
DropboxClientIntegration c = (DropboxClientIntegration) dbxFac
.getClientAdapter();
if (!c.isClientRunning()) {
int ret = JOptionPane.showConfirmDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.dropboxNotRunningError"),
bundle.getString("client.warn"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.NO_OPTION) {
return;
}
}
if (!api.isOnline()) {
int ret = JOptionPane.showConfirmDialog(client
.getMainWindow(), bundle
.getString("PanboxClientGUI.offlineError"),
bundle.getString("client.warn"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.NO_OPTION) {
return;
}
}
}
if (share != null) {
AddDeviceToShareDialog dialog = new AddDeviceToShareDialog(
thisFrame, deviceModel, share.getDevices());
dialog.setVisible(true);
List<PanboxDevice> result = dialog.getResult();
if (result.isEmpty()) {
logger.debug("PanboxClientGUI : addDevice.addActionListener : Operation aborted!");
return;
}
char[] password = PasswordEnterDialog
.invoke(PermissionType.DEVICE);
PanboxShare sharenew = null;
try {
client.showTrayMessage(
bundle.getString("PleaseWait"),
bundle.getString("tray.addDeviceToShare.waitMessage"),
MessageType.INFO);
client.getShareWatchService().removeShare(share);
for (PanboxDevice dev : result) {
DeviceShareParticipant dp = new DeviceShareParticipant(
dev);
sharenew = client.addPermissionToShare(share,
dp, password);
((ShareParticipantListModel) usersList
.getModel()).addElement(dp);
}
if (sharenew != null) {
shareModel.setElementAt(sharenew, selected);
}
client.showTrayMessage(
bundle.getString("tray.addDeviceToShare.finishTitle"),
bundle.getString("tray.addDeviceToShare.finishMessage"),
MessageType.INFO);
} catch (ShareDoesNotExistException e1) {
logger.error("Share not found!", e1);
JOptionPane.showMessageDialog(client
.getMainWindow(), bundle
.getString("PanboxClient.shareNotFound"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (ShareManagerException e1) {
logger.error("Could not add device to share!", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.errorWhileAddingDeviceToShare"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (UnrecoverableKeyException e1) {
logger.error("Unable to recover key!", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClient.unableToRecoverKeys"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (ShareMetaDataException e1) {
logger.error("Error in share metadata", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.errorWhileAccessingShareMetadata"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
Utils.eraseChars(password);
PanboxShare tmp = (sharenew != null) ? sharenew
: share;
client.getShareWatchService().registerShare(tmp);
// Also update share list for selected device
if (device != null) {
deviceShareList.setModel(client
.getDeviceShares(device));
}
}
}
} catch (OperationAbortedException ex) {
System.out.println("Operation aborted!");
}
}
});
JMenuItem addContact = new JMenuItem(
bundle.getString("shareUserList.contact"));
addContact.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// check if user is share owner
int selected = shareList.getSelectedIndex();
if ((selected != -1)
&& shareModel.getElementAt(selected).isOwner()) {
boolean hasParticipants = (share.getContacts().size() != 0);
PanboxShare share = shareModel.getElementAt(selected);
if (share instanceof DropboxPanboxShare) {
DropboxAdapterFactory dbxFac = (DropboxAdapterFactory) CSPAdapterFactory
.getInstance(StorageBackendType.DROPBOX);
DropboxAPIIntegration api = (DropboxAPIIntegration) dbxFac
.getAPIAdapter();
DropboxClientIntegration c = (DropboxClientIntegration) dbxFac
.getClientAdapter();
if (!c.isClientRunning()) {
int ret = JOptionPane.showConfirmDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.dropboxNotRunningError"),
bundle.getString("client.warn"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.NO_OPTION) {
return;
}
}
if (!api.isOnline()) {
int ret = JOptionPane.showConfirmDialog(client
.getMainWindow(), bundle
.getString("PanboxClientGUI.offlineError"),
bundle.getString("client.warn"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.NO_OPTION) {
return;
}
}
}
// AddContactToShareWizard contactWizard;
// try {
// contactWizard = new AddContactToShareWizard(thisFrame,
// client, share, contactModel);
// } catch (Exception e2) {
// e2.printStackTrace();
// return;
// }
//
// contactWizard.setVisible(true);
AddContactToShareDialog dialog = new AddContactToShareDialog(
thisFrame, contactModel, share.getContacts());
dialog.setVisible(true);
List<PanboxGUIContact> result;
try {
result = dialog.getResult();
} catch (OperationAbortedException e2) {
logger.debug("PanboxClientGUI : addContact.addActionListener : Operation aborted!");
return;
}
if (result.isEmpty()) {
logger.debug("PanboxClientGUI : addContact.addActionListener : Operation aborted!");
return;
}
char[] password = PasswordEnterDialog
.invoke(PermissionType.USER);
PanboxShare sharenew = null;
try {
client.showTrayMessage(
bundle.getString("PleaseWait"),
bundle.getString("tray.addContactToShare.waitMessage"),
MessageType.INFO);
ArrayList<PanboxGUIContact> reallyAdded = new ArrayList<PanboxGUIContact>();
client.getShareWatchService().removeShare(share);
for (int i = 0; i < result.size(); i++) {
// add permission for user
ContactShareParticipant cp = new ContactShareParticipant(
result.get(i));
if (Settings.getInstance().getExpertMode()
&& !cp.getContact().isVerified()) {
int res = JOptionPane.showConfirmDialog(
client.getMainWindow(),
MessageFormat.format(
bundle.getString("PanboxClientGUI.addUnverifiedContactWarning.text"),
cp.getName()),
bundle.getString("PanboxClientGUI.addUnverifiedContactWarning.title"),
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (res == JOptionPane.YES_OPTION) {
sharenew = client.addPermissionToShare(
share, cp, password);
logger.info("Added unverified contact "
+ cp.getName() + " to share.");
reallyAdded.add(result.get(i));
((ShareParticipantListModel) usersList
.getModel()).addElement(cp);
} else if (res == JOptionPane.NO_OPTION) {
logger.info("Skipped adding unverified contact "
+ cp.getName() + " to share.");
continue;
}
} else {
sharenew = client.addPermissionToShare(share,
cp, password);
reallyAdded.add(result.get(i));
((ShareParticipantListModel) usersList
.getModel()).addElement(cp);
}
}
if (reallyAdded.size() > 0) {
shareModel.setElementAt(sharenew, selected);
handleCSPShareParticipantConfiguration(sharenew,
hasParticipants, reallyAdded);
}
client.showTrayMessage(
bundle.getString("tray.addContactToShare.finishTitle"),
bundle.getString("tray.addContactToShare.finishMessage"),
MessageType.INFO);
} catch (ShareDoesNotExistException e1) {
logger.error("Share not found!", e1);
JOptionPane.showMessageDialog(client.getMainWindow(),
bundle.getString("PanboxClient.shareNotFound"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (ShareManagerException e1) {
logger.error("Could not add contact to share!", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.errorWhileAddingContactToShare"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (UnrecoverableKeyException e1) {
logger.error("Unable to recover key!", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClient.unableToRecoverKeys"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (ShareMetaDataException e1) {
logger.error("Error in share metadata", e1);
JOptionPane.showMessageDialog(
client.getMainWindow(),
bundle.getString("PanboxClientGUI.errorWhileAccessingShareMetadata"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
Utils.eraseChars(password);
PanboxShare tmp = (sharenew != null) ? sharenew : share;
client.getShareWatchService().registerShare(tmp);
}
}
}
});
menu.add(addDevice);
menu.add(addContact);
menu.show(addDeviceContactShareButton, evt.getX(), evt.getY());
}// GEN-LAST:event_addDeviceContactShareButtonMousePressed
/**
* helper method for handling CSP-side access control configuration, after
* having invited or removed single users from or to a share.
*
* @param share
* share for whichparticipant list has changed
* @param shareHasParticipants
* <code>true</code> if folder has just been shared initially and
* participants have only been added
*/
private void handleCSPShareParticipantConfiguration(PanboxShare share,
boolean shareHasParticipants,
List<PanboxGUIContact> selectedcontacts) {
if (share instanceof DropboxPanboxShare) {
DropboxAdapterFactory dbxFac = (DropboxAdapterFactory) CSPAdapterFactory
.getInstance(StorageBackendType.DROPBOX);
DropboxAPIIntegration dbIntegration = (DropboxAPIIntegration) dbxFac
.getAPIAdapter();
// before we continue, first check if directory has already been
// synced to csp
String shareid = FilenameUtils.getName(share.getPath());
boolean shareIsOnline, shareConfigured = false;
try {
shareIsOnline = ((shareid != null) && (shareid.length() > 0) && dbIntegration
.exists("/" + shareid));
} catch (CSPApiException e) {
logger.error("Could not determine if share with path "
+ share.getPath() + " and shareid: " + shareid
+ " has already been uploaded!");
shareIsOnline = false;
}
if (shareIsOnline) {
String message = bundle
.getString("PanboxClientGUI.openDropboxShareConfig");
JCheckBox copyToClipboard = new JCheckBox(
bundle.getString("PanboxClientGUI.copyEmailToClipboard"));
Object[] params = new Object[] { message, copyToClipboard };
int res = JOptionPane.showConfirmDialog(this, params,
bundle.getString("PanboxClientGUI.openShareConfig"),
JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION) {
if (copyToClipboard.isSelected()) {
String emails = PanboxGUIContact
.getMailAsSepteratedValues(selectedcontacts,
";", StorageBackendType.DROPBOX);
// copy the email of the selected contact into the
// clipboard
DesktopApi.copyToClipboard(emails.toString(), false);
}
try {
if (shareHasParticipants) {
// shows configuration page for shares with existing
// users in case of dropbox
dbIntegration.removeUser(shareid);
} else {
// shows initial setup page for new shares
dbIntegration.inviteUser(shareid);
}
shareConfigured = true;
} catch (Exception e) {
logger.error(
"handleCSPShareParticipantConfiguration: Error opening share configuration",
e);
JOptionPane
.showMessageDialog(
this,
bundle.getString("PanboxClientGUI.errorOpeningShareConfig"),
bundle.getString("error"),
JOptionPane.ERROR_MESSAGE);
}
}
} else {
// JOptionPane
// .showMessageDialog(
// this,
// bundle.getString("PublishIdentitiesDialog.fileNotFoundInCloudStorage"),
// bundle.getString("PublishIdentitiesDialog.fileNotFound"),
// JOptionPane.WARNING_MESSAGE);
}
if (Settings.getInstance().isMailtoSchemeSupported()) {
// now, offer to send panbox share invitation link
String message;
if (shareConfigured) {
message = bundle
.getString("PanboxClientGUI.sendInvitationLink.message");
} else {
if (shareIsOnline) {
message = bundle
.getString("PanboxClientGUI.sendInvitationLinkNotConfigured.message");
} else {
message = bundle
.getString("PanboxClientGUI.sendInvitationLinkNoSync.message");
}
}
int ret = JOptionPane.showConfirmDialog(this, message, bundle
.getString("PanboxClientGUI.InvitationLink.title"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.YES_OPTION) {
String emails = PanboxGUIContact.getMailAsSepteratedValues(
selectedcontacts, ",", StorageBackendType.DROPBOX);
String mailto = "mailto:"
+ emails
+ "?subject="
+ bundle.getString("client.mailTo.shareInvitationSubject")
+ "&body="
+ PanboxURICmdShareInvitation.getPanboxLink(share
.getUuid().toString(), share.getType()
.name());
DesktopApi.browse(URI.create(mailto));
}
} else {
// offer to copy panbox share invitation link to
// clipboard
String message;
if (shareConfigured) {
message = bundle
.getString("PanboxClientGUI.copyInvitationLink.message");
} else {
if (shareIsOnline) {
message = bundle
.getString("PanboxClientGUI.copyInvitationLinkNotConfigured.message");
} else {
message = bundle
.getString("PanboxClientGUI.copyInvitationLinkNoSync.message");
}
}
int ret = JOptionPane.showConfirmDialog(this, message, bundle
.getString("PanboxClientGUI.InvitationLink.title"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.YES_OPTION) {
URI uri = PanboxURICmdShareInvitation.getPanboxLink(share
.getUuid().toString(), share.getType().name());
DesktopApi.copyToClipboard(uri.toASCIIString(), true);
JOptionPane
.showMessageDialog(
this,
bundle.getString("PanboxClientGUI.copyInvitationLink.info")
+ "\n" + uri.toASCIIString(),
bundle.getString("PanboxClientGUI.InvitationLink.title"),
JOptionPane.INFORMATION_MESSAGE);
}
}
} else {
logger.warn("handleCSPShareParticipantConfiguration: Unknown share type!");
}
}
// TODO: This feature is not supported for now!
// private void removeDeviceContactShareButtonMousePressed(
// java.awt.event.MouseEvent evt) {//
// GEN-FIRST:event_removeDeviceContactShareButtonMousePressed
// final JFrame thisFrame = this;
// int selected = shareList.getSelectedIndex();
// if ((selected != -1)) {
// PanboxShare share = shareModel.getElementAt(selected);
// ShareParticipantListModel model = (ShareParticipantListModel) usersList
// .getModel();
// Object o = usersList.getSelectedValue();
// if (share != null && o != null) {
// if (o instanceof PanboxSharePermission) {
// char[] password = PasswordEnterDialog
// .invoke(PermissionType.SHARE);
// PanboxSharePermission p = (PanboxSharePermission) o;
// client.removePermissionFromShare(share, p, password);
// model.removeElement(p);
// Arrays.fill(password, (char) 0);
// }
// }
// }
// }// GEN-LAST:event_removeDeviceContactShareButtonMousePressed
private void importContactButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_importContactButtonActionPerformed
ImportIdentitiesWoPINDialog d = new ImportIdentitiesWoPINDialog(client);
d.setLocationRelativeTo(this);
d.setVisible(true);
}// GEN-LAST:event_importContactButtonActionPerformed
private void removeContactButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_removeContactButtonActionPerformed
// when mycontact is selcted, remove button should be disabled. just to
// be sure
int res = JOptionPane.showConfirmDialog(this, bundle
.getString("PanboxClientGUI.reallyRemoveSelectedContacts"),
bundle.getString("PanboxClientGUI.removeContacts"),
JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION) {
if (!(addressbookList.isSelectionEmpty())) {
for (PanboxGUIContact c : contacts) {
if (!(c instanceof PanboxMyContact)) {
client.removeContact(c);
}
}
}
}
}// GEN-LAST:event_removeContactButtonActionPerformed
private void exportContactButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_exportContactButtonActionPerformed
ExportIdentitiesWoPINDialog exportDialog = new ExportIdentitiesWoPINDialog(
client, contacts);
exportDialog.setLocationRelativeTo(this);
exportDialog.setVisible(true);
}// GEN-LAST:event_exportContactButtonActionPerformed
private void addCSPInfoButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_addCSPInfoButtonActionPerformed
CSPTableModel model = (CSPTableModel) cspInfoTable.getModel();
if (!uneditedCSPsExist()) {
ArrayList<String> usedProviders = new ArrayList<>();
for (int i = 0; i < model.getRowCount(); i++) {
usedProviders.add((String) model.getValueAt(i, 0));
}
cspInfoTable.getColumnModel().getColumn(0)
.setCellEditor(new CSPTableCellEditor(usedProviders));
model.addRow(new String[2]);
cspInfoTable.editCellAt(model.getRowCount() - 1, 0); // select added
// row first
// cell
if (addedCSPCount > 0) {
model.maxPlus();
}
addedCSPCount++;
setContactChangesDetected();
}
}// GEN-LAST:event_addCSPInfoButtonActionPerformed
private boolean uneditedCSPsExist() {
if (cspInfoTable.getModel() instanceof CSPTableModel) {
CSPTableModel model = (CSPTableModel) cspInfoTable.getModel();
if (model.getRowCount() > 0
&& (model.getValueAt(model.getRowCount() - 1, 1) == null || model
.getValueAt(model.getRowCount() - 1, 1).equals(""))) {
JOptionPane.showConfirmDialog(null,
bundle.getString("PanboxClientGUI.lastCSPNotFinished"),
bundle.getString("PanboxClientGUI.panboxMessage"),
JOptionPane.DEFAULT_OPTION);
return true;
} else {
return false;
}
} else {
return false;
}
}
private void removeCSPInfoButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_removeCSPInfoButtonActionPerformed
int[] selectedRows = cspInfoTable.getSelectedRows();
ArrayUtils.reverse(selectedRows);
for (int selectedRow : selectedRows) {
String cspName = cspInfoTable.getModel().getValueAt(selectedRow, 0)
.toString();
removedCSPs.add(contact.getCloudProvider(cspName));
CSPTableModel model = (CSPTableModel) cspInfoTable.getModel();
model.removeRow(selectedRow);
model.maxMinus();
}
setContactChangesDetected();
}// GEN-LAST:event_removeCSPInfoButtonActionPerformed
private void contactDiscardButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_contactDiscardButtonActionPerformed
refreshContact();
resetContactApplyDiscardButtons();
}// GEN-LAST:event_contactDiscardButtonActionPerformed
private void contactApplyButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_contactApplyButtonActionPerformed
if (!uneditedCSPsExist()) {
saveContactChanges();
refreshContact();
resetContactApplyDiscardButtons();
addressbookList.requestFocus(); // this fixes the contact refresh
// bug somehow
}
}// GEN-LAST:event_contactApplyButtonActionPerformed
private void setContactChangesDetected() {
contactApplyButton.setEnabled(true);
contactDiscardButton.setEnabled(true);
unsavedContactChanges = true;
}
private void resetContactApplyDiscardButtons() {
contactApplyButton.setEnabled(false);
contactDiscardButton.setEnabled(false);
unsavedContactChanges = false;
removedCSPs.clear();
addedCSPCount = 0;
}
private void refreshContact() {
firstNameTextField.setText(contact.getFirstName());
lastNameTextField.setText(contact.getName());
cspInfoTable.setModel(contact.generateCspInfoTableModel());
if (contact.getAvailableCSPs() > 0) {
addCSPInfoButton.setEnabled(true);
} else {
addCSPInfoButton.setEnabled(false);
}
if (contact.isVerified()) {
contactVerificationStatusCheckBox.setSelected(true);
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
} else {
contactVerificationStatusCheckBox.setSelected(false);
contactVerificationStatusCheckBox.setText(bundle
.getString("PanboxClientGUI.contact.verified"));
}
}
private void saveContactChanges() {
DefaultTableModel model = (DefaultTableModel) cspInfoTable.getModel();
for (CloudProviderInfo csp : removedCSPs) {
contact.removeCloudProvider(csp.getProviderName());
}
ArrayList<CloudProviderInfo> addedCSPs = new ArrayList<>();
for (int i = 0; i < addedCSPCount; i++) {
String providerName = (String) model.getValueAt(model.getRowCount()
- addedCSPCount + i, 0);
String username = (String) model.getValueAt(model.getRowCount()
- addedCSPCount + i, 1);
CloudProviderInfo cpi = new CloudProviderInfo(providerName,
username);
addedCSPs.add(cpi);
contact.addCloudProvider(cpi);
}
if (contact instanceof PanboxMyContact) {
client.saveMyContact(removedCSPs, addedCSPs);
} else {
String newFirstName = firstNameTextField.getText();
String newName = lastNameTextField.getText();
// contact.setFirstName(newFirstName);
// contact.setName(newName);
client.saveContact(contact, newFirstName, newName, removedCSPs,
addedCSPs, contactVerificationStatusCheckBox.isSelected());
}
}
private void setSettingsChangesDetected() {
settingsApplyButton.setEnabled(true);
settingsRevertButton.setEnabled(true);
}
private void resetSettingsApplyDiscardButtons() {
settingsApplyButton.setEnabled(false);
settingsRevertButton.setEnabled(false);
}
private void settingsFolderChooseButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_settingsFolderChooseButtonActionPerformed
JFileChooser settingsFolderChooser = new JFileChooser();
settingsFolderChooser
.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = settingsFolderChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = settingsFolderChooser.getSelectedFile();
settingsFolderTextField.setText(file.getAbsolutePath());
}
}// GEN-LAST:event_settingsFolderChooseButtonActionPerformed
private void panboxFolderChooseButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_panboxFolderChooseButtonActionPerformed
JFileChooser panboxFolderChooser = new JFileChooser();
panboxFolderChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = panboxFolderChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = panboxFolderChooser.getSelectedFile();
panboxFolderTextField.setText(file.getAbsolutePath());
}
}// GEN-LAST:event_panboxFolderChooseButtonActionPerformed
private void settingsRevertButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_settingsRevertButtonActionPerformed
initSettingsConfig();
dropboxSettingsPanel.refresh();
resetSettingsApplyDiscardButtons();
}// GEN-LAST:event_settingsRevertButtonActionPerformed
private void settingsApplyButtonActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_settingsApplyButtonActionPerformed
Settings s = Settings.getInstance();
boolean restartRequired = false;
String selLang = ((SupportedLanguage) languageComboBox
.getSelectedItem()).getShorthand();
if (!selLang.equals(s.getLanguage())) {
s.setLanguage(selLang);
// client.restartTrayIcon();
restartRequired = true;
}
if (!(expertModeCheckBox.isSelected() == s.getExpertMode())) {
s.setExpertMode(expertModeCheckBox.isSelected());
}
if (!(uriHandlerCheckbox.isSelected() == s.isUriHandlerSupported())) {
s.setUriHandlerSupported(uriHandlerCheckbox.isSelected());
restartRequired = true;
}
if (uriHandlerCheckbox.isSelected()
&& !(clipboardHandlerCheckbox.isSelected() == s
.isClipboardHandlerSupported())) {
s.setClipboardHandlerSupported(clipboardHandlerCheckbox
.isSelected());
restartRequired = true;
}
if (!(mailtoSchemeCheckbox.isSelected() == s.isMailtoSchemeSupported())) {
s.setMailtoSchemeSupported(mailtoSchemeCheckbox.isSelected());
restartRequired = true;
}
File newConfDir = new File(settingsFolderTextField.getText());
File oldConfDir = new File(s.getConfDir());
if (!FilenameUtils.equalsNormalizedOnSystem(
newConfDir.getAbsolutePath(), oldConfDir.getAbsolutePath())) {
if (newConfDir.exists()) {
s.setConfDir(FilenameUtils.normalizeNoEndSeparator(newConfDir
.getAbsolutePath()));
client.settingsFolderChanged(newConfDir);
} else {
JOptionPane.showMessageDialog(this, bundle
.getString("client.settings.panboxConfDirNotExisting"));
settingsFolderTextField.setText(s.getConfDir());
}
}
// If this is not true currently no IP-Address is available. So use the
// current one.
if (networkAddressComboBox.getModel().getSelectedItem() instanceof InetAddress) {
InetAddress address = (InetAddress) networkAddressComboBox
.getModel().getSelectedItem();
s.setPairingAddress(address);
}
// save csp specific settings
if (selectedCSPContentPanel.getComponentCount() > 0) {
Component c = selectedCSPContentPanel.getComponent(0);
if ((c != null) && (c instanceof Flushable)) {
try {
((Flushable) c).flush();
} catch (IOException e) {
logger.error("Error flushing csp settings config panel!", e);
}
} else {
logger.error("Invalid csp content panel content!");
}
}
String newPath = panboxFolderTextField.getText();
String oldPath = s.getMountDir();
if (!FilenameUtils.equalsNormalizedOnSystem(newPath, oldPath)) {
s.setMountDir(newPath);
// client.panboxFolderChanged(newPath);
restartRequired = true;
}
if (restartRequired) {
int ret = JOptionPane.showConfirmDialog(this,
bundle.getString("PanboxClientGUI.restartMessage"),
bundle.getString("PanboxClientGUI.restartMessage.title"),
JOptionPane.YES_NO_OPTION);
try {
if (ret == JOptionPane.YES_OPTION) {
client.restartApplication();
}
} catch (IOException e) {
logger.error("Error while restarting the appication!", e);
JOptionPane.showMessageDialog(this,
bundle.getString("PanboxClientGUI.restartError"),
bundle.getString("error"), JOptionPane.ERROR_MESSAGE);
}
}
// reset the buttons
resetSettingsApplyDiscardButtons();
}// GEN-LAST:event_settingsApplyButtonActionPerformed
private void addDeviceButtonMousePressed(java.awt.event.MouseEvent evt) {// GEN-FIRST:event_addDeviceButtonMousePressed
JPopupMenu menu = new JPopupMenu();
JMenuItem bluetooth = new JMenuItem(
bundle.getString("PanboxClientGui.bluetooth"));
bluetooth.addActionListener(new AddDeviceBluetoothActionListener(
client, this));
JMenuItem file = new JMenuItem(bundle.getString("PanboxClientGui.File"));
file.addActionListener(new AddDeviceFileActionListener(client, this));
JMenuItem lan = new JMenuItem(
bundle.getString("PanboxClientGui.lanandwlan"));
lan.addActionListener(new AddDeviceNetworkActionListener(client, this));
menu.add(bluetooth);
menu.add(file);
menu.add(lan);
menu.show(addDeviceButton, evt.getX(), evt.getY());
}// GEN-LAST:event_addDeviceButtonMousePressed
private void networkInterfaceComboBoxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_networkInterfaceComboBoxActionPerformed
NetworkInterface nic = (NetworkInterface) networkInterfaceComboBox
.getModel().getSelectedItem();
networkAddressComboBox.setModel(generateNetworkAddressModel(nic));
}// GEN-LAST:event_networkInterfaceComboBoxActionPerformed
private void networkAddressComboBoxActionPerformed(
java.awt.event.ActionEvent evt) {// GEN-FIRST:event_networkAddressComboBoxActionPerformed
// nothing to do here for now...
}// GEN-LAST:event_networkAddressComboBoxActionPerformed
private void initSettingsConfig() {
Settings s = Settings.getInstance();
settingsFolderTextField.setText(s.getConfDir());
panboxFolderTextField.setText(s.getMountDir());
languageComboBox.setSelectedItem(SupportedLanguage.fromShorthand(s
.getLanguage()));
expertModeCheckBox.setSelected(s.getExpertMode());
uriHandlerCheckbox.setSelected(s.isUriHandlerSupported());
if (uriHandlerCheckbox.isSelected()) {
clipboardHandlerCheckbox.setEnabled(true);
clipboardHandlerCheckbox.setSelected(s
.isClipboardHandlerSupported());
} else {
clipboardHandlerCheckbox.setEnabled(false);
clipboardHandlerCheckbox.setSelected(false);
}
mailtoSchemeCheckbox.setSelected(s.isMailtoSchemeSupported());
if (cspSelectionComboBox.getModel().getSize() > 0) {
// in case dropbox has been found select it by default
selectedCSPContentPanel.removeAll();
selectedCSPContentPanel.add(dropboxSettingsPanel);
}
NetworkInterface nic;
try {
if (s.getPairingAddress() == null) {
// no network interface found!
DefaultComboBoxModel<Object> noNicModel = new DefaultComboBoxModel<>();
noNicModel.addElement(bundle
.getString("client.networkinterface.notexisting"));
networkInterfaceComboBox.setModel(noNicModel);
networkAddressComboBox.setModel(noNicModel);
return; // finish from here
}
DefaultComboBoxModel<Object> model = generateNetworkInterfacesModel();
nic = NetworkInterface.getByInetAddress(s.getPairingAddress());
if (nic == null) {
// The configured IP address does not exist anymore! Will reset
// to localhost
s.setPairingAddress(InetAddress.getByName("localhost"));
nic = NetworkInterface.getByInetAddress(s.getPairingAddress());
}
model.setSelectedItem(nic);
networkInterfaceComboBox.setModel(model);
networkAddressComboBox.setModel(generateNetworkAddressModel(nic));
} catch (SocketException | UnknownHostException e) {
logger.warn("Paiting settings Exception", e);
}
}
private DefaultComboBoxModel<Object> generateNetworkInterfacesModel() {
DefaultComboBoxModel<Object> model = new DefaultComboBoxModel<>();
try {
List<NetworkInterface> nics = Collections.list(NetworkInterface
.getNetworkInterfaces());
for (NetworkInterface nic : nics) {
List<InetAddress> addrs = Collections.list(nic
.getInetAddresses());
if (addrs.size() > 0 && !nic.isLoopback() && nic.isUp()) {
model.addElement(nic);
}
}
} catch (SocketException e) {
logger.warn(
"An exception occurred while iterating over available network interfaces. Will return unfinished list: ",
e);
}
return model;
}
private DefaultComboBoxModel<Object> generateNetworkAddressModel(
NetworkInterface nic) {
DefaultComboBoxModel<Object> model = new DefaultComboBoxModel<>();
List<InetAddress> addrs = Collections.list(nic.getInetAddresses());
for (InetAddress addr : addrs) {
if (addr instanceof Inet4Address) { // ignore IPv6 addresses!!!
model.addElement(addr);
}
}
return model;
}
private DefaultComboBoxModel<String> generateCSPSelectionModel() {
DefaultComboBoxModel<String> ret = new DefaultComboBoxModel<String>();
for (StorageBackendType t : StorageBackendType.values()) {
if (t != StorageBackendType.FOLDER) {
if (t == StorageBackendType.DROPBOX) {
// Check if Dropbox is installed. If yes -> Add to list
DropboxAdapterFactory dropboxAdapterFactory = (DropboxAdapterFactory) CSPAdapterFactory
.getInstance(StorageBackendType.DROPBOX);
DropboxClientIntegration dropboxClientIntegration = (DropboxClientIntegration) dropboxAdapterFactory
.getClientAdapter();
try {
if (dropboxClientIntegration.isClientInstalled()) {
ret.addElement(t.getDisplayName());
}
} catch (IOException e) {
// an error occurred, but it could be possible that
// Dropbox is installed
ret.addElement(t.getDisplayName());
}
} else {
ret.addElement(t.getDisplayName());
}
}
}
if (ret.getSize() == 0) {
cspSelectionComboBox.setEnabled(false);
}
return ret;
}
private void enableDisableAddDeviceContactForShare() {
if (shareList.getModel().getSize() == 0) {
addDeviceContactShareButton.setEnabled(false);
addDeviceContactShareButton
.setToolTipText(bundle
.getString("client.shareList.addUserDeviceToShareToolTipDisabled"));
for (MouseListener ml : addDeviceContactShareButton
.getMouseListeners()) {
addDeviceContactShareButton.removeMouseListener(ml);
}
} else {
addDeviceContactShareButton.setEnabled(true);
addDeviceContactShareButton.setToolTipText(bundle
.getString("client.shareList.addUserDeviceToShareToolTip"));
addDeviceContactShareButton
.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
addDeviceContactShareButtonMousePressed(evt);
}
});
shareList.setSelectedIndex(0);
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addCSPInfoButton;
private javax.swing.JButton addDeviceButton;
private javax.swing.JButton addDeviceContactShareButton;
private javax.swing.JButton addShare;
private javax.swing.JList<PanboxGUIContact> addressbookList;
private javax.swing.JScrollPane addressbookListScrollPane;
private javax.swing.JPanel addressbookPanel;
private javax.swing.JPanel addressbookTabPanel;
private javax.swing.JCheckBox clipboardHandlerCheckbox;
private javax.swing.JButton contactApplyButton;
private javax.swing.JButton contactDiscardButton;
private javax.swing.JLabel contactPropertiesLabel;
private javax.swing.JPanel contactPropertiesPanell;
private javax.swing.JCheckBox contactVerificationStatusCheckBox;
private javax.swing.JLabel cspAccountsLabel;
private javax.swing.JTable cspInfoTable;
private javax.swing.JScrollPane cspInfoTableScrollPanel;
private javax.swing.JComboBox<String> cspSelectionComboBox;
private javax.swing.JPanel cspSettingsPanel;
private javax.swing.JLabel deviceKeyFprintLabel;
private javax.swing.JTextField deviceKeyFprintTextField;
private javax.swing.JList<PanboxDevice> deviceList;
private javax.swing.JPanel deviceListPanel;
private javax.swing.JScrollPane deviceListScrollPane;
private javax.swing.JLabel devicePropertiesLabel;
private javax.swing.JPanel devicePropertiesPanel;
private javax.swing.JList<PanboxShare> deviceShareList;
private javax.swing.JPanel devicesTabPanel;
private javax.swing.JLabel emailLabel;
private javax.swing.JTextField emailTextField;
private javax.swing.JLabel encKeyFprintLabel;
private javax.swing.JTextField encKeyFprintTextField;
private javax.swing.JCheckBox expertModeCheckBox;
private javax.swing.JPanel expertModeContactPanel;
private javax.swing.JPanel expertModeDevicePanel;
private javax.swing.JButton exportContactButton;
private javax.swing.JLabel firstNameLabel;
private javax.swing.JTextField firstNameTextField;
private javax.swing.JButton importContactButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JComboBox<SupportedLanguage> languageComboBox;
private javax.swing.JLabel languageLabel;
private javax.swing.JLabel lastNameLabel;
private javax.swing.JTextField lastNameTextField;
private javax.swing.JCheckBox mailtoSchemeCheckbox;
private javax.swing.JTabbedPane mainTabbedPane;
private javax.swing.JComboBox<Object> networkAddressComboBox;
private javax.swing.JLabel networkAddressLabel;
private javax.swing.JLabel networkDevicePairingLabel;
private javax.swing.JPanel networkDevicePairingPanel;
private javax.swing.JComboBox<Object> networkInterfaceComboBox;
private javax.swing.JLabel networkInterfaceLabel;
private javax.swing.JTextField ownerTextField;
private javax.swing.JButton panboxFolderChooseButton;
private javax.swing.JLabel panboxFolderLabel;
private javax.swing.JTextField panboxFolderTextField;
private javax.swing.JLabel permissionsLabel;
private javax.swing.JButton publishContactButton;
private javax.swing.JButton removeCSPInfoButton;
private javax.swing.JButton removeContactButton;
private javax.swing.JButton removeDeviceButton;
private javax.swing.JButton removeDeviceContactShareButton;
private javax.swing.JButton removeShare;
private javax.swing.JButton restoreRevButton;
private javax.swing.JPanel selectedCSPContentPanel;
private javax.swing.JLabel selectedCSPLabel;
private javax.swing.JButton settingsApplyButton;
private javax.swing.JButton settingsFolderChooseButton;
private javax.swing.JLabel settingsFolderLabel;
private javax.swing.JTextField settingsFolderTextField;
private javax.swing.JButton settingsRevertButton;
private javax.swing.JPanel settingsTabPanel;
private javax.swing.JList<PanboxShare> shareList;
private javax.swing.JPanel shareListPanel;
private javax.swing.JScrollPane shareListScrollPane;
private javax.swing.JPanel shareListTabPanel;
private javax.swing.JLabel sharePropertiesLabel;
private javax.swing.JPanel sharePropertiesPanel;
private javax.swing.JLabel signKeyFprintLabel;
private javax.swing.JTextField signKeyFprintTextField;
private javax.swing.JLabel syncStatusLabel;
private javax.swing.JTextField syncStatusTextField;
private javax.swing.JCheckBox uriHandlerCheckbox;
private javax.swing.JLabel urlLabel;
private javax.swing.JTextField urlTextField;
private javax.swing.JLabel usersLabel;
private javax.swing.JList<PanboxSharePermission> usersList;
private javax.swing.JScrollPane usersListScrollPane;
private javax.swing.JScrollPane usersListScrollPane1;
private javax.swing.JLabel validFromUntilLabel;
// End of variables declaration//GEN-END:variables
}