/*
*
* 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.TrayIcon.MessageType;
import java.io.File;
import java.net.URI;
import java.security.UnrecoverableKeyException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SizeRequirements;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.text.Element;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.InlineView;
import javax.swing.text.html.ParagraphView;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
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.desktop.common.PanboxClient;
import org.panbox.desktop.common.gui.PasswordEnterDialog.PermissionType;
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.shares.PanboxShare;
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.vfs.backend.dropbox.CSPApiException;
import org.panbox.desktop.common.vfs.backend.dropbox.DropboxAPIIntegration;
public class AddContactToShareWizard extends javax.swing.JDialog {
@SuppressWarnings("serial")
public class CustomEditorKit extends HTMLEditorKit {
@Override
public ViewFactory getViewFactory() {
return new HTMLFactory() {
@Override
public View create(Element e) {
View v = super.create(e);
if (v instanceof InlineView) {
return new InlineView(e) {
@Override
public int getBreakWeight(int axis, float pos,
float len) {
return GoodBreakWeight;
}
@Override
public View breakView(int axis, int p0, float pos,
float len) {
if (axis == View.X_AXIS) {
this.checkPainter();
this.removeUpdate(null, null, null);
}
return super.breakView(axis, p0, pos, len);
}
};
} else if (v instanceof ParagraphView) {
return new ParagraphView(e) {
@Override
protected SizeRequirements calculateMinorAxisRequirements(
int axis, SizeRequirements r) {
if (r == null) {
r = new SizeRequirements();
}
float pref = this.layoutPool
.getPreferredSpan(axis);
float min = this.layoutPool
.getMinimumSpan(axis);
// Don't include insets, Box.getXXXSpan will
// include them.
r.minimum = (int) min;
r.preferred = Math.max(r.minimum, (int) pref);
r.maximum = Integer.MAX_VALUE;
r.alignment = 0.5f;
return r;
}
};
}
return v;
}
};
}
}
/**
*
*/
private static final long serialVersionUID = 4892202577910829210L;
private final static Logger logger = Logger
.getLogger(AddContactToShareWizard.class);
private PanboxShare share;
private static final ResourceBundle bundle = ResourceBundle.getBundle(
"org.panbox.desktop.common.gui.Messages", Settings.getInstance()
.getLocale());
private PanboxClient client;
private DropboxAPIIntegration dbapi;
private boolean hasParticipants;
private ContactListModel mainModel;
public AddContactToShareWizard(java.awt.Frame parent, PanboxClient client,
PanboxShare share, ContactListModel model) throws Exception {
super(parent);
this.client = client;
this.share = share;
this.mainModel = model;
this.dbapi = (DropboxAPIIntegration) CSPAdapterFactory.getInstance(
StorageBackendType.DROPBOX).getAPIAdapter();
this.hasParticipants = (share.getContacts().size() != 0);
initComponents();
setLocationRelativeTo(parent);
this.contactList.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
changedStep();
}
});
changedStep();
}
private ContactListModel genContactModel() {
ContactListModel modelcopy = new ContactListModel();
for (int i = 0, ctr = 0; i < mainModel.getSize(); i++) {
PanboxGUIContact ccur = mainModel.get(i);
List<PanboxGUIContact> clist = share.getContacts();
// load contacts that may be added
if (!(ccur instanceof PanboxMyContact) && !clist.contains(ccur)
&& !clist.contains(ccur)) {
modelcopy.add(ctr++, ccur);
}
}
return modelcopy;
}
private int currentStep = this.STEP_CONTACT_SELECTION; // initial value
private final int STEP_CONTACT_SELECTION = 0;
private final int STEP_CSP_ACCESSCONTROL = 1;
private final int STEP_CREATE_INVITATION = 2;
private boolean finishedAccessControlConfig = false;
private void changedStep() {
JPanel curPanel = null;
switch (currentStep) {
case STEP_CONTACT_SELECTION:
abortBackButton.setText(bundle.getString("Abort"));
nextFinishButton
.setText(bundle
.getString("AddContactToShareWizard.nextButton.addContacts.text"));
List<PanboxGUIContact> contacts = contactList.getSelectedValuesList();
if ((contacts != null) && (contacts.size() > 0)
|| finishedAccessControlConfig) {
nextFinishButton.setEnabled(true);
} else {
nextFinishButton.setEnabled(false);
}
curPanel = contactListPanel;
break;
case STEP_CSP_ACCESSCONTROL:
abortBackButton.setText(bundle.getString("Back"));
try {
// TODO: cleanup, CSP abstraction
String link = dbapi.getShareConfigurationURL(share.getName(),
(share.getContacts().size() != 0)).toString();
shareConfigLinkEditorPane.setText("<html><p><a href=\"" + link
+ "\">" + link + "</a></p></html>");
} catch (Exception e) {
e.printStackTrace();
}
if (finishedAccessControlConfig) {
nextFinishButton.setText(bundle.getString("Next"));
} else {
nextFinishButton
.setText(bundle
.getString("AddContactToShareWizard.nextButton.openLink.text"));
}
curPanel = accessControlPanelDropbox;
break;
case STEP_CREATE_INVITATION:
abortBackButton.setText(bundle.getString("Back"));
nextFinishButton.setText(bundle.getString("Finish"));
String link = createShareInvitation();
shareInvitationLinkEditorPane.setText("<html><p><a href=\"" + link
+ "\">" + link + "</a></p></html>");
nextFinishButton.setEnabled(true);
curPanel = shareInvitationPanel;
break;
}
dialogPanel.removeAll();
dialogPanel.add(curPanel);
// javax.swing.GroupLayout dialogPanelLayout = new
// javax.swing.GroupLayout(
// dialogPanel);
// dialogPanel.setLayout(dialogPanelLayout);
// dialogPanelLayout
// .setHorizontalGroup(dialogPanelLayout
// .createParallelGroup(
// javax.swing.GroupLayout.Alignment.LEADING)
// .addGroup(
// dialogPanelLayout
// .createSequentialGroup()
// .addContainerGap()
// .addComponent(
// curPanel,
// javax.swing.GroupLayout.DEFAULT_SIZE,
// javax.swing.GroupLayout.DEFAULT_SIZE,
// 6).addContainerGap()));
// dialogPanelLayout
// .setVerticalGroup(dialogPanelLayout
// .createParallelGroup(
// javax.swing.GroupLayout.Alignment.LEADING)
// .addGroup(
// dialogPanelLayout
// .createSequentialGroup()
// .addContainerGap()
// .addComponent(
// curPanel,
// javax.swing.GroupLayout.DEFAULT_SIZE,
// javax.swing.GroupLayout.DEFAULT_SIZE,
// 6).addContainerGap()));
nextFinishButton.requestFocus();
invalidate();
pack();
}
private String createShareInvitation() {
return PanboxURICmdShareInvitation.getPanboxLink(
share.getUuid().toString(), share.getType().name()).toString();
}
/**
* 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() {
contactListPanel = new javax.swing.JPanel();
contactListScrollPane = new javax.swing.JScrollPane();
contactList = new javax.swing.JList<PanboxGUIContact>();
accessControlPanelDropbox = new javax.swing.JPanel();
emailsToClipboardCheckBox = new javax.swing.JCheckBox();
accessControlLinkLabel = new javax.swing.JLabel();
shareConfigurationLinkPanel = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
shareConfigLinkEditorPane = new javax.swing.JEditorPane();
shareInvitationPanel = new javax.swing.JPanel();
shareInvitationLinkLabel = new javax.swing.JLabel();
mailInvitationCheckbox = new javax.swing.JCheckBox();
inviteViaClipboardCheckbox = new javax.swing.JCheckBox();
shareInvitationLinkPanel = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
shareInvitationLinkEditorPane = new javax.swing.JEditorPane();
nextFinishButton = new javax.swing.JButton();
abortBackButton = new javax.swing.JButton();
dialogPanel = new javax.swing.JPanel();
contactList.setModel(genContactModel());
contactList.setCellRenderer(new ContactListCellRenderer());
contactListScrollPane.setViewportView(contactList);
javax.swing.GroupLayout contactListPanelLayout = new javax.swing.GroupLayout(
contactListPanel);
contactListPanel.setLayout(contactListPanelLayout);
contactListPanelLayout.setHorizontalGroup(contactListPanelLayout
.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(contactListScrollPane,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 282,
Short.MAX_VALUE));
contactListPanelLayout.setVerticalGroup(contactListPanelLayout
.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(contactListScrollPane,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 350,
Short.MAX_VALUE));
accessControlPanelDropbox.setMaximumSize(null);
emailsToClipboardCheckBox.setSelected(true);
emailsToClipboardCheckBox.setText(bundle
.getString("PanboxClientGUI.copyEmailToClipboard")); // NOI18N
accessControlLinkLabel
.setText(bundle
.getString("AddContactToShareWizard.accesscontrolLinkLabel.text")); // NOI18N
shareConfigurationLinkPanel
.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle
.getString("AddContactToShareWizard.shareConfigurationLinkPanel.border.title"))); // NOI18N
shareConfigLinkEditorPane.setEditable(false);
shareConfigLinkEditorPane.setContentType("text/html"); // NOI18N
shareConfigLinkEditorPane.setEditorKit(new CustomEditorKit());
shareConfigLinkEditorPane.setAutoscrolls(false);
shareConfigLinkEditorPane.setOpaque(false);
shareConfigLinkEditorPane
.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
public void hyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {
shareConfigLinkEditorPaneHyperlinkUpdate(evt);
}
});
jScrollPane3.setViewportView(shareConfigLinkEditorPane);
javax.swing.GroupLayout shareConfigurationLinkPanelLayout = new javax.swing.GroupLayout(
shareConfigurationLinkPanel);
shareConfigurationLinkPanel
.setLayout(shareConfigurationLinkPanelLayout);
shareConfigurationLinkPanelLayout
.setHorizontalGroup(shareConfigurationLinkPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareConfigurationLinkPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane3)
.addContainerGap()));
shareConfigurationLinkPanelLayout
.setVerticalGroup(shareConfigurationLinkPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareConfigurationLinkPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
jScrollPane3,
javax.swing.GroupLayout.DEFAULT_SIZE,
77, Short.MAX_VALUE)
.addContainerGap()));
javax.swing.GroupLayout accessControlPanelDropboxLayout = new javax.swing.GroupLayout(
accessControlPanelDropbox);
accessControlPanelDropbox.setLayout(accessControlPanelDropboxLayout);
accessControlPanelDropboxLayout
.setHorizontalGroup(accessControlPanelDropboxLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(accessControlLinkLabel,
javax.swing.GroupLayout.DEFAULT_SIZE, 470,
Short.MAX_VALUE)
.addGroup(
accessControlPanelDropboxLayout
.createSequentialGroup()
.addComponent(emailsToClipboardCheckBox)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(shareConfigurationLinkPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE));
accessControlPanelDropboxLayout
.setVerticalGroup(accessControlPanelDropboxLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
accessControlPanelDropboxLayout
.createSequentialGroup()
.addComponent(
accessControlLinkLabel,
javax.swing.GroupLayout.PREFERRED_SIZE,
43,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
shareConfigurationLinkPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(emailsToClipboardCheckBox)));
shareInvitationPanel.setMaximumSize(new java.awt.Dimension(406, 224));
shareInvitationPanel.setPreferredSize(new java.awt.Dimension(481, 224));
shareInvitationLinkLabel
.setText(bundle
.getString("AddContactToShareWizard.shareInvitationLinkLabel.text")); // NOI18N
mailInvitationCheckbox
.setText(bundle
.getString("AddContactToShareWizard.mailInvitationCheckbox.text")); // NOI18N
mailInvitationCheckbox.setEnabled(Settings.getInstance()
.isMailtoSchemeSupported());
inviteViaClipboardCheckbox.setSelected(true);
inviteViaClipboardCheckbox
.setText(bundle
.getString("AddContactToShareWizard.inviteViaClipboardCheckbox.text")); // NOI18N
shareInvitationLinkPanel
.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle
.getString("AddContactToShareWizard.shareInvitationLinkPanel.border.title"))); // NOI18N
shareInvitationLinkEditorPane.setEditable(false);
shareInvitationLinkEditorPane.setContentType("text/html"); // NOI18N
shareInvitationLinkEditorPane.setEditorKit(new CustomEditorKit());
shareInvitationLinkEditorPane
.setToolTipText(bundle
.getString("AddContactToShareWizard.shareInvitationLinkEditorPane.toolTipText")); // NOI18N
shareInvitationLinkEditorPane.setMaximumSize(new java.awt.Dimension(
406, 224));
shareInvitationLinkEditorPane.setOpaque(false);
shareInvitationLinkEditorPane
.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
public void hyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {
shareInvitationLinkEditorPaneHyperlinkUpdate(evt);
}
});
jScrollPane2.setViewportView(shareInvitationLinkEditorPane);
javax.swing.GroupLayout shareInvitationLinkPanelLayout = new javax.swing.GroupLayout(
shareInvitationLinkPanel);
shareInvitationLinkPanel.setLayout(shareInvitationLinkPanelLayout);
shareInvitationLinkPanelLayout
.setHorizontalGroup(shareInvitationLinkPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareInvitationLinkPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2)
.addContainerGap()));
shareInvitationLinkPanelLayout
.setVerticalGroup(shareInvitationLinkPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareInvitationLinkPanelLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
jScrollPane2,
javax.swing.GroupLayout.DEFAULT_SIZE,
87, Short.MAX_VALUE)
.addContainerGap()));
javax.swing.GroupLayout shareInvitationPanelLayout = new javax.swing.GroupLayout(
shareInvitationPanel);
shareInvitationPanel.setLayout(shareInvitationPanelLayout);
shareInvitationPanelLayout
.setHorizontalGroup(shareInvitationPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareInvitationPanelLayout
.createSequentialGroup()
.addComponent(
inviteViaClipboardCheckbox)
.addGap(18, 18, 18)
.addComponent(mailInvitationCheckbox)
.addContainerGap(206, Short.MAX_VALUE))
.addComponent(shareInvitationLinkLabel,
javax.swing.GroupLayout.DEFAULT_SIZE, 451,
Short.MAX_VALUE)
.addComponent(shareInvitationLinkPanel,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE));
shareInvitationPanelLayout
.setVerticalGroup(shareInvitationPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
shareInvitationPanelLayout
.createSequentialGroup()
.addComponent(
shareInvitationLinkLabel,
javax.swing.GroupLayout.PREFERRED_SIZE,
43,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(
shareInvitationLinkPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(
shareInvitationPanelLayout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(
mailInvitationCheckbox)
.addComponent(
inviteViaClipboardCheckbox))));
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(bundle.getString("AddContactToShareWizard.title")); // NOI18N
setMinimumSize(null);
setModal(true);
nextFinishButton.setText(bundle
.getString("AddContactToShareWizard.nextFinishButton.text")); // NOI18N
nextFinishButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
nextFinishButtonActionPerformed(evt);
}
});
abortBackButton.setText(bundle
.getString("AddContactToShareWizard.abortBackButton.text")); // NOI18N
abortBackButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
abortBackButtonActionPerformed(evt);
}
});
dialogPanel.setLayout(new java.awt.GridLayout(1, 1));
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)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(
abortBackButton)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED,
132,
Short.MAX_VALUE)
.addComponent(
nextFinishButton))
.addComponent(
dialogPanel,
javax.swing.GroupLayout.Alignment.TRAILING,
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(dialogPanel,
javax.swing.GroupLayout.DEFAULT_SIZE,
327, Short.MAX_VALUE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(abortBackButton)
.addComponent(nextFinishButton))
.addContainerGap()));
pack();
}// </editor-fold>//GEN-END:initComponents
private void shareConfigLinkEditorPaneHyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {// GEN-FIRST:event_shareConfigLinkEditorPaneHyperlinkUpdate
if (HyperlinkEvent.EventType.ACTIVATED.equals(evt.getEventType())) {
if (this.finishedAccessControlConfig = openShareConfigLink()) {
changedStep();
}
}
}// GEN-LAST:event_shareConfigLinkEditorPaneHyperlinkUpdate
private void shareInvitationLinkEditorPaneHyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {// GEN-FIRST:event_shareInvitationLinkEditorPaneHyperlinkUpdate
}// GEN-LAST:event_shareInvitationLinkEditorPaneHyperlinkUpdate
private boolean openShareConfigLink() {
String shareid = FilenameUtils.getName(share.getPath());
boolean shareIsOnline;
try {
shareIsOnline = ((shareid != null) && (shareid.length() > 0) && dbapi
.exists(File.separator + shareid));
} catch (CSPApiException e1) {
logger.error("Could not determine if share with path "
+ share.getPath() + " and shareid: " + shareid
+ " has already been uploaded!");
shareIsOnline = false;
}
if (shareIsOnline) {
if (emailsToClipboardCheckBox.isSelected()) {
String emails = PanboxGUIContact.getMailAsSepteratedValues(
reallyAdded, ";", StorageBackendType.DROPBOX);
// copy the email of the selected contact into the
// clipboard
DesktopApi.copyToClipboard(emails.toString(), false);
}
try {
// share may either already have had participants from the very
// beginning, or been configured to include participants during
// accesscontrol config
URI link = dbapi.getShareConfigurationURL(shareid,
hasParticipants || finishedAccessControlConfig);
DesktopApi.browse(link);
return 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 {
logger.warn("handleCSPShareParticipantConfiguration: Unknown share type!");
}
return false;
}
private void abortBackButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_abortBackButtonActionPerformed
switch (currentStep) {
case STEP_CONTACT_SELECTION:
// initial step, only allow aborting this dialog
this.dispose();
break;
case STEP_CSP_ACCESSCONTROL:
currentStep--;
changedStep();
break;
case STEP_CREATE_INVITATION:
currentStep--;
changedStep();
break;
}
}// GEN-LAST:event_abortBackButtonActionPerformed
private void nextFinishButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_nextFinishButtonActionPerformed
switch (currentStep) {
case STEP_CONTACT_SELECTION:
if (handleContactSelection()) {
finishedAccessControlConfig = false;
}
currentStep++;
break;
case STEP_CSP_ACCESSCONTROL:
if (finishedAccessControlConfig
|| (this.finishedAccessControlConfig = openShareConfigLink())) {
currentStep++;
}
break;
case STEP_CREATE_INVITATION:
if (handleShareInvitationDistribution()) {
// links were either copied to clipboard or sent via email
this.dispose();
}
break;
}
changedStep();
}// GEN-LAST:event_nextFinishButtonActionPerformed
private boolean handleShareInvitationDistribution() {
if (inviteViaClipboardCheckbox.isSelected()) {
DesktopApi.copyToClipboard(createShareInvitation(), true);
}
if (Settings.getInstance().isMailtoSchemeSupported()) {
if (mailInvitationCheckbox.isSelected()) {
String emails = PanboxGUIContact.getMailAsSepteratedValues(
reallyAdded, ",", StorageBackendType.DROPBOX);
DesktopApi.browse(URI.create("mailto:" + emails
+ "?subject=Panbox%20identity%20link&body="
+ createShareInvitation()));
}
}
return true;
}
ArrayList<PanboxGUIContact> reallyAdded = new ArrayList<PanboxGUIContact>();
private boolean handleContactSelection() {
List<PanboxGUIContact> contacts = contactList.getSelectedValuesList();
// reallyAdded.clear();
if (contacts.isEmpty()) {
return false;
}
char[] password = PasswordEnterDialog.invoke(PermissionType.USER);
try {
client.showTrayMessage(bundle.getString("PleaseWait"),
bundle.getString("tray.addContactToShare.waitMessage"),
MessageType.INFO);
PanboxShare sharenew = null;
for (int i = 0; i < contacts.size(); i++) {
// add permission for user
ContactShareParticipant cp = new ContactShareParticipant(
contacts.get(i));
if (!cp.getContact().isVerified()) {
int res = JOptionPane
.showConfirmDialog(
this,
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(contacts.get(i));
// TODO: update users list
} 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(contacts.get(i));
// TODO: update users list
}
}
this.share = (sharenew != null) ? sharenew : this.share;
if (reallyAdded.size() > 0) {
return true;
}
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(this,
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(
this,
bundle.getString("PanboxClientGUI.errorWhileAddingContactToShare"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (UnrecoverableKeyException e1) {
logger.error("Unable to recover key!", e1);
JOptionPane
.showMessageDialog(this, bundle
.getString("PanboxClient.unableToRecoverKeys"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} catch (ShareMetaDataException e1) {
logger.error("Error in share metadata", e1);
JOptionPane
.showMessageDialog(
this,
bundle.getString("PanboxClientGUI.errorWhileAccessingShareMetadata"),
bundle.getString("client.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
Utils.eraseChars(password);
}
return false;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton abortBackButton;
private javax.swing.JLabel accessControlLinkLabel;
private javax.swing.JPanel accessControlPanelDropbox;
private javax.swing.JList<PanboxGUIContact> contactList;
private javax.swing.JPanel contactListPanel;
private javax.swing.JScrollPane contactListScrollPane;
private javax.swing.JPanel dialogPanel;
private javax.swing.JCheckBox emailsToClipboardCheckBox;
private javax.swing.JCheckBox inviteViaClipboardCheckbox;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JCheckBox mailInvitationCheckbox;
private javax.swing.JButton nextFinishButton;
private javax.swing.JEditorPane shareConfigLinkEditorPane;
private javax.swing.JPanel shareConfigurationLinkPanel;
private javax.swing.JEditorPane shareInvitationLinkEditorPane;
private javax.swing.JLabel shareInvitationLinkLabel;
private javax.swing.JPanel shareInvitationLinkPanel;
private javax.swing.JPanel shareInvitationPanel;
// End of variables declaration//GEN-END:variables
}