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

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

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

import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.resources.client.ImageResource;
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.Window;
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.menu.MenuItem;
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.DataxWidget;
import com.taobao.zeus.web.platform.client.module.word.DataxWidget.Callback;
import com.taobao.zeus.web.platform.client.module.word.ShellWord;
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.theme.ResourcesTool;
import com.taobao.zeus.web.platform.client.util.GWTEnvironment;
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 ShellToolBar extends AbstractToolBar{

  private ShellWord shellWord;
 
  public ShellToolBar(){
    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(shellWord!=null){
      getCodeMirror().removeChangeListener(changeListener);
      getCodeMirror().removeMouseUpHandler(mouseUpHandler);
    }
    shellWord=(ShellWord) word;
    getCodeMirror().addChangeListener(changeListener);
    getCodeMirror().addMouseUpHandler(mouseUpHandler);
    changeListener.onChange();
  }
 
  private OnChangeListener changeListener=new OnChangeListener() {
    public void onChange() {
      String jobId=ToolUtil.extractSyncToId(shellWord.getEditTab().getNewContent());
      if(jobId!=null){
        jumpJobId=jobId;
        syncJump.show();
      }else{
        syncJump.hide();
      }
      ShellToolBar.this.doLayout();
    }
  };
 
 
  private SelectHandler syncHandler=new SelectHandler() {
    public void onSelect(SelectEvent event) {
      // #sync[123->456]
      String[] lines=shellWord.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() {
          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>() {
        public void onSuccess(JobModel result) {
          if(!result.getJobRunType().equals(JobModel.SHELL)){
            new AlertMessageBox("错误","目标任务不是shell程序,无法同步").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() {
            public void onHide(HideEvent event) {
              Dialog dialog=(Dialog)event.getSource();
              if(dialog.getHideButton().getText().equals(DefaultMessages.getMessages().messageBox_yes())){
                if(firstTime){
                  shellWord.getEditTab().getCodeMirror().setValue("#sync["+shellWord.getFileModel().getId()+"->"
                      +jobId+"]\n"+shellWord.getEditTab().getNewContent());
                }
                RPCS.getJobService().syncScript(jobId, shellWord.getEditTab().getNewContent(), new AbstractAsyncCallback<Void>() {
                  public void onSuccess(Void result) {
                    Info.display("同步成功", "同步成功");
                  }
                });
              }
            }
          });
          confirm.show();
        }
      });
    }
  };

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

  @Override
  protected FileModel getFileModel() {
    return shellWord.getFileModel();
  }

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

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

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.