/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.desktopapp.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.desktopapp.client.images.DesktopImages;
import com.sencha.gxt.desktopapp.client.utility.Utility;
import com.sencha.gxt.widget.core.client.Window;
import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.CheckBox;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.FormPanel.LabelAlign;
import com.sencha.gxt.widget.core.client.form.PasswordField;
import com.sencha.gxt.widget.core.client.form.TextField;
/**
* Provides a login view capable of gathering login parameters from a user.
* <p/>
* Implementation Notes:
* <p/>
* TODO: Add translatable Messages for user visible text
*
* @see LoginView
*/
public class LoginViewImpl implements LoginView, Editor<LoginModel> {
/**
* Uses the GWT Editor / Driver framework to create a driver capable of
* transferring data between the model to the view (editor).
*/
interface LoginModelDriver extends SimpleBeanEditorDriver<LoginModel, LoginViewImpl> {
}
private LoginPresenter loginPresenter;
private Window window;
private VerticalLayoutContainer verticalLayoutContainer;
private VerticalLayoutData layoutData;
private Margins margins;
private FieldLabel userNameFieldLabel;
private FieldLabel passwordFieldLabel;
private TextField userNameTextField;
private PasswordField passwordField;
private CheckBox isNewUserCheckBox;
private TextButton loginButton;
private SelectHandler loginButtonSelectHandler;
private SimpleBeanEditorDriver<LoginModel, Editor<? super LoginModel>> loginModelDriver;
/**
* Creates a login view that uses the services of the specified login
* presenter to perform the login.
*
* @param loginPresenter the login presenter
*/
public LoginViewImpl(LoginPresenter loginPresenter) {
this.loginPresenter = loginPresenter;
}
@Override
public SimpleBeanEditorDriver<LoginModel, Editor<? super LoginModel>> getLoginModelDriver() {
if (loginModelDriver == null) {
loginModelDriver = GWT.create(LoginModelDriver.class);
loginModelDriver.initialize(this);
}
return loginModelDriver;
}
@Override
public void hide() {
getWindow().hide();
}
@Override
public void onDuplicateUserName() {
new AlertMessageBox("Login", "The specified user name already exists.").show();
}
@Override
public void onInvalidUserNameOrPassword() {
new AlertMessageBox("Login", "The specified user name does not exist.").show();
}
@Override
public void onValidationError() {
new AlertMessageBox("Validation Errors", "Please correct the errors and try again").show();
}
@Override
public void show() {
getWindow().setFocusWidget(getUserNameTextField());
getWindow().show();
}
/**
* Provides GWT Editor / Driver framework support for displaying and entering
* the "new user" boolean.
*
* @return a check box that provides the user interface for the "new user"
* boolean
*/
@Path("newUser")
CheckBox getIsNewUserCheckBox() {
if (isNewUserCheckBox == null) {
isNewUserCheckBox = new CheckBox();
isNewUserCheckBox.setBoxLabel("Create new user");
}
return isNewUserCheckBox;
}
/**
* Provides the GWT Editor / Driver framework support for displaying and
* entering the password.
*
* @return a field that provides the user interface for the password
*/
@Path("password")
PasswordField getPasswordField() {
if (passwordField == null) {
passwordField = new PasswordField();
}
return passwordField;
}
/**
* Provides the GWT Editor / Driver framework support for displaying and
* entering the user name.
*
* @return a field that provides the user interface for the user name
*/
@Path("userName")
TextField getUserNameTextField() {
if (userNameTextField == null) {
userNameTextField = new TextField();
userNameTextField.setAllowBlank(false);
}
return userNameTextField;
}
private VerticalLayoutData getLayoutData() {
if (layoutData == null) {
layoutData = new VerticalLayoutData(1, -1, getMargins());
}
return layoutData;
}
private TextButton getLoginButton() {
if (loginButton == null) {
loginButton = new TextButton("Login");
loginButton.addSelectHandler(getLoginButtonSelectHandler());
}
return loginButton;
}
private SelectHandler getLoginButtonSelectHandler() {
if (loginButtonSelectHandler == null) {
loginButtonSelectHandler = new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
getLoginPresenter().onLogin();
}
};
}
return loginButtonSelectHandler;
}
private LoginPresenter getLoginPresenter() {
return loginPresenter;
}
private Margins getMargins() {
if (margins == null) {
margins = new Margins(5);
}
return margins;
}
private FieldLabel getPasswordFieldLabel() {
if (passwordFieldLabel == null) {
passwordFieldLabel = new FieldLabel(getPasswordField(), "Password");
}
return passwordFieldLabel;
}
private FieldLabel getUserNameFieldLabel() {
if (userNameFieldLabel == null) {
userNameFieldLabel = new FieldLabel(getUserNameTextField(), "User Name");
}
return userNameFieldLabel;
}
private VerticalLayoutContainer getVerticalLayoutContainer() {
if (verticalLayoutContainer == null) {
verticalLayoutContainer = new VerticalLayoutContainer();
verticalLayoutContainer.add(getUserNameFieldLabel(), getLayoutData());
verticalLayoutContainer.add(getPasswordFieldLabel(), getLayoutData());
verticalLayoutContainer.add(getIsNewUserCheckBox(), getLayoutData());
Utility.alignLabels(LabelAlign.TOP, verticalLayoutContainer);
}
return verticalLayoutContainer;
}
private Window getWindow() {
if (window == null) {
window = new Window();
window.setHeadingText("Desktop Login");
window.getHeader().setIcon(DesktopImages.INSTANCE.door_in());
window.setPixelSize(200, 200);
window.setButtonAlign(BoxLayoutPack.END);
window.setModal(true);
window.setBlinkModal(true);
window.setClosable(false);
window.setOnEsc(false);
window.add(getVerticalLayoutContainer());
window.addButton(getLoginButton());
}
return window;
}
}