Package com.taobao.zeus.web.platform.client.module.word.toolbar

Source Code of com.taobao.zeus.web.platform.client.module.word.toolbar.HiveToolBar

package com.taobao.zeus.web.platform.client.module.word.toolbar;

import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.sencha.gxt.core.client.Style.LayoutRegion;
import com.sencha.gxt.core.client.Style.SelectionMode;
import com.sencha.gxt.messages.client.DefaultMessages;
import com.sencha.gxt.widget.core.client.Dialog;
import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox;
import com.sencha.gxt.widget.core.client.event.HideEvent;
import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler;
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.info.Info;
import com.sencha.gxt.widget.core.client.menu.Menu;
import com.sencha.gxt.widget.core.client.toolbar.SeparatorToolItem;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror.OnChangeListener;
import com.taobao.zeus.web.platform.client.module.filemanager.FileModel;
import com.taobao.zeus.web.platform.client.module.jobmanager.CheckableJobTree;
import com.taobao.zeus.web.platform.client.module.jobmanager.GroupJobTreeModel;
import com.taobao.zeus.web.platform.client.module.jobmanager.JobModel;
import com.taobao.zeus.web.platform.client.module.word.HiveWord;
import com.taobao.zeus.web.platform.client.module.word.Word;
import com.taobao.zeus.web.platform.client.module.word.component.EditTab;
import com.taobao.zeus.web.platform.client.util.RPCS;
import com.taobao.zeus.web.platform.client.util.ToolUtil;
import com.taobao.zeus.web.platform.client.util.async.AbstractAsyncCallback;

public class HiveToolBar extends AbstractToolBar{

  private HiveWord hiveWord;
 
  public HiveToolBar(){
    sync.addSelectHandler(syncHandler);
    add(run);
    add(selectRun);
    selectRun.disable();
    add(new SeparatorToolItem());
    add(sync);
    add(syncJump);
    add(new SeparatorToolItem());
    Menu menu=new Menu();
    menu.add(upload);
    extend.setMenu(menu);
    add(extend);
    add(new SeparatorToolItem());
    add(config);
  }
 
  @Override
  public void onWordChange(Word word) {
    if(hiveWord!=null){
      hiveWord.getEditTab().getCodeMirror().removeChangeListener(changeListener);
      hiveWord.getEditTab().getCodeMirror().removeMouseUpHandler(mouseUpHandler);
    }
    hiveWord=(HiveWord) word;
    hiveWord.getEditTab().getCodeMirror().addChangeListener(changeListener);
    hiveWord.getEditTab().getCodeMirror().addMouseUpHandler(mouseUpHandler);
    changeListener.onChange();
  }

  @Override
  protected CodeMirror getCodeMirror() {
    return hiveWord.getEditTab().getCodeMirror();
  }

  @Override
  protected FileModel getFileModel() {
    return hiveWord.getFileModel();
  }
 
  private OnChangeListener changeListener=new OnChangeListener() {
    public void onChange() {
      String jobId=ToolUtil.extractSyncToId(hiveWord.getEditTab().getNewContent());
      if(jobId!=null){
        jumpJobId=jobId;
        syncJump.show();
      }else{
        syncJump.hide();
      }
      HiveToolBar.this.doLayout();
    }
  };
 
  private SelectHandler syncHandler=new SelectHandler() {
    public void onSelect(SelectEvent event) {
      // --sync[123->456]
      String[] lines = hiveWord.getEditTab().getNewContent()
          .split("\n");
      boolean exist = false;
      for (String line : lines) {
        if (line.startsWith("--sync[")) {
          final String jobId = line.substring(
              line.indexOf("->") + 2,
              line.indexOf("]"));
          syncScript(jobId,false);
          exist = true;
          break;
        }
      }
      if (!exist) {
        final CheckableJobTree tree = new CheckableJobTree();
        tree.getTree().setCheckable(false);
        tree.getTree().getSelectionModel()
            .setSelectionMode(SelectionMode.SINGLE);
        tree.setSelectHandler(new SelectHandler() {
          @Override
          public void onSelect(SelectEvent event) {
            GroupJobTreeModel job = tree.getTree()
                .getSelectionModel()
                .getSelectedItem();
            if (job != null) {
              if (job.isGroup()) {
                new AlertMessageBox("错误","不能选择组").show();
              } else {
                syncScript(job.getId(),true);
              }
            }
          }
        });
        tree.show();
      }
    }
    private void syncScript(final String jobId,final boolean firstTime) {
      RPCS.getJobService().getUpstreamJob(jobId,
          new AbstractAsyncCallback<JobModel>() {
            @Override
            public void onSuccess(JobModel result) {
              if (!result.getJobRunType().equals(JobModel.HIVE)) {
                new AlertMessageBox("错误","目标任务不是Hive程序,无法同步").show();
                return;
              }
              StringBuffer sb = new StringBuffer("您要同步的目标任务信息如下:<br/><br/>");
              sb.append("id:" + result.getId()+ "<br/>");
              sb.append("名称:" + result.getName()+ "<br/>");
              sb.append("所有人:"+ result.getOwnerName()+ "(" + result.getOwner()+ ")<br/>");
              sb.append("自动调度:"+ (result.getAuto() ? "开启": "关闭") + "<br/>");
              sb.append("您确认要进行同步吗?");
              ConfirmMessageBox confirm = new ConfirmMessageBox("同步脚本", sb.toString());
              confirm.addHideHandler(new HideHandler() {
                @Override
                public void onHide(HideEvent event) {
                  Dialog dialog = (Dialog) event.getSource();
                  if (dialog.getHideButton().getText().equals(DefaultMessages.getMessages().messageBox_yes())) {
                    if(firstTime){
                      hiveWord.getEditTab().getCodeMirror().setValue(
                          "--sync["+ getFileModel().getId()+ "->"+ jobId+ "]\n"+ hiveWord.getEditTab()
                          .getNewContent());
                    }
                    RPCS.getJobService().syncScript(jobId,hiveWord.getEditTab().getNewContent(),
                      new AbstractAsyncCallback<Void>() {
                        @Override
                        public void onSuccess(
                            Void result) {
                          Info.display("同步成功","同步成功");
                        }
                      });
                  }
                }
              });
              confirm.show();
            }
          });
    }
  };

  @Override
  protected EditTab getEditTab() {
    return hiveWord.getEditTab();
  }
}
TOP

Related Classes of com.taobao.zeus.web.platform.client.module.word.toolbar.HiveToolBar

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.