org.spiffyui.spsample.client.AuthTestPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.spiffyui.spsample.client.AuthTestPanel.java

Source

/*******************************************************************************
 *
 * Copyright 2011 Spiffy UI Team   
 * 
 * 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.spiffyui.spsample.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
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.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

import org.spiffyui.client.JSUtil;
import org.spiffyui.client.rest.AuthUtil;
import org.spiffyui.client.rest.RESTException;
import org.spiffyui.client.rest.RESTility;
import org.spiffyui.client.rest.RESTObjectCallBack;
import org.spiffyui.client.widgets.FormFeedback;
import org.spiffyui.client.widgets.button.FancyButton;
import org.spiffyui.client.widgets.button.FancySaveButton;

/**
 * This is the authentication test panel
 *
 */
public class AuthTestPanel extends HTMLPanel implements KeyUpHandler {
    private static final SPSampleStrings STRINGS = (SPSampleStrings) GWT.create(SPSampleStrings.class);

    private TextBox m_url;
    private FormFeedback m_urlFeedback;

    private TextBox m_tokenType;
    private FormFeedback m_tokenTypeFeedback;

    private TextBox m_username;
    private FormFeedback m_usernameFeedback;

    private TextBox m_password;
    private FormFeedback m_passwordFeedback;

    private FancyButton m_test;

    private HTML m_message;

    private ArrayList<FormFeedback> m_feedbacks = new ArrayList<FormFeedback>();

    /**
     * Creates a new authentication test panel
     */
    public AuthTestPanel() {
        super("div", STRINGS.AuthTestPanel_html());

        getElement().setId("authTestPanel");

        RootPanel.get("mainContent").add(this);

        setVisible(false);

        /*
         authentication server URL
         */
        m_url = new TextBox();
        m_url.addKeyUpHandler(this);
        m_url.getElement().setId("authURLTxt");
        m_url.getElement().addClassName("wideTextField");
        add(m_url, "authURL");

        m_urlFeedback = new FormFeedback();
        m_feedbacks.add(m_urlFeedback);
        add(m_urlFeedback, "authURLRow");

        /*
         token type
         */
        m_tokenType = new TextBox();
        m_tokenType.addKeyUpHandler(this);
        m_tokenType.getElement().setId("authTokenTxt");
        m_tokenType.setText("X-OPAQUE");
        m_tokenType.getElement().addClassName("slimTextField");
        add(m_tokenType, "authToken");

        m_tokenTypeFeedback = new FormFeedback();
        m_feedbacks.add(m_tokenTypeFeedback);
        m_tokenTypeFeedback.setStatus(FormFeedback.VALID);
        add(m_tokenTypeFeedback, "authTokenRow");

        /*
         username
         */
        m_username = new TextBox();
        m_username.addKeyUpHandler(this);
        m_username.getElement().setId("authUsernameTxt");
        m_username.getElement().addClassName("wideTextField");
        add(m_username, "authUsername");

        m_usernameFeedback = new FormFeedback();
        m_feedbacks.add(m_usernameFeedback);
        add(m_usernameFeedback, "authUsernameRow");

        /*
         password
         */
        m_password = new PasswordTextBox();
        m_password.addKeyUpHandler(this);
        m_password.getElement().setId("authPasswordTxt");
        m_password.getElement().addClassName("wideTextField");
        add(m_password, "authPassword");

        m_passwordFeedback = new FormFeedback();
        m_feedbacks.add(m_passwordFeedback);
        add(m_passwordFeedback, "authPasswordRow");

        /*
         The big test button
         */
        m_test = new FancySaveButton(Index.getStrings().test());
        if (Index.isAppEngine()) {
            m_test.setEnabled(false);
            m_test.setText(Index.getStrings().installMessage());
        }

        m_test.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                login();
            }
        });

        add(m_test, "authTestButtons");
        updateFormStatus(null);

        m_message = new HTML();
        m_message.getElement().setId("authTestLongMessageWidget");
        add(m_message, "authTestLongMessage");
    }

    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() != KeyCodes.KEY_TAB) {
            updateFormStatus((Widget) event.getSource());
        }

        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER && m_test.isEnabled()) {
            login();
        }
    }

    private void updateFormStatus(Widget w) {
        if (w == m_url) {
            validateField(m_url, m_urlFeedback, Index.getStrings().invalidURL_ff_tt());
        } else if (w == m_tokenType) {
            validateField(m_tokenType, m_tokenTypeFeedback, Index.getStrings().invalidTokenType_ff_tt());
        } else if (w == m_username) {
            validateField(m_username, m_usernameFeedback, Index.getStrings().invalidUsername_ff_tt());
        } else if (w == m_password) {
            validateField(m_password, m_passwordFeedback, Index.getStrings().invalidPassword_ff_tt());
        }

        if (Index.isAppEngine()) {
            m_test.setEnabled(false);
            return;
        }

        /*
         * We only want to enable the save button if every field is valid
         */
        for (FormFeedback feedback : m_feedbacks) {
            if (feedback.getStatus() != FormFeedback.VALID) {
                m_test.setEnabled(false);
                return;
            }
        }

        m_test.setEnabled(true);
    }

    private void validateField(TextBox tb, FormFeedback feedback, String error) {
        if (tb.getText().length() > 1) {
            feedback.setStatus(FormFeedback.VALID);
            feedback.setTitle("");
        } else {
            feedback.setStatus(FormFeedback.WARNING);
            feedback.setTitle(error);
        }
    }

    private void appendMessage(String message) {
        m_message.setHTML(m_message.getHTML() + message);
    }

    private void login() {
        m_test.setInProgress(true);
        m_message.setHTML("");

        RESTility.setTokenType(m_tokenType.getText().trim());
        appendMessage(Index.getStrings().loggingIn(m_url.getText()));

        new AuthUtil().login(m_username.getText(), m_password.getText(), m_url.getText(),
                new RESTObjectCallBack<String>() {
                    public void success(String info) {
                        appendMessage("<br /><span class=\"testSuccess\">" + Index.getStrings().loggedIn(info)
                                + "</span><br />");
                        logout();
                    }

                    public void error(String message) {
                        m_test.setInProgress(false);
                        appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().loginFail1(message)
                                + "</span><br />");
                    }

                    public void error(RESTException e) {
                        m_test.setInProgress(false);
                        appendMessage("<br /><span class=\"testFail\">"
                                + Index.getStrings().loginFail2(e.getCode(), e.getReason()) + "</span><br />");
                    }
                });
    }

    private void logout() {
        appendMessage("<br />" + Index.getStrings().logoutAttempt());
        new AuthUtil().logout(new RESTObjectCallBack<String>() {
            public void success(String info) {
                appendMessage("<br /><span class=\"testSuccess\">" + Index.getStrings().logoutSuccess(info)
                        + "</span><br />");
                JSUtil.hide("#header_actionsBlock", "fast");
                m_test.setInProgress(false);
            }

            public void error(String message) {
                m_test.setInProgress(false);
                appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().logoutFail1(message)
                        + "</span><br />");
            }

            public void error(RESTException e) {
                m_test.setInProgress(false);
                appendMessage("<br /><span class=\"testFail\">"
                        + Index.getStrings().logoutFail2(e.getCode(), e.getReason()) + "</span><br />");
            }
        });
    }
}