opus.gwt.management.console.client.deployer.ProjectOptionsPanel.java Source code

Java tutorial

Introduction

Here is the source code for opus.gwt.management.console.client.deployer.ProjectOptionsPanel.java

Source

/*############################################################################
# Copyright 2010 North Carolina State University                             #
#                                                                            #
#   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 opus.gwt.management.console.client.deployer;

import opus.gwt.management.console.client.ClientFactory;
import opus.gwt.management.console.client.event.PanelTransitionEvent;
import opus.gwt.management.console.client.event.UpdateDBOptionsEvent;
import opus.gwt.management.console.client.event.UpdateDBOptionsEventHandler;
import opus.gwt.management.console.client.resources.ProjectDeployerCss.ProjectDeployerStyle;
import opus.gwt.management.console.client.tools.TooltipPanel;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.http.client.URL;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

public class ProjectOptionsPanel extends Composite {

    private static BuildProjectPage2UiBinder uiBinder = GWT.create(BuildProjectPage2UiBinder.class);

    interface BuildProjectPage2UiBinder extends UiBinder<Widget, ProjectOptionsPanel> {
    }

    private EventBus eventBus;

    @UiField
    TextBox usernameTextBox;
    @UiField
    TextBox emailTextBox;
    @UiField
    PasswordTextBox passwordTextBox;
    @UiField
    PasswordTextBox passwordConfirmTextBox;
    @UiField
    Button nextButton;
    @UiField
    Button previousButton;
    @UiField
    HTMLPanel projectOptionsPanel;
    @UiField
    ListBox idProvider;
    @UiField
    TooltipPanel active;
    @UiField
    ProjectDeployerStyle deployer;
    @UiField
    Label passwordError;
    @UiField
    Label emailError;

    public ProjectOptionsPanel(ClientFactory clientFactory) {
        initWidget(uiBinder.createAndBindUi(this));
        this.eventBus = clientFactory.getEventBus();
        setTooltipInitialState();
        registerHandlers();
        passwordError.setText("");
        emailError.setText("");
    }

    private void registerHandlers() {
        eventBus.addHandler(UpdateDBOptionsEvent.TYPE, new UpdateDBOptionsEventHandler() {
            public void onUpdateDBOptions(UpdateDBOptionsEvent event) {
                setAllowedAuthApps(event.getDBOptionsData().getAllowedAuthApps());
            }
        });
    }

    public void reset() {
        usernameTextBox.setText("");
        emailTextBox.setText("");
        passwordTextBox.setText("");
        passwordConfirmTextBox.setText("");
    }

    public void setAllowedAuthApps(String allowedAuthApps) {
        int size = idProvider.getItemCount();
        for (int i = 0; i < size; i++) {
            idProvider.removeItem(0);
        }
        String[] options = allowedAuthApps.split(",");
        for (String option : options) {
            idProvider.addItem(option, option);
        }
    }

    @UiHandler("usernameTextBox")
    void usernameTextBoxOnFocus(FocusEvent event) {
        active.setVisible(true);

        int x = getTooltipPosition(usernameTextBox)[0];
        int y = getTooltipPosition(usernameTextBox)[1];

        active.setGray();
        setTooltipPosition(x, y);
        setTooltipText("Optional Field. Enter username if you wish to create a superuser.");
    }

    @UiHandler("passwordTextBox")
    void passwordTextBoxOnFocus(FocusEvent event) {
        if (!passwordTextBox.getStyleName().equals(deployer.redBorder())) {
            active.setVisible(true);

            int x = getTooltipPosition(passwordTextBox)[0];
            int y = getTooltipPosition(passwordTextBox)[1];

            active.setGray();
            setTooltipPosition(x, y);
            setTooltipText("Must be entered if your wish to create a superuser.");
        }
    }

    @UiHandler("passwordConfirmTextBox")
    void passwordConfirmTextBoxOnFocus(FocusEvent event) {
        if (!passwordTextBox.getStyleName().equals(deployer.redBorder())) {
            active.setVisible(true);

            int x = getTooltipPosition(passwordConfirmTextBox)[0];
            int y = getTooltipPosition(passwordConfirmTextBox)[1];

            active.setGray();
            setTooltipPosition(x, y);
            setTooltipText("Confirm the previous password.");
        }
    }

    @UiHandler("emailTextBox")
    void emailTextBoxOnFocus(FocusEvent event) {
        if (!emailTextBox.getStyleName().equals(deployer.redBorder())) {
            active.setVisible(true);

            int x = getTooltipPosition(emailTextBox)[0];
            int y = getTooltipPosition(emailTextBox)[1];

            active.setGray();
            setTooltipPosition(x, y);
            setTooltipText("Enter your email address.");
        }
    }

    @UiHandler("usernameTextBox")
    void usernameTextBoxOnChange(KeyUpEvent event) {
        if (!usernameTextBox.getText().isEmpty() && !isEmailValid() && !isPasswordValid()) {
            setAllStyles();
            passwordError.setText("Passwords do not match");
            emailError.setText("Enter a valid email address");
        } else {
            removeAllStyles();
            passwordError.setText("");
            emailError.setText("");
        }
    }

    @UiHandler("passwordTextBox")
    void passwordTextBoxOnChange(KeyUpEvent event) {
        if (!usernameTextBox.getText().isEmpty()) {
            if (!isPasswordValid()) {
                active.hide();
                passwordError.setText("Passwords do not match");
                passwordTextBox.setStyleName(deployer.redBorder());
                passwordConfirmTextBox.setStyleName(deployer.redBorder());
            } else {
                passwordError.setText("");
                passwordTextBox.setStyleName(deployer.greyBorder());
                passwordConfirmTextBox.setStyleName(deployer.greyBorder());
            }
        } else {

        }
    }

    @UiHandler("passwordConfirmTextBox")
    void passwordConfirmTextBoxOnChange(KeyUpEvent event) {
        if (!usernameTextBox.getText().isEmpty()) {
            if (!isPasswordValid()) {
                active.hide();
                passwordError.setText("Passwords do not match");
                passwordTextBox.setStyleName(deployer.redBorder());
                passwordConfirmTextBox.setStyleName(deployer.redBorder());
            } else {
                passwordError.setText("");
                passwordTextBox.setStyleName(deployer.greyBorder());
                passwordConfirmTextBox.setStyleName(deployer.greyBorder());
            }
        } else {

        }
    }

    @UiHandler("emailTextBox")
    void emailTextBoxOnChange(KeyUpEvent event) {
        if (!usernameTextBox.getText().isEmpty()) {
            if (!isEmailValid()) {
                active.hide();
                emailError.setText("Enter a valid email address");
                emailTextBox.setStyleName(deployer.redBorder());
            } else {
                emailError.setText("");
                emailTextBox.setStyleName(deployer.greyBorder());
            }
        } else {

        }
    }

    @UiHandler("nextButton")
    void handleNextButton(ClickEvent event) {
        if (validateFields()) {
            eventBus.fireEvent(new PanelTransitionEvent(PanelTransitionEvent.TransitionTypes.NEXT, this));
        } else {
            Window.alert("Validation error");
        }
    }

    @UiHandler("previousButton")
    void handlePreviousButton(ClickEvent event) {
        eventBus.fireEvent(new PanelTransitionEvent(PanelTransitionEvent.TransitionTypes.PREVIOUS, this));
    }

    public void setFocus() {
        usernameTextBox.setFocus(true);
    }

    public String getPostData() {
        StringBuffer postData = new StringBuffer();
        postData.append("&superusername=");
        postData.append(URL.encodeQueryString(usernameTextBox.getValue()));
        postData.append("&superpassword=");
        postData.append(URL.encodeQueryString(passwordTextBox.getValue()));
        postData.append("&superpasswordconfirm=");
        postData.append(URL.encodeQueryString(passwordConfirmTextBox.getValue()));
        postData.append("&superemail=");
        postData.append(URL.encodeQueryString(emailTextBox.getValue()));
        postData.append("&idprovider=");
        postData.append(URL.encodeQueryString(idProvider.getValue(idProvider.getSelectedIndex())));
        return postData.toString();
    }

    public boolean validateFields() {
        if (!usernameTextBox.getText().isEmpty()) {
            if (passwordTextBox.getText().isEmpty()) {
                return false;
            } else if (!passwordTextBox.getText().equals(passwordConfirmTextBox.getText())) {
                return false;
            } else if (!isEmailValid()) {
                return false;
            }
        }
        return true;
    }

    private void setAllStyles() {
        passwordTextBox.setStyleName(deployer.redBorder());
        passwordConfirmTextBox.setStyleName(deployer.redBorder());
        emailTextBox.setStyleName(deployer.redBorder());
    }

    private void removeAllStyles() {
        passwordTextBox.setStyleName(deployer.greyBorder());
        passwordConfirmTextBox.setStyleName(deployer.greyBorder());
        emailTextBox.setStyleName(deployer.greyBorder());
    }

    private boolean isEmailValid() {
        if (emailTextBox.getText().isEmpty()) {
            return false;
        } else if (!emailTextBox.getText().matches("[^@]+@[^@]+\\.\\w+")) {
            return false;
        }

        return true;
    }

    private boolean isPasswordValid() {
        if (passwordTextBox.getText().isEmpty()) {
            return false;
        } else if (!passwordTextBox.getText().equals(passwordConfirmTextBox.getText())) {
            return false;
        }

        return true;
    }

    /**
     * Set the tooltips initial state on page load
     */
    private void setTooltipInitialState() {
        active.setVisible(false);
    }

    /**
     * Set the position of a tooltip relative to the browser window
     * @param x the x coordinate
     * @param y the y coordinate
     */
    private void setTooltipPosition(int x, int y) {
        active.setPopupPosition(x, y);
    }

    /**
     * Set the text of a tooltip
     * @param text the text to set
     */
    private void setTooltipText(String text) {
        active.hide();
        active.setText(text);
        active.show();
    }

    /**
     * Return the tooltip position as an array in for them [x, y]
     * @param textbox the textbox to get the position of
     * @return tooltip position
     */
    private int[] getTooltipPosition(TextBox textbox) {
        int[] pos = new int[2];

        pos[0] = textbox.getAbsoluteLeft() + textbox.getOffsetWidth() + 5;
        pos[1] = textbox.getAbsoluteTop() + 2;

        return pos;
    }

    /**
     * Return the tooltip position as an array in for them [x, y]
     * @param textbox the textbox to get the position of
     * @return tooltip position
     */
    private int[] getTooltipPosition(PasswordTextBox textbox) {
        int[] pos = new int[2];

        pos[0] = textbox.getAbsoluteLeft() + textbox.getOffsetWidth() + 5;
        pos[1] = textbox.getAbsoluteTop() + 2;

        return pos;
    }
}