/* * * 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.HeadlessException; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.security.UnrecoverableKeyException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.ResourceBundle; import javax.swing.DefaultComboBoxModel; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.filechooser.FileView; import org.apache.log4j.Logger; import org.panbox.OS; import org.panbox.PanboxConstants; import org.panbox.Settings; import org.panbox.core.csp.CSPAdapterFactory; import org.panbox.core.csp.StorageBackendType; import org.panbox.core.exception.ShareMetaDataException; 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.sharemgmt.ShareManagerException; import org.panbox.desktop.common.sharemgmt.ShareManagerImpl; import org.panbox.desktop.common.utils.DesktopApi; import org.panbox.desktop.common.vfs.backend.dropbox.DropboxAdapterFactory; import org.panbox.desktop.common.vfs.backend.dropbox.DropboxClientIntegration; public class AddShareDialog extends javax.swing.JDialog { /** * */ private static final long serialVersionUID = -8323088984757291309L; private final static Logger logger = Logger.getLogger(AddShareDialog.class); // no effect on initComponents private static ResourceBundle bundle = ResourceBundle.getBundle( "org.panbox.desktop.common.gui.Messages", Settings.getInstance() .getLocale()); private DefaultComboBoxModel<Object> comboBoxModel = new DefaultComboBoxModel<Object>(); private PanboxShare share; private boolean aborted = false; public static boolean shareNameUserAction = false; private DropboxClientIntegration dbClientIntegration; private boolean dropboxBrowseButtonClicked = false; private boolean nameWasAutoSet = true; /** * Creates new form AddShareDialog */ public AddShareDialog(java.awt.Frame parent) { this(parent, null, null); } public AddShareDialog(java.awt.Frame parent, StorageBackendType type, File preselectedshare) { super(parent); DropboxAdapterFactory dbxFac = (DropboxAdapterFactory) CSPAdapterFactory .getInstance(StorageBackendType.DROPBOX); this.dbClientIntegration = (DropboxClientIntegration) dbxFac .getClientAdapter(); initComponents(); try { if (dbClientIntegration.isClientInstalled()) { reInitDropboxShareList(); } } catch (IOException e) { // somc error with the dropbox list occurred. Will ignore them. } if (type != null) { typeComboBox.setSelectedItem(type.getDisplayName()); } else { typeComboBoxActionPerformed(null); } if (preselectedshare != null) { DropboxShare ref = new DropboxShare(preselectedshare.getName(), preselectedshare.getAbsolutePath()); dropboxSharesComboBox.setSelectedItem(ref); } // If in textfield someone types manually a name, then do not switch // names! nameTextField.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { nameWasAutoSet = false; } @Override public void keyReleased(KeyEvent e) { nameWasAutoSet = false; } @Override public void keyPressed(KeyEvent e) { nameWasAutoSet = false; } }); } private void reInitDropboxShareList() { comboBoxModel.removeAllElements(); comboBoxModel.addElement(bundle.getString("AddShareDialog.select")); ArrayList<DropboxShare> shares = getDropboxShares(); for (DropboxShare s : shares) { try { if (ShareManagerImpl.getInstance().sharePathAvailable( s.getPath())) { comboBoxModel.addElement(s); } } catch (ShareManagerException | UnrecoverableKeyException | ShareMetaDataException e) { logger.error("Error checking if share path is available", e); JOptionPane.showMessageDialog(this, bundle.getString("AddShareDialog.checkPathAvailable"), bundle.getString("error"), JOptionPane.ERROR_MESSAGE); } } } private String[] getSupportedShareTypes() { ArrayList<String> list = new ArrayList<String>(); list.add(StorageBackendType.FOLDER.getDisplayName()); try { if (dbClientIntegration.isClientInstalled()) { list.add(StorageBackendType.DROPBOX.getDisplayName()); } } catch (IOException e) { logger.error("Error checking Dropbox installation", e); } return (String[]) list.toArray(new String[list.size()]); } private ArrayList<DropboxShare> getDropboxShares() { File dropboxSyncDir; ArrayList<DropboxShare> result = new ArrayList<>(); try { dropboxSyncDir = dbClientIntegration.getCurrentSyncDir(); if (dropboxSyncDir != null) { File[] sortedFiles = dropboxSyncDir.listFiles(); Arrays.sort(sortedFiles); for (File f : sortedFiles) { if ((new File(f.getAbsolutePath() + File.separator + PanboxConstants.PANBOX_SHARE_METADATA_DIRECTORY) .exists())) { result.add(new DropboxShare(f.getName(), f .getAbsolutePath())); } } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } private class DropboxShare { String name, path; public DropboxShare(String name, String path) { this.name = name; this.path = path; } public String toString() { return this.name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((path == null) ? 0 : path.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } DropboxShare other = (DropboxShare) obj; if (!getOuterType().equals(other.getOuterType())) { return false; } if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (path == null) { if (other.path != null) { return false; } } else if (!path.equals(other.path)) { return false; } return true; } public String getPath() { return this.path; } private AddShareDialog getOuterType() { return AddShareDialog.this; } } /** * 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" // desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { typeComboBox = new javax.swing.JComboBox<String>(); typeLabel = new javax.swing.JLabel(); nameTextField = new javax.swing.JTextField(); nameLabel = new javax.swing.JLabel(); abortButton = new javax.swing.JButton(); okButton = new javax.swing.JButton(); dropboxPanel = new javax.swing.JPanel(); dropboxSharesComboBox = new javax.swing.JComboBox<Object>(); dropboxSharesLabel = new javax.swing.JLabel(); dropboxNewButton = new javax.swing.JButton(); dropboxBrowseButton = new javax.swing.JButton(); directoryPanel = new javax.swing.JPanel(); directoryTextLabel = new javax.swing.JLabel(); directoryTextField = new javax.swing.JTextField(); directoryChooseButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(bundle.getString("AddShareDialog.title")); // NOI18N setModal(true); typeComboBox.setModel(new DefaultComboBoxModel<String>( getSupportedShareTypes())); typeComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { typeComboBoxActionPerformed(evt); } }); typeLabel.setText(bundle.getString("AddShareDialog.typeLabel.text")); // NOI18N nameLabel.setText(bundle.getString("AddShareDialog.nameLabel.text")); // NOI18N abortButton .setText(bundle.getString("AddShareDialog.abortButton.text")); // NOI18N abortButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { abortButtonActionPerformed(evt); } }); okButton.setText(bundle.getString("AddShareDialog.okButton.text")); // NOI18N okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); dropboxSharesComboBox.setModel(this.comboBoxModel); dropboxSharesComboBox .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dropboxSharesComboBoxActionPerformed(evt); } }); dropboxSharesLabel.setText(bundle .getString("AddShareDialog.dropboxSharesLabel.text")); // NOI18N dropboxNewButton.setText(bundle.getString("AddShareDialog.new")); dropboxNewButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dropboxNewButtonActionPerformed(evt); } }); dropboxBrowseButton.setText(bundle.getString("AddShareDialog.browse")); dropboxBrowseButton .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dropboxBrowseButtonActionPerformed(evt); } }); javax.swing.GroupLayout dropboxPanelLayout = new javax.swing.GroupLayout( dropboxPanel); dropboxPanel.setLayout(dropboxPanelLayout); dropboxPanelLayout .setHorizontalGroup(dropboxPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( javax.swing.GroupLayout.Alignment.TRAILING, dropboxPanelLayout .createSequentialGroup() .addComponent( dropboxSharesLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(dropboxSharesComboBox, 0, 140, Short.MAX_VALUE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dropboxBrowseButton) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dropboxNewButton))); dropboxPanelLayout .setVerticalGroup(dropboxPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( dropboxPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( dropboxSharesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(dropboxSharesLabel) .addComponent(dropboxNewButton) .addComponent(dropboxBrowseButton))); directoryTextLabel.setText(bundle .getString("AddShareDialog.directoryTextLabel.text")); // NOI18N directoryChooseButton.setText(bundle .getString("AddShareDialog.directoryChooseButton.text")); // NOI18N directoryChooseButton .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { directoryChooseButtonActionPerformed(evt); } }); javax.swing.GroupLayout directoryPanelLayout = new javax.swing.GroupLayout( directoryPanel); directoryPanel.setLayout(directoryPanelLayout); directoryPanelLayout .setHorizontalGroup(directoryPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( javax.swing.GroupLayout.Alignment.TRAILING, directoryPanelLayout .createSequentialGroup() .addComponent( directoryTextLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(directoryTextField) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(directoryChooseButton))); directoryPanelLayout .setVerticalGroup(directoryPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( directoryPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( directoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(directoryTextLabel) .addComponent(directoryChooseButton))); 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() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent( directoryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( dropboxPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent( typeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( nameLabel)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent( nameTextField) .addComponent( typeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup( javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent( okButton) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent( abortButton))) .addContainerGap())); layout.setVerticalGroup(layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addContainerGap() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(typeLabel)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dropboxPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(directoryPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(3, 3, 3) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(nameLabel)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(abortButton) .addComponent(okButton)) .addContainerGap())); pack(); }// </editor-fold>//GEN-END:initComponents private void dropboxNewButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_dropboxNewButtonActionPerformed try { final File dropboxSyncDir = dbClientIntegration.getCurrentSyncDir(); if (dropboxSyncDir != null) { final JTextField shareNameField = new JTextField( bundle.getString("AddShareDialog.pleaseEnterNewName")); shareNameField.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { if (!AddShareDialog.shareNameUserAction) { shareNameField.setText(""); AddShareDialog.shareNameUserAction = true; } } }); int retVal = JOptionPane.showConfirmDialog(this, shareNameField, bundle.getString("AddShareDialog.addNewDropboxShare"), JOptionPane.OK_CANCEL_OPTION); if (retVal == JOptionPane.OK_OPTION && AddShareDialog.shareNameUserAction && !shareNameField.getText().equals("")) { File newShareFolder = new File(dropboxSyncDir, shareNameField.getText()); if (newShareFolder.exists()) { JOptionPane .showMessageDialog( this, MessageFormat.format( bundle.getString("AddShareDialog.shareWithNameExists"), shareNameField.getText()), bundle.getString("AddShareDialog.couldNotAddNewDropboxShare"), JOptionPane.INFORMATION_MESSAGE); logger.info("Adding new Dropbox share failed. File exists: " + newShareFolder.getAbsolutePath()); } else { if (dropboxBrowseButtonClicked) { comboBoxModel.removeElementAt(comboBoxModel .getSize() - 1); } comboBoxModel.addElement(new DropboxShare( newShareFolder.getName(), newShareFolder .getAbsolutePath())); dropboxSharesComboBox .setSelectedIndex(dropboxSharesComboBox .getItemCount() - 1); if (nameWasAutoSet) { nameTextField.setText(newShareFolder.getName()); } } } else { logger.debug("Adding new Dropbox share has ben aborted."); } AddShareDialog.shareNameUserAction = false; } } catch (IOException e) { // ignore this } }// GEN-LAST:event_dropboxNewButtonActionPerformed private void dropboxBrowseButtonActionPerformed( java.awt.event.ActionEvent evt) {// GEN-FIRST:event_dropboxBrowseButtonActionPerformed try { final File dropboxSyncDir = dbClientIntegration.getCurrentSyncDir(); if (dropboxSyncDir != null) { JFileChooser fileChooser = new JFileChooser(dropboxSyncDir); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fileChooser.setFileView(new FileView() { @Override public Boolean isTraversable(File f) { return dropboxSyncDir.equals(f) || dropboxSyncDir.equals(f.getParentFile()); } }); int ret = fileChooser.showOpenDialog(this); if (ret == JFileChooser.APPROVE_OPTION && fileChooser.getSelectedFile().getParentFile() .equals(dropboxSyncDir)) { if (dropboxBrowseButtonClicked) { comboBoxModel .removeElementAt(comboBoxModel.getSize() - 1); } comboBoxModel.addElement(new DropboxShare(fileChooser .getSelectedFile().getName(), fileChooser .getSelectedFile().getAbsolutePath())); dropboxSharesComboBox .setSelectedIndex(dropboxSharesComboBox .getItemCount() - 1); if (nameWasAutoSet) { nameTextField.setText(fileChooser.getSelectedFile() .getName()); } dropboxBrowseButtonClicked = true; } } } catch (IOException e) { // ignore this } }// GEN-LAST:event_dropboxBrowseButtonActionPerformed private void typeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_typeComboBoxActionPerformed if (typeComboBox.getSelectedItem().equals( StorageBackendType.DROPBOX.getDisplayName())) { directoryPanel.setVisible(false); dropboxPanel.setVisible(true); } else if (typeComboBox.getSelectedItem().equals( StorageBackendType.FOLDER.getDisplayName())) { directoryPanel.setVisible(true); dropboxPanel.setVisible(false); } // remove old share name nameWasAutoSet = true; nameTextField.setText(""); nameTextField.invalidate(); }// GEN-LAST:event_typeComboBoxActionPerformed private void abortButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_abortButtonActionPerformed aborted = true; this.dispose(); }// GEN-LAST:event_abortButtonActionPerformed private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_okButtonActionPerformed String shareName = nameTextField.getText(); try { if (shareName.equals("")) { JOptionPane.showMessageDialog(this, bundle .getString("AddShareDialog.directoryCannotBeEmpty")); } else if (!ShareManagerImpl.getInstance().shareNameAvailable( shareName)) { JOptionPane.showMessageDialog(this, bundle.getString("AddShareDialog.shareAlreadyExists")); } else if (typeComboBox.getSelectedItem().equals("Dropbox")) { String path = ""; if (!dropboxSharesComboBox.getSelectedItem().equals( bundle.getString("AddShareDialog.select"))) { path = ((DropboxShare) dropboxSharesComboBox .getSelectedItem()).getPath(); File ftmp = new File(path); if (ftmp.exists() && !(new File( ftmp, PanboxConstants.PANBOX_SHARE_METADATA_DIRECTORY)) .exists() && ftmp.list().length > 0) { JOptionPane .showMessageDialog( this, bundle.getString("AddShareDialog.ShareFolderNotEmpty")); } else if (!ShareManagerImpl.getInstance() .sharePathAvailable(path)) { JOptionPane .showMessageDialog( this, bundle.getString("AddShareDialog.pathAlreadyAssigned")); } else { path = ((DropboxShare) dropboxSharesComboBox .getSelectedItem()).getPath(); share = new DropboxPanboxShare(null, path, nameTextField.getText(), 0); this.dispose(); } } else { JOptionPane .showMessageDialog( this, bundle.getString("AddShareDialog.noShareSelected")); } } else if (typeComboBox.getSelectedItem().equals("Directory")) { String path = directoryTextField.getText(); File metadata = new File(path, PanboxConstants.PANBOX_SHARE_METADATA_DIRECTORY); if (!metadata.exists() && new File(path).list() != null && new File(path).list().length > 0) { JOptionPane.showMessageDialog(this, bundle .getString("AddShareDialog.ShareFolderNotEmpty")); } else if (path.equals("")) { JOptionPane .showMessageDialog( this, bundle.getString("AddShareDialog.directoryCannotBeEmpty")); } else if (!ShareManagerImpl.getInstance().sharePathAvailable( path)) { JOptionPane.showMessageDialog(this, bundle .getString("AddShareDialog.pathAlreadyAssigned")); } else { File f = new File(path); if (!checkPermissionsOnDirectory(path)) { // TODO: Instead of giving the information of incorrect // access rights we should offer the user to adjust the // access rights automatically (needs some extra work // since JNA does not support SetFileSecurity) JLabel label = new JLabel( bundle.getString("AddShareDialog.errorWrongPermission")); label.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { try { DesktopApi .browse(new URI( "https://support.sirrix.com/otrs/index.pl?Action=AgentFAQZoom;ItemID=141")); } catch (URISyntaxException e1) { logger.warn("AddShareDialog : okButtonActionPerformed : Could not open URL. Please visit manually: https://support.sirrix.com/otrs/index.pl?Action=AgentFAQZoom;ItemID=141"); } } }); JOptionPane.showMessageDialog(null, label, bundle.getString("error"), JOptionPane.ERROR_MESSAGE); } else { if (!f.exists()) { // in case someone just types a // path // and expects it to be created f.mkdirs(); } share = new FolderPanboxShare(null, path, shareName, 0); this.dispose(); } } } } catch (ShareManagerException | UnrecoverableKeyException | HeadlessException | ShareMetaDataException e) { JOptionPane.showMessageDialog(this, bundle.getString("AddShareDialog.errorAddingShare"), bundle.getString("error"), JOptionPane.ERROR_MESSAGE); } }// GEN-LAST:event_okButtonActionPerformed private boolean checkPermissionsOnDirectory(String path) { if (OS.getOperatingSystem().isWindows()) { // TODO: Impl real check return true; } else if (OS.getOperatingSystem().isLinux()) { // TODO: Impl real check return true; } else { logger.error("AddShareDialog : checkPermissionsOnDirectory : Not running on Linux and Windows!"); return false; } } private void directoryChooseButtonActionPerformed( java.awt.event.ActionEvent evt) {// GEN-FIRST:event_directoryChooseButtonActionPerformed JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int ret = fileChooser.showOpenDialog(this); if (ret == JFileChooser.APPROVE_OPTION) { directoryTextField.setText(fileChooser.getSelectedFile() .getAbsolutePath()); directoryTextField.invalidate(); if (nameTextField.getText().trim().length() == 0) { nameTextField.setText(fileChooser.getSelectedFile().getName()); nameTextField.invalidate(); } } }// GEN-LAST:event_directoryChooseButtonActionPerformed private void dropboxSharesComboBoxActionPerformed( java.awt.event.ActionEvent evt) {// GEN-FIRST:event_sharesComboBoxActionPerformed try { final File dropboxSyncDir = dbClientIntegration.getCurrentSyncDir(); if (dropboxSyncDir != null) { if (dropboxSharesComboBox.getSelectedItem().equals( bundle.getString("AddShareDialog.select"))) { // ignore this entry! } else { DropboxShare share = (DropboxShare) dropboxSharesComboBox .getSelectedItem(); if (nameWasAutoSet) { nameTextField.setText(share.name); nameTextField.invalidate(); } } } else { JOptionPane .showMessageDialog( this, bundle.getString("AddShareDialog.error.ReadingDropboxSyncDir")); } } catch (IOException e) { logger.error( "AddShareDialog : Unable to get list of current dropbox folder shares.", e); } }// GEN-LAST:event_sharesComboBoxActionPerformed public PanboxShare getResult() throws OperationAbortedException { if (aborted || share == null) { throw new OperationAbortedException( "AddPanboxShare dialog has been canceled."); } return share; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton abortButton; private javax.swing.JButton directoryChooseButton; private javax.swing.JPanel directoryPanel; private javax.swing.JTextField directoryTextField; private javax.swing.JLabel directoryTextLabel; private javax.swing.JButton dropboxBrowseButton; private javax.swing.JButton dropboxNewButton; private javax.swing.JPanel dropboxPanel; private javax.swing.JComboBox<Object> dropboxSharesComboBox; private javax.swing.JLabel dropboxSharesLabel; private javax.swing.JLabel nameLabel; private javax.swing.JTextField nameTextField; private javax.swing.JButton okButton; private javax.swing.JComboBox<String> typeComboBox; private javax.swing.JLabel typeLabel; // End of variables declaration//GEN-END:variables }