Package edu.stanford.bmir.protege.web.client.ui.signup

Source Code of edu.stanford.bmir.protege.web.client.ui.signup.WebProtegeSignupDialogController

package edu.stanford.bmir.protege.web.client.ui.signup;

import com.google.common.base.Optional;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import edu.stanford.bmir.protege.web.client.rpc.AdminServiceManager;
import edu.stanford.bmir.protege.web.client.rpc.data.SignupInfo;
import edu.stanford.bmir.protege.web.client.rpc.data.UserData;
import edu.stanford.bmir.protege.web.client.ui.library.dlg.DialogButton;
import edu.stanford.bmir.protege.web.client.ui.library.dlg.WebProtegeDialogButtonHandler;
import edu.stanford.bmir.protege.web.client.ui.library.dlg.WebProtegeDialogCloser;
import edu.stanford.bmir.protege.web.client.ui.library.dlg.WebProtegeOKCancelDialogController;
import edu.stanford.bmir.protege.web.client.ui.library.msgbox.MessageBox;
import edu.stanford.bmir.protege.web.client.ui.login.HashAlgorithm;
import edu.stanford.bmir.protege.web.client.ui.verification.HumanVerificationHandler;
import edu.stanford.bmir.protege.web.client.ui.verification.HumanVerificationServiceProvider;
import edu.stanford.bmir.protege.web.shared.user.UserEmailAlreadyExistsException;
import edu.stanford.bmir.protege.web.shared.user.UserNameAlreadyExistsException;
import edu.stanford.bmir.protege.web.shared.user.UserRegistrationException;


/**
* Author: Matthew Horridge<br>
* Stanford University<br>
* Bio-Medical Informatics Research Group<br>
* Date: 04/06/2012
*/
public class WebProtegeSignupDialogController extends WebProtegeOKCancelDialogController<SignupInfo> {

    public static final String TITLE = "Create an Account";

    private final WebProtegeSignupDialogForm form;

    public WebProtegeSignupDialogController() {
        super(TITLE);
        form = new WebProtegeSignupDialogForm();
        addDialogValidator(form);

        setDialogButtonHandler(DialogButton.OK, new WebProtegeDialogButtonHandler<SignupInfo>() {
            public void handleHide(SignupInfo data, WebProtegeDialogCloser closer) {
                doSignup(data, closer);
            }
        });
        setDialogButtonHandler(DialogButton.CANCEL, new WebProtegeDialogButtonHandler<SignupInfo>() {
            @Override
            public void handleHide(SignupInfo data, WebProtegeDialogCloser closer) {
                closer.hide();
            }
        });
    }

    @Override
    public Widget getWidget() {
        return form;
    }

    @Override
    public Optional<Focusable> getInitialFocusable() {
        return form.getInitialFocusable();
    }

    @Override
    public SignupInfo getData() {
        return form.getData();
    }



    ////////////////////

    private void doSignup(final SignupInfo data, final WebProtegeDialogCloser closer) {
        HumanVerificationServiceProvider verificationServiceProvider = data.getVerificationServiceProvider();
        verificationServiceProvider.runVerification(new HumanVerificationHandler() {
            @Override
            public void handleVerificationSuccess() {
                handleSuccess(data, closer);
            }

            @Override
            public void handleVerificationFailure(String errorMessage) {
                MessageBox.showAlert(errorMessage);
            }
        });
    }


    private void handleSuccess(final SignupInfo data, final WebProtegeDialogCloser dialogCloser) {
        final AdminServiceManager adminServiceManager = AdminServiceManager.getInstance();
        adminServiceManager.getNewSalt(new AsyncCallback<String>() {
            public void onFailure(Throwable caught) {
                MessageBox.showAlert("Error",
                        "There was a problem registering the specified user account. " +
                                "Please contact admin. (Problem " + caught.getMessage() + ")");
            }

            public void onSuccess(String salt) {
                HashAlgorithm hashAlgorithm = new HashAlgorithm();
                String userName = data.getUserName();
                String email = data.getEmailAddress().getEmailAddress();
                String hashedPassword = hashAlgorithm.md5(salt + data.getPassword());
                adminServiceManager.registerUserViaEncrption(userName, hashedPassword, email, new AsyncCallback<UserData>() {
                    public void onFailure(Throwable caught) {
                        if(caught instanceof UserNameAlreadyExistsException) {
                            String username = ((UserNameAlreadyExistsException) caught).getUsername();
                            MessageBox.showAlert("User name already taken", "A user named "
                                    + username
                                    + " is already registered.  Please choose another name.");
                        }
                        else if(caught instanceof UserEmailAlreadyExistsException) {
                            String email = ((UserEmailAlreadyExistsException) caught).getEmailAddress();
                            MessageBox.showAlert("Email address already taken", "The email address "
                                    + email
                                    + " is already taken.  Please choose a different email address.");
                        }
                        else if(caught instanceof UserRegistrationException) {
                            MessageBox.showAlert(caught.getMessage());
                        }
                        else {
                            MessageBox.showAlert("Error registering account",
                                    "There was a problem registering the specified user account.  " +
                                            "Please contact administrator.");
                        }
                    }

                    public void onSuccess(UserData result) {
                        MessageBox.showMessage("Registration complete",
                                "You have successfully registered.  " +
                                        "Please log in using the button/link on the top right.");
                        dialogCloser.hide();
                    }
                });
            }
        });

    }
}
TOP

Related Classes of edu.stanford.bmir.protege.web.client.ui.signup.WebProtegeSignupDialogController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.