Package com.daikit.daikit4gxt.client.ui.popup

Source Code of com.daikit.daikit4gxt.client.ui.popup.ConnectionPopup

/**
* Copyright (C) 2013 DaiKit.com - daikit4gxt module (admin@daikit.com)
*
*         Project home : http://code.daikit.com/daikit4gxt
*
* 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.daikit.daikit4gxt.client.ui.popup;

import com.daikit.daikit4gxt.client.DkMain;
import com.daikit.daikit4gxt.client.action.BaseAction;
import com.daikit.daikit4gxt.client.log.BaseLogger;
import com.daikit.daikit4gxt.shared.bean.ConnectionData;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.InlineLabel;
import com.sencha.gxt.cell.core.client.form.PasswordInputCell;
import com.sencha.gxt.cell.core.client.form.TextInputCell;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.Dialog;
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.HorizontalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer.HorizontalLayoutData;
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.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.PasswordField;
import com.sencha.gxt.widget.core.client.form.TextField;
import com.sencha.gxt.widget.core.client.form.validator.EmptyValidator;


/**
* The connection popup.
*
* @author tcaselli
* @version $Revision$ Last modifier: $Author$ Last commit: $Date$
*/
public class ConnectionPopup
{

  protected BaseLogger log = BaseLogger.getLog(ConnectionPopup.class);

  protected static ConnectionPopup instance;

  protected final int labelWidth = 80;

  /**
   * Return an instance of {@link ConnectionPopup}
   *
   * @return an instance of {@link ConnectionPopup}
   */
  public static ConnectionPopup instance()
  {
    if (instance == null)
    {
      instance = new ConnectionPopup();
      instance.initialize();
    }
    return instance;
  }

  protected MyAbstractDialog dialogBox;
  protected VerticalLayoutContainer verticalLayoutContainer;
  protected TextField loginTextField;
  protected PasswordField passwordTextField;
  protected FieldLabel loginFieldLabel;
  protected FieldLabel passwordFieldLabel;

  protected final int WIDTH_WITHOUT_PASSWORD = 400;
  protected final int WIDTH_WITH_PASSWORD = 550;

  protected BaseAction<?> chainActionIfLoginSucceded = null;

  protected ConnectionPopup()
  {
    // Nothing done here
  }

  protected void initialize()
  {
    createDialog();
    createVerticalLayoutContainer();
    createLoginTextField();
    createPasswordTextField();
    addFieldsInLayout();
  }

  protected void createDialog()
  {
    dialogBox = new MyAbstractDialog()
    {
      @Override
      protected void onButtonPressed(final TextButton button)
      {
        if (button == getButtonBar().getItemByItemId(PredefinedButton.OK.name()))
        {
          onSubmit();
        }
        else if (button == getButtonBar().getItemByItemId(PredefinedButton.CANCEL.name()))
        {
          onCancel();
        }
        super.onButtonPressed(button);
      }
    };
    dialogBox.setModal(true);
    // dialogBox.setIcon(null);
    dialogBox.setHeadingText(DkMain.i18n().connection_popup_title(DkMain.i18n().appTitle()));
    dialogBox.setPredefinedButtons(Dialog.PredefinedButton.OK, Dialog.PredefinedButton.CANCEL);
    dialogBox.setButtonAlign(BoxLayoutPack.CENTER);
  }

  protected void createVerticalLayoutContainer()
  {
    verticalLayoutContainer = new VerticalLayoutContainer();
    verticalLayoutContainer.getElement().getStyle().setProperty("textAlign", "center");
    verticalLayoutContainer.getElement().getStyle().setPaddingTop(3, Unit.PX);

    final String connectionMessage = DkMain.controller().getConnectionPopupMessage();
    if (connectionMessage != null)
    {
      final InlineLabel text = new InlineLabel(connectionMessage);
      // ("font-weight", "bold");
      final VerticalLayoutData varticalLayoutData = new VerticalLayoutData(1, -1);
      varticalLayoutData.setMargins(new Margins(5, 0, 10, 0));
      verticalLayoutContainer.add(text, varticalLayoutData);
    }
    dialogBox.add(verticalLayoutContainer);
  }

