com.eduworks.russel.ui.client.pagebuilder.screen.LoginScreen.java Source code

Java tutorial

Introduction

Here is the source code for com.eduworks.russel.ui.client.pagebuilder.screen.LoginScreen.java

Source

/*
Copyright 2012-2013 Eduworks 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 com.eduworks.russel.ui.client.pagebuilder.screen;

import com.eduworks.gwt.client.component.HtmlTemplates;
import com.eduworks.gwt.client.net.callback.ESBCallback;
import com.eduworks.gwt.client.net.callback.EventCallback;
import com.eduworks.gwt.client.net.packet.ESBPacket;
import com.eduworks.gwt.client.pagebuilder.PageAssembler;
import com.eduworks.gwt.client.pagebuilder.modal.ModalDispatch;
import com.eduworks.gwt.client.pagebuilder.overlay.OverlayDispatch;
import com.eduworks.gwt.client.pagebuilder.screen.ScreenDispatch;
import com.eduworks.gwt.client.pagebuilder.screen.ScreenTemplate;
import com.eduworks.russel.ui.client.Constants;
import com.eduworks.russel.ui.client.Russel;
import com.eduworks.russel.ui.client.handler.StatusHandler;
import com.eduworks.russel.ui.client.net.RusselApi;
import com.google.gwt.dom.client.Document;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;

/**
 * LoginScreen class
 * Extends ScreenTemplate
 * Defines methods and handlers for the Login screen.
 * 
 * @author Eduworks Corporation
 */
public class LoginScreen extends ScreenTemplate {
    private final String LOGIN_BAD_LOGIN = "Login name or password is not valid.";
    private final String SERVER_UNAVAILABLE = "The server is unavailable.";

    /**
     * lostFocus In place to handle any processing requirements required when this screen loses focus.
     * Called by ScreenDispatch for all RUSSEL screens.
     */
    public void lostFocus() {
    }

    /**
     * loginListener Processes the username and password entered on the login screen.
     */
    protected EventCallback loginListener = new EventCallback() {
        @Override
        public void onEvent(Event event) {
            if (event.getTypeInt() == Event.ONCLICK || event.getKeyCode() == KeyCodes.KEY_ENTER) {
                final String loginName = ((TextBox) PageAssembler.elementToWidget("loginName", PageAssembler.TEXT))
                        .getText();
                if (loginName.equalsIgnoreCase("guest")) {
                    final Element oldErrorDialog = (Element) Document.get().getElementById("errorDialog");
                    if (oldErrorDialog != null)
                        oldErrorDialog.removeFromParent();
                    final HTML errorDialog = new HTML(Russel.htmlTemplates.getErrorWidget().getText());
                    RootPanel.get("errorContainer").add(errorDialog);
                    enableLogin0(true);
                    ((Label) PageAssembler.elementToWidget("errorMessage", PageAssembler.LABEL))
                            .setText(LOGIN_BAD_LOGIN);
                    PageAssembler.attachHandler("errorClose", Event.ONMOUSEUP, new EventCallback() {
                        @Override
                        public void onEvent(Event event) {
                            errorDialog.removeFromParent();
                        }
                    });
                } else {
                    enableLogin0(false);
                    RusselApi.login(loginName, ((PasswordTextBox) PageAssembler.elementToWidget("loginPassword",
                            PageAssembler.PASSWORD)).getText(), new ESBCallback<ESBPacket>() {
                                @Override
                                public void onSuccess(ESBPacket result) {
                                    if (result.getPayloadString() == null)
                                        onFailure(new Throwable(LOGIN_BAD_LOGIN));
                                    else {
                                        RusselApi.sessionId = result.getPayloadString();
                                        RusselApi.username = loginName;
                                        PageAssembler.setTemplate(Russel.htmlTemplates.getHeader().getText(),
                                                Russel.htmlTemplates.getFooter().getText(), "contentPane");
                                        prepTemplateHooks0();
                                        Constants.loggedInCheck.scheduleRepeating(1800000);
                                        StatusHandler.initialize();
                                        String tempDetailId = Russel.getDetailId();
                                        if (tempDetailId == null)
                                            Russel.screen.loadScreen(new HomeScreen(), true);
                                        else
                                            Russel.screen.loadScreen(new DetailScreen(tempDetailId), true);
                                    }
                                }

                                @Override
                                public void onFailure(Throwable caught) {
                                    final Element oldErrorDialog = (Element) Document.get()
                                            .getElementById("errorDialog");
                                    if (oldErrorDialog != null)
                                        oldErrorDialog.removeFromParent();

                                    final HTML errorDialog = new HTML(
                                            Russel.htmlTemplates.getErrorWidget().getText());
                                    RootPanel.get("errorContainer").add(errorDialog);
                                    enableLogin0(true);
                                    if (caught.getMessage().indexOf("502") != -1
                                            || caught.getMessage().indexOf("503") != -1
                                            || caught.getMessage().indexOf("System Error") != -1
                                            || caught.getMessage().indexOf("404") != -1)
                                        ((Label) PageAssembler.elementToWidget("errorMessage", PageAssembler.LABEL))
                                                .setText(SERVER_UNAVAILABLE);
                                    else
                                        ((Label) PageAssembler.elementToWidget("errorMessage", PageAssembler.LABEL))
                                                .setText(LOGIN_BAD_LOGIN);
                                    PageAssembler.attachHandler("errorClose", Event.ONMOUSEUP, new EventCallback() {
                                        @Override
                                        public void onEvent(Event event) {
                                            errorDialog.removeFromParent();
                                        }
                                    });
                                }
                            });
                }

            }
        }
    };

