Package org.eurekastreams.web.client.ui.common.dialog.login

Source Code of org.eurekastreams.web.client.ui.common.dialog.login.LoginDialogContent

/*
* Copyright (c) 2009-2011 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.web.client.ui.common.dialog.login;

import org.eurekastreams.web.client.events.FormLoginCompleteEvent;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.common.dialog.BaseDialogContent;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

/**
* Template for a login dialog.
*/
public class LoginDialogContent extends BaseDialogContent
{
    /** The login form. */
    private final FormPanel loginForm = new FormPanel();

    /** The error label. */
    private final Label errorMessage = new Label("");

    /** The submit button. */
    private final Hyperlink submitButton = new Hyperlink("Submit", History.getToken());

    /** The cancel button. */
    private final Hyperlink cancelButton = new Hyperlink("Cancel", History.getToken());

    /** The user name text box. */
    private final TextBox username = new TextBox();

    /** The password text box. */
    private final PasswordTextBox password = new PasswordTextBox();

    /** Container for login elements. */
    private final FlowPanel loginContentContainer = new FlowPanel();

    /*
     * Note: Current approach to handling the problem where a user keeps the app up in the background for a long
     * duration during which the session expires (since we no longer do any polling when the app goes inactive) and thus
     * renders the app dead is to *always* use the "remember me" (persistent logon) feature. (Always for form-based
     * logon; not applicable with pre-auth.) Leaving the checkbox commented out for now, since it is highly conceivable
     * we'll come up with a different approach.
     */
    // /** Remember me checkbox. */
    // private final CheckBox rememberMe = new CheckBox("Keep me logged in.");

    /**
     * Default constructor. Builds up widgets.
     */
    public LoginDialogContent()
    {
        setupWidgets();
        setupEvents();
    }

    /**
     * Builds the UI.
     */
    private void setupWidgets()
    {
        loginForm.setAction("/j_spring_security_check");
        loginForm.setMethod(FormPanel.METHOD_POST);

        loginContentContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().loginContentContainer());

        FlowPanel loginPanel = new FlowPanel();
        loginPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().loginContent());
        loginForm.setWidget(loginPanel);

        FlowPanel navPanel = new FlowPanel();
        navPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().loginNavPanel());
        navPanel.add(errorMessage);
        loginContentContainer.add(navPanel);

        submitButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().loginButton());
        cancelButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().cancelButton());

        final FlowPanel usernamePanel = new FlowPanel();
        usernamePanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formElement());
        Label usernameLabel = new Label("Username: ");
        usernameLabel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formLabel());
        usernamePanel.add(usernameLabel);

        username.setName("j_username");
        usernamePanel.add(username);

        loginPanel.add(usernamePanel);

        final FlowPanel passwordPanel = new FlowPanel();
        Label passwordLabel = new Label("Password: ");
        passwordPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formElement());
        passwordLabel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formLabel());
        passwordPanel.add(passwordLabel);

        password.setName("j_password");
        passwordPanel.add(password);

        Hidden returnTo = new Hidden("spring-security-redirect", "/login.html");
        returnTo.setName("spring-security-redirect");
        loginPanel.add(returnTo);

        loginPanel.add(passwordPanel);
        // rememberMe.setName("_spring_security_remember_me");
        // loginPanel.add(rememberMe);
        Hidden usePersistentLogon = new Hidden("_spring_security_remember_me", "on");
        usePersistentLogon.setName("_spring_security_remember_me");
        loginPanel.add(usePersistentLogon);

        errorMessage.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formErrorBox());
        errorMessage.setVisible(false);

        loginContentContainer.add(loginPanel);

        FlowPanel buttonPanel = new FlowPanel();
        buttonPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().loginButtonPanel());
        buttonPanel.add(submitButton);
        buttonPanel.add(cancelButton);
        loginContentContainer.add(buttonPanel);

        loginForm.add(loginContentContainer);
    }

    /**
     * Wires up events.
     */
    private void setupEvents()
    {
        submitButton.addClickHandler(new ClickHandler()
        {
            public void onClick(final ClickEvent inArg0)
            {
                loginForm.submit();
            }
        });

        KeyUpHandler enterKeyHandler = new KeyUpHandler()
        {
            public void onKeyUp(final KeyUpEvent ev)
            {
                if (ev.getNativeKeyCode() == KeyCodes.KEY_ENTER && !ev.isAnyModifierKeyDown())
                {
                    loginForm.submit();
                }
            }
        };
        username.addKeyUpHandler(enterKeyHandler);
        password.addKeyUpHandler(enterKeyHandler);
        // rememberMe.addKeyUpHandler(enterKeyHandler);

        cancelButton.addClickHandler(new ClickHandler()
        {
            public void onClick(final ClickEvent inArg0)
            {
                close();
            }
        });

        loginForm.addSubmitCompleteHandler(new SubmitCompleteHandler()
        {
            public void onSubmitComplete(final SubmitCompleteEvent ev)
            {
                // result ends (or may end) with a newline, so check using startsWith
                String formReturnValue = ev.getResults();
                if (formReturnValue.startsWith("LOGIN_SUCCESS"))
                {
                    errorMessage.setVisible(false);
                    close();
                    Session.getInstance().getEventBus().notifyObservers(new FormLoginCompleteEvent());
                }
                else if (formReturnValue.startsWith("LOGIN_DISABLED"))
                {
                    errorMessage.setVisible(false);
                    close();
                    Window.Location.assign("/requestaccess.html");
                }
                else
                {
                    errorMessage.setText("The user name or password you entered was incorrect.");
                    errorMessage.setVisible(true);
                }
            }
        });
    }

    /**
     * The title of the login dialog.
     *
     * @return the title.
     */
    public final String getTitle()
    {
        return "Login";
    }

    /**
     * The login form.
     *
     * @return the login form.
     */
    public final Widget getBody()
    {
        return loginForm;
    }

    /**
     * The CSS class to use for this dialog.
     *
     * @return the name of the CSS class to use.
     */
    @Override
    public String getCssName()
    {
        return StaticResourceBundle.INSTANCE.coreCss().loginDialog();
    }

    /**
     * Provides a hook to fire off events when the dialog is shown.
     */
    @Override
    public void show()
    {
        username.setText("");
        password.setText("");
        errorMessage.setVisible(false);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void afterShow()
    {
        username.setFocus(true);
    }
}
TOP

Related Classes of org.eurekastreams.web.client.ui.common.dialog.login.LoginDialogContent

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.