  protected void createLoginTextField()
  {
    loginTextField = new TextField(new TextInputCell()
    {
      @Override
      protected void onEnterKeyDown(final com.google.gwt.cell.client.Cell.Context context, final Element parent,
          final String value, final NativeEvent event, final ValueUpdater<String> valueUpdater)
      {
        super.onEnterKeyDown(context, parent, value, event, valueUpdater);
        onSubmit();
      }
    });
    loginFieldLabel = new FieldLabel(loginTextField, DkMain.i18n().connection_popup_login_label());
    loginFieldLabel.setLabelWidth(labelWidth);

    loginTextField.addValidator(new EmptyValidator<String>());
  }

  protected void createPasswordTextField()
  {
    passwordTextField = new PasswordField(new PasswordInputCell()
    {
      @Override
      protected void onEnterKeyDown(final com.google.gwt.cell.client.Cell.Context context, final Element parent,
          final String value, final NativeEvent event, final ValueUpdater<String> valueUpdater)
      {
        super.onEnterKeyDown(context, parent, value, event, valueUpdater);
        onSubmit();
      }
    });
    passwordFieldLabel = new FieldLabel(passwordTextField, DkMain.i18n().connection_popup_password_label());
    passwordFieldLabel.setLabelWidth(labelWidth);

    passwordTextField.addValidator(new EmptyValidator<String>());
  }

  protected void addFieldsInLayout()
  {
    if (DkMain.config().isConnectionNeedingPassword())
    {
      dialogBox.setWidth(WIDTH_WITH_PASSWORD);
      final HorizontalLayoutContainer horizontalLayoutContainer = new HorizontalLayoutContainer();
      verticalLayoutContainer.add(horizontalLayoutContainer);

      final HorizontalLayoutData leftData = new HorizontalLayoutData(0.5, 1);
      final VerticalLayoutContainer left = new VerticalLayoutContainer();
      horizontalLayoutContainer.add(left, leftData);

      final HorizontalLayoutData rightData = new HorizontalLayoutData(0.5, 1);
      final VerticalLayoutContainer right = new VerticalLayoutContainer();
      horizontalLayoutContainer.add(right, rightData);

      left.add(loginFieldLabel);
      right.add(passwordFieldLabel);
    }
    else
    {
      dialogBox.setWidth(WIDTH_WITHOUT_PASSWORD);
      verticalLayoutContainer.add(loginFieldLabel);
    }
  }

  protected void onCancel()
  {
    dialogBox.hide();
  }

  protected void onSubmit()
  {
    validate();
    final String login = loginTextField.getValue();
    final String password = DkMain.config().isConnectionNeedingPassword() ? passwordTextField.getValue() : null;
    if (!loginTextField.isValid() || DkMain.config().isConnectionNeedingPassword() && !passwordTextField.isValid())
    {
      showInvalidMessageBox();
    }
    else
    {
      final ConnectionData connectionData = createConnectionData(login, password);
      DkMain.controller().doConnect(connectionData, chainActionIfLoginSucceded);
      dialogBox.hide();
    }
  }

  protected ConnectionData createConnectionData(final String login, final String password)
  {
    final ConnectionData connectionData = new ConnectionData();
    connectionData.setLogin(login);
    connectionData.setPassword(password);
    return connectionData;
  }

  protected void validate()
  {
    loginTextField.validate();
    passwordTextField.validate();
  }

  /**
   * Show the Dialog box without a chain action if user login succeeded
   */
  public void show()
  {
    loginTextField.clearInvalid();
    passwordTextField.clearInvalid();
    loginTextField.focus();
    show(null);
  }

  protected void showInvalidMessageBox()
  {
    new AlertMessageBox(DkMain.i18n().connection_popup_bad_information_popup_title(), DkMain.i18n()
        .connection_popup_bad_information_popup_correct_fields()).show();
  }

  /**
   * Show the Dialog box with a chain action if the user login succeeded
   *
   * @param chainActionIfLoginSucceded
   *           the chain action
   */
  public void show(final BaseAction<?> chainActionIfLoginSucceded)
  {
    this.chainActionIfLoginSucceded = chainActionIfLoginSucceded;
    dialogBox.show();
  }

}
TOP

Related Classes of com.daikit.daikit4gxt.client.ui.popup.ConnectionPopup

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.