Package org.yaac.client.ui

Source Code of org.yaac.client.ui.EGQLViewImpl$QueryViewImplUiBinder

package org.yaac.client.ui;

import static com.google.common.base.Strings.isNullOrEmpty;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.yaac.client.i18n.ErrorMessages;
import org.yaac.client.util.AutoBeanUtil;
import org.yaac.client.widget.egql.EGQLErrorPanel;
import org.yaac.client.widget.egql.EGQLImmediatePanel;
import org.yaac.client.widget.egql.EGQLResultPanel;
import org.yaac.shared.egql.EGQLConstant;
import org.yaac.shared.egql.Result;


import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
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.uibinder.client.UiTemplate;
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.TabLayoutPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

/**
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class EGQLViewImpl extends Composite implements EGQLView {

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

  @UiTemplate("EGQLView.ui.xml")
  interface QueryViewImplUiBinder extends UiBinder<Widget, EGQLViewImpl> {
  }
 
  @UiField
  TextArea cmdTxt;
 
  @UiField
  Button goBtn;
 
  @UiField
  TextBox batchSizeTxt;
 
  @UiField
  TextBox maxResultTxt;
 
  @UiField
  TabLayoutPanel resultTabPanel;
 
  private Presenter listener;
 
  private Map<String, EGQLResultPanel> resultPanelMap;

  // i18n
  private final ErrorMessages errorMessages;
 
  /**
   *
   */
  @Inject
  EGQLViewImpl(ErrorMessages errorMessages) {
    this.errorMessages = errorMessages;
   
    initWidget(uiBinder.createAndBindUi(this));
   
    resultTabPanel.setAnimationDuration(500);
    resultPanelMap = new HashMap<String, EGQLResultPanel>();
  }

  @Override
  public void setPresenter(Presenter listener) {
    this.listener = listener;
  }
 
  @UiHandler("goBtn")
  void onGoBtnClick(ClickEvent event) {
    if (isNullOrEmpty(batchSizeTxt.getText())) {
      batchSizeTxt.setText(String.valueOf(EGQLConstant.DEFAULT_BATCH_SIZE));
    }
   
    if (isNullOrEmpty(maxResultTxt.getText())) {
      maxResultTxt.setText(String.valueOf(EGQLConstant.DEFAULT_MAX_RESULT));
    }
   
    String batchSizeStr = batchSizeTxt.getText();
    String maxResultStr = maxResultTxt.getText();
   
    try {
      int batchSize = Integer.parseInt(batchSizeStr);
      int maxResult = Integer.parseInt(maxResultStr);
     
      String command = isNullOrEmpty(cmdTxt.getSelectedText()) ?
          cmdTxt.getText() : cmdTxt.getSelectedText();
      this.listener.execute(command, batchSize, maxResult);
    } catch (NumberFormatException e) {
      Window.alert(e.getMessage());
    }
  }

  /* (non-Javadoc)
   * @see org.yaac.client.ui.EGQLView#onMessage(java.lang.String)
   */
  @Override
  public void onMessage(String msg) {   
    Result result = AutoBeanUtil.decode(Result.class, msg);

    EGQLResultPanel resultPanel = resultPanelMap.get(result.getStatementKey());
   
    if (resultPanel == null) {
      System.out.println("Ignored unexpected message from server side: ");
      System.out.println(msg);
      return;
    }
   
    resultPanel.appendData(result.getResult());
    resultPanel.status(result.getStatus());
  }

  @Override
  public void onSyntaxError(String message) {
    newErrorMessage(message);
  }

  @Override
  public void onLogicalError(String errorCode) {
    newErrorMessage(errorMessages.getString(errorCode));
  }

  private void newErrorMessage(String msg) {
    EGQLErrorPanel errorPanel = new EGQLErrorPanel(msg);
    resultTabPanel.add(errorPanel);
    resultTabPanel.selectTab(errorPanel);
  }
 
  @Override
  public void prepareResultPanels(Map<String, String> stmtMap) {
    for (String id : stmtMap.keySet()) {
      if (!resultPanelMap.containsKey(id)) {
        EGQLResultPanel resultPanel = new EGQLResultPanel().withStatement(stmtMap.get(id));
        resultTabPanel.add(resultPanel);
        resultTabPanel.selectTab(resultPanel)// switch to new tab
        resultPanelMap.put(id, resultPanel);
      }
    }
  }

  @Override
  public void generateImmediateResultPanel(List<String> immediateStmts) {
    if (!immediateStmts.isEmpty()) {
      StringBuilder sb = new StringBuilder();
     
      for (String stmt : immediateStmts) {
        sb.append("<div><b>");
        sb.append(stmt);
        sb.append("</b>");
        sb.append(" executed without any error");
        sb.append("</div>\n");
      }
     
      EGQLImmediatePanel panel = new EGQLImmediatePanel(sb.toString());
      resultTabPanel.add(panel);
      resultTabPanel.selectTab(panel);
    }
  }
}
TOP

Related Classes of org.yaac.client.ui.EGQLViewImpl$QueryViewImplUiBinder

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.