package org.docear.plugin.services.listeners;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URISyntaxException;
import java.util.concurrent.CancellationException;
import javax.swing.JOptionPane;
import org.docear.plugin.core.DocearController;
import org.docear.plugin.services.ServiceController;
import org.docear.plugin.services.communications.CommunicationsController;
import org.docear.plugin.services.communications.features.AccountRegisterer;
import org.docear.plugin.services.communications.features.DocearServiceException;
import org.docear.plugin.services.communications.features.DocearServiceException.DocearServiceExceptionType;
import org.docear.plugin.services.components.dialog.DocearIRChoiceDialogPanel;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.util.LogUtils;
import org.freeplane.core.util.TextUtils;
public class DocearServiceSettingsDialogListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof DocearIRChoiceDialogPanel) {
if(e.getID() == 0) {
handleOkButton((DocearIRChoiceDialogPanel) e.getSource());
}
else {
handleCancelButton((DocearIRChoiceDialogPanel) e.getSource());
}
}
}
private void handleCancelButton(DocearIRChoiceDialogPanel settings) {
settings.close();
}
private void handleOkButton(DocearIRChoiceDialogPanel settings) {
try {
checkAccountSettings(settings);
Container cont = settings.getParent();
while(!(cont instanceof JOptionPane)) {
cont = cont.getParent();
}
((JOptionPane)cont).setValue(settings.getOkButton());
}
catch (DocearServiceException e) {
JOptionPane.showMessageDialog(settings,
TextUtils.getText("docear.uploadchooser.warning.notregistered")+e.getMessage(),
TextUtils.getText("docear.uploadchooser.warning.notregistered.title"),
JOptionPane.WARNING_MESSAGE);
if (DocearServiceExceptionType.NO_CONNECTION.equals(e.getType())) {
settings.clearUserData();
}
LogUtils.info("DocearServiceException: "+e.getMessage());
}
catch (URISyntaxException e1) {
JOptionPane.showMessageDialog(settings, TextUtils.getText("docear.uploadchooser.warning.notregistered"), TextUtils.getText("docear.uploadchooser.warning.notregistered.title"), JOptionPane.WARNING_MESSAGE);
LogUtils.warn(e1);
}
catch (CancellationException e){
LogUtils.info("Connection cancelled by user.");
}
}
private boolean checkAccountSettings(DocearIRChoiceDialogPanel settings) throws DocearServiceException, URISyntaxException, CancellationException {
int code = settings.getIrCode();
if(code > 0 && !settings.allowBackup() && isEmpty(settings.getPassword())) {
return true;
}
AccountRegisterer accountRegisterer = new AccountRegisterer();
if (settings.useRegistration()) {
if(!settings.allowBackup() && isEmpty(settings.getUserName()) && isEmpty(settings.getPassword()) && isEmpty(settings.getEmail())) {
return true;
}
else if (isEmpty(settings.getPassword()) || isEmpty(settings.getEmail()) ) {
throw new DocearServiceException(TextUtils.getText("docear.uploadchooser.warning.enterall"));
}
else {
try {
DocearController.getController().getSemaphoreController().lock(CommunicationsController.CREATING_USER);
accountRegisterer.createRegisteredUser(settings.getUserName(), settings.getPassword(), settings.getEmail(), settings.getBirthYear(), settings.wantsNewsletter(), settings.isMale());
}
finally {
DocearController.getController().getSemaphoreController().unlock(CommunicationsController.CREATING_USER);
}
}
}
else {
if (!isEmpty(settings.getUserName()) && !isEmpty(settings.getPassword())
|| "".equals(ResourceController.getResourceController().getProperty("docear.service.connect.username","")) && !isEmpty(settings.getUserName())
) {
CommunicationsController.getController().tryToConnect(settings.getUserName(), settings.getPassword(), true, false);
if (ServiceController.getController().isBackupAllowed()) {
return true;
}
else {
return false;
}
}
}
if (code > 0) {
//if user name is empty --> create anonymous user automatically when the information retrieval action runs
if (!isEmpty(settings.getUserName())) {
if(!isEmpty(CommunicationsController.getController().getRegisteredAccessToken())) {
return true;
}
if (isEmpty(settings.getPassword())) {
//JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("docear.uploadchooser.warning.nopassword"), TextUtils.getText("docear.uploadchooser.warning.nopassword.title"), JOptionPane.WARNING_MESSAGE);
throw new DocearServiceException(TextUtils.getText("docear.uploadchooser.warning.nopassword"));
//return false;
}
else {
CommunicationsController.getController().tryToConnect(settings.getUserName(), settings.getPassword(), true, false);
if (!isEmpty(CommunicationsController.getController().getRegisteredAccessToken())) {
return true;
}
else {
return false;
}
}
}
else {
//if user name is empty --> create anonymous user automatically when the information retrieval action runs
return true;
}
}
return true;
}
private boolean isEmpty(String s) {
return s==null || s.trim().length()==0;
}
}