    /**
     * enableLogin Sets the state of the login form.
     * @param s Enables the login form if set to true, disables it if set to false.
     */
    private void enableLogin0(boolean s) {
        ((TextBox) PageAssembler.elementToWidget("loginName", PageAssembler.TEXT)).setEnabled(s);
        ((PasswordTextBox) PageAssembler.elementToWidget("loginPassword", PageAssembler.PASSWORD)).setEnabled(s);
        ((Anchor) PageAssembler.elementToWidget("loginButton", PageAssembler.A)).setEnabled(s);
    }

    private void loggingOut() {
        Constants.loggedInCheck.cancel();
        Russel.screen.clearHistory();
        Russel.screen.loadScreen(new LoginScreen(), true);
    }

    /**
     * prepTemplateHooks Performs setup for LoginScreen template event handlers  
     */
    private void prepTemplateHooks0() {
        PageAssembler.attachHandler("r-menuLogout", Event.ONCLICK, new EventCallback() {
            @Override
            public void onEvent(Event event) {
                RusselApi.logout(new ESBCallback<ESBPacket>() {
                    @Override
                    public void onSuccess(ESBPacket result) {
                        loggingOut();
                    }

                    @Override
                    public void onFailure(Throwable caught) {
                        loggingOut();
                    }
                });
            }
        });
        PageAssembler.attachHandler("r-menuWorkspace", Event.ONCLICK, new EventCallback() {
            @Override
            public void onEvent(Event event) {
                Russel.screen.loadScreen(new HomeScreen(), true);
            }
        });

        PageAssembler.attachHandler("r-menuCollections", Event.ONCLICK, new EventCallback() {
            @Override
            public void onEvent(Event event) {
                Russel.screen.loadScreen(new FeatureScreen(FeatureScreen.COLLECTIONS_TYPE), true);
            }
        });

        PageAssembler.attachHandler("r-menuProjects", Event.ONCLICK, new EventCallback() {
            @Override
            public void onEvent(Event event) {
                Russel.screen.loadScreen(new FeatureScreen(FeatureScreen.PROJECTS_TYPE), true);
            }
        });
    }

    /**
     * display Renders the Login screen.
     */
    public void display() {
        PageAssembler.setTemplate("", "", "contentPane");
        PageAssembler.ready(new HTML(Russel.htmlTemplates.getLoginWidget().getText()));
        PageAssembler.buildContents();

        PageAssembler.attachHandler("loginButton", Event.ONCLICK, loginListener);
        PageAssembler.attachHandler("loginPassword", Event.ONKEYUP, loginListener);

        ((TextBox) PageAssembler.elementToWidget("loginName", PageAssembler.TEXT)).setFocus(true);
    }

    @Override
    public ScreenDispatch getDispatcher() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public OverlayDispatch getOverlayDispatcher() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public ModalDispatch getModalDispatcher() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public HtmlTemplates getTemplates() {
        // TODO Auto-generated method stub
        return null;
    }

}