Package com.taobao.zeus.web.platform.client.module.jobdisplay.job

Source Code of com.taobao.zeus.web.platform.client.module.jobdisplay.job.CardInfo

package com.taobao.zeus.web.platform.client.module.jobdisplay.job;

import java.util.Map;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
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.AutoProgressMessageBox;
import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox;
import com.sencha.gxt.widget.core.client.box.ProgressMessageBox;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.FlowLayoutContainer;
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.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.event.BeforeHideEvent;
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.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.FieldSet;
import com.sencha.gxt.widget.core.client.info.Info;
import com.taobao.zeus.web.platform.client.app.PlacePath;
import com.taobao.zeus.web.platform.client.app.PlacePath.App;
import com.taobao.zeus.web.platform.client.app.PlacePath.DocType;
import com.taobao.zeus.web.platform.client.app.PlatformPlace;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror.CodeMirrorConfig;
import com.taobao.zeus.web.platform.client.module.jobdisplay.AdminConfigWindow;
import com.taobao.zeus.web.platform.client.module.jobdisplay.CenterTemplate;
import com.taobao.zeus.web.platform.client.module.jobdisplay.job.ProcesserType.HiveP;
import com.taobao.zeus.web.platform.client.module.jobdisplay.job.ProcesserType.ZooKeeperP;
import com.taobao.zeus.web.platform.client.module.jobmanager.JobModel;
import com.taobao.zeus.web.platform.client.module.jobmanager.TreeKeyProviderTool;
import com.taobao.zeus.web.platform.client.module.jobmanager.event.TreeNodeChangeEvent;
import com.taobao.zeus.web.platform.client.util.RPCS;
import com.taobao.zeus.web.platform.client.util.Refreshable;
import com.taobao.zeus.web.platform.client.util.ToolUtil;
import com.taobao.zeus.web.platform.client.util.async.AbstractAsyncCallback;

public class CardInfo extends CenterTemplate implements Refreshable<JobModel>{

  private TextButton history=new TextButton("运行日志",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      presenter.displayHistory();
    }
  });
 
  private TextButton depGraph=new TextButton("依赖图",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      presenter.displayDepGraph();
    }
  });
  private TextButton editGroup=new TextButton("编辑",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      presenter.displayEditJob();
    }
  });
  private TextButton deleteGroup=new TextButton("删除",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      ConfirmMessageBox box=new ConfirmMessageBox("删除任务", "你确认删除此任务?");
      box.addHideHandler(new HideHandler() {
        @Override
        public void onHide(HideEvent event) {
          Dialog btn = (Dialog) event.getSource();
          if(btn.getHideButton().getText().equalsIgnoreCase("yes")){
            RPCS.getJobService().deleteJob(presenter.getJobModel().getId(), new AbstractAsyncCallback<Void>() {
              @Override
              public void onSuccess(Void result) {
                TreeNodeChangeEvent event=new TreeNodeChangeEvent();
                event.setNeedSelectProviderKey(TreeKeyProviderTool.genGroupProviderKey(presenter.getJobModel().getGroupId()));
                presenter.getPlatformContext().getPlatformBus().fireEvent(event);
              }
            });
          }
        }
      });
      box.show();
    }
  });
  private TextButton configAdmin=new TextButton("配置管理员",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      new AdminConfigWindow(presenter).show();
    }
  });
  private TextButton execute=new TextButton("手动执行",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      ConfirmMessageBox box=new ConfirmMessageBox("执行任务", "你确认手动执行该任务吗?");
      box.addHideHandler(new HideHandler() {
        @Override
        public void onHide(HideEvent event) {
          Dialog btn=(Dialog)event.getSource();
          if(btn.getHideButton().getText().equalsIgnoreCase("yes")){
            final AutoProgressMessageBox wait=new AutoProgressMessageBox("运行中","doing");
            wait.auto();
            wait.show();
            RPCS.getJobService().run(presenter.getJobModel().getId(), 1, new AbstractAsyncCallback<Void>() {
              @Override
              public void onSuccess(Void result) {
                wait.hide();
                Info.display("成功", "手动执行任务开始");
               
              }
              @Override
              public void onFailure(Throwable caught) {
                wait.hide();
                AlertMessageBox alert=new AlertMessageBox("失败", "手动执行任务失败");
                alert.show();
              };
            });
          }
        }
      });
      box.show();
    }
  });
  private TextButton recover=new TextButton("手动恢复",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      ConfirmMessageBox box=new ConfirmMessageBox("恢复任务", "你确认恢复该任务吗?这将引起依赖任务的连锁反应!");
      box.addHideHandler(new HideHandler() {
        @Override
        public void onHide(HideEvent event) {
          Dialog btn=(Dialog)event.getSource();
          if(btn.getHideButton().getText().equalsIgnoreCase("yes")){
            final AutoProgressMessageBox wait=new AutoProgressMessageBox("运行中","doing");
            wait.auto();
            wait.show();
            RPCS.getJobService().run(presenter.getJobModel().getId(), 2, new AbstractAsyncCallback<Void>() {
              @Override
              public void onSuccess(Void result) {
                wait.hide();
                Info.display("成功", "手动恢复任务开始");
              }
              @Override
              public void onFailure(Throwable caught) {
                wait.hide();
                AlertMessageBox alert=new AlertMessageBox("失败", "手动恢复任务失败");
                alert.show();
              };
            });
          }
        }
      });
      box.show();
    }
  });
  private TextButton onoff=new TextButton("开启/关闭",new SelectHandler() {
    @Override
    public void onSelect(SelectEvent event) {
      Boolean auto=presenter.getJobModel().getAuto();
      RPCS.getJobService().switchAuto(presenter.getJobModel().getId(), !auto, new AbstractAsyncCallback<Void>() {
        @Override
        public void onSuccess(Void result) {
          final ProgressMessageBox box=new ProgressMessageBox("开关 自动调度", "正在配置自动调度");
          box.setProgressText("doing...");
          box.show();
          RPCS.getJobService().getUpstreamJob(presenter.getJobModel().getId(), new AbstractAsyncCallback<JobModel>() {
            @Override
            public void onSuccess(JobModel result) {
              presenter.display(result);
              box.hide();
            }
            @Override
            public void onFailure(Throwable caught) {
              box.hide();
              super.onFailure(caught);
            };
          });
          Info.display("成功", "开启/关闭 自动调度 成功");
        }
      });
    }
  });
  private TextButton toDoc=new TextButton("转到开发中心",new SelectHandler() {
        @Override
        public void onSelect(SelectEvent event) {
            if(script!=null){
                String docId = ToolUtil.extractSyncFromId(script.getValue());
                if(docId!=null){
                    PlatformPlace pp=new PlacePath().toApp(App.Document).toDocType(DocType.MyDoc).toDocId(docId).create();
                    History.newItem(pp.getToken());
                }
            }
        }
    });
 
  private FieldSet baseFieldSet;
  private FieldSet hiveProcesserFieldSet;
  private FieldSet configFieldSet;
  private FieldSet scriptFieldSet;
  private FieldSet configParentField;
  private FieldSet resourceField;
  private FieldSet resourceParentField;
 
  private FieldLabel baseId;
  private FieldLabel baseName;
  private FieldLabel baseOwner;
  private FieldLabel baseDesc;
  private FieldLabel baseFollers;
  private FieldLabel baseAdmins;
  private FieldLabel baseJobType;
  private FieldLabel baseScheduleType;
  private FieldLabel baseCron;
  private FieldLabel baseAuto;
  private FieldLabel baseDepJobs;
  private FieldLabel baseDepCycle;
 
  private HTMLPanel configContent;
  private HTMLPanel configParentContent;
  private CodeMirror script;
  private HTMLPanel resourceContent;
  private HTMLPanel resourceParentContent;
 
  private JobPresenter presenter;
 
  public CardInfo(JobPresenter presenter){
    this.presenter=presenter;
    addButton(history);
    addButton(depGraph);
    addButton(deleteGroup);
    addButton(editGroup);
    addButton(execute);
    addButton(recover);
    addButton(onoff);
    addButton(deleteGroup);
    addButton(configAdmin);
    addButton(toDoc);
   
    FlowLayoutContainer centerContainer=new FlowLayoutContainer();
    centerContainer.add(getBaseFieldSet(),new MarginData(3));
    centerContainer.add(getHiveProcesserFieldSet(),new MarginData(3));
    centerContainer.add(getConfigFieldSet(),new MarginData(3));
    centerContainer.add(getScriptFieldSet(),new MarginData(3));
    centerContainer.add(getResourceField(),new MarginData(3));
    centerContainer.add(getConfigParentField(),new MarginData(3));
    centerContainer.add(getResourceParentField(),new MarginData(3));
    centerContainer.setScrollMode(ScrollMode.AUTOY);
    setCenter(centerContainer);
  }
  public static final String JAVA_MAIN_KEY="java.main.class";
  public static final String DEPENDENCY_CYCLE="zeus.dependency.cycle";
  private void display(final JobModel model){
    ((Label)baseId.getWidget()).setText(model.getId());
    ((Label)baseName.getWidget()).setText(model.getName());
    ((Label)baseOwner.getWidget()).setText(model.getOwnerName());
    ((Label)baseDesc.getWidget()).setText(model.getDesc());
    ((Label)baseJobType.getWidget()).setText(model.getJobRunType());
    ((Label)baseScheduleType.getWidget()).setText(model.getJobScheduleType());
    ((Label)baseCron.getWidget()).setText(model.getCronExpression());
    if(model.getAuto()){
      ((Label)baseAuto.getWidget()).setText("开启");
      ((Label)baseAuto.getWidget()).getElement().setAttribute("style", "font-weight:bold;color:green");
    }else{
      ((Label)baseAuto.getWidget()).setText("关闭");
      ((Label)baseAuto.getWidget()).getElement().setAttribute("style", "font-weight:bold;color:red");
    }
    ((Label)baseDepJobs.getWidget()).setText(model.getDependencies().toString());
    if("sameday".equals(model.getLocalProperties().get(DEPENDENCY_CYCLE))){
      ((Label)baseDepCycle.getWidget()).setText("同一天");
    }else{
      ((Label)baseDepCycle.getWidget()).setText("没有限制");
    }
    ((Label)baseFollers.getWidget()).setText(model.getFollows().toString());
    ((Label)baseAdmins.getWidget()).setText(model.getAdmins().toString());
   
    if(JobModel.DEPEND_JOB.equals(model.getJobScheduleType())){
      baseDepJobs.show();
      baseDepCycle.show();
      baseCron.hide();
    }else{
      baseDepJobs.hide();
      baseDepCycle.hide();
      baseCron.show();
    }
   
    //初始化辅助功能配置
    outputTableLabel.hide();
    keepDaysLabel.hide();
    driftPercentLabel.hide();
    syncTableLabel.hide();
    zkHostLabel.hide();
    zkPathLabel.hide();
    getHiveProcesserFieldSet().hide();
    for (String post : model.getPostProcessers()) {
      if (post != null) {
        ProcesserType p = ProcesserType.parse(post);
        if (p != null) {
          if (p.getId().equalsIgnoreCase("hive")) {
            HiveP hiveP = (HiveP) p;
            ((Label)outputTableLabel.getWidget()).setText(hiveP.getOutputTables());
            ((Label)keepDaysLabel.getWidget()).setText(hiveP.getKeepDays());
            ((Label)driftPercentLabel.getWidget()).setText(hiveP.getDriftPercent());
            ((Label)syncTableLabel.getWidget()).setText(hiveP.getSyncTables());
            if(hiveP.getOutputTables()!=null&&!hiveP.getOutputTables().isEmpty()) {
              outputTableLabel.show();
            }
            if(hiveP.getKeepDays()!=null&&!hiveP.getKeepDays().isEmpty()) {
              keepDaysLabel.show();
            }
            if(hiveP.getDriftPercent()!=null&&!hiveP.getDriftPercent().isEmpty()) {
              driftPercentLabel.show();
            }
            if(hiveP.getSyncTables()!=null&&!hiveP.getSyncTables().isEmpty()) {
              syncTableLabel.show();
            }
            getHiveProcesserFieldSet().show();
          } else if (p.getId().equalsIgnoreCase("zookeeper")) {
            ZooKeeperP zp = (ZooKeeperP) p;
            if(zp.getUseDefault()) {
              continue;
            }
            ((Label)zkHostLabel.getWidget()).setText(zp.getHost());
            ((Label)zkPathLabel.getWidget()).setText(zp.getPath());
            zkHostLabel.show();
            zkPathLabel.show();
            getHiveProcesserFieldSet().show();
          }
        }
      }
    }
   
    Map<String, String> config=model.getLocalProperties();
    StringBuffer sb=new StringBuffer("<div style='font-size:13px'>");
    for(String key:config.keySet()){
      if(key.startsWith("secret.")){
        sb.append(key+"=*<br/>");
      }else if(key.equals("hadoop.hadoop.job.ugi")){
        String value=config.get(key);
        if(value.indexOf("#")!=-1){
          value=value.substring(0, value.indexOf("#"))+"*";
        }
        sb.append(key+"="+value+"<br/>");
      }else{
        sb.append(key+"="+config.get(key)+"<br/>");
      }
    }
    sb.append("</div>");
    configContent.getElement().setInnerHTML(sb.toString());
   
    Map<String, String> configAll=model.getAllProperties();
    sb=new StringBuffer("<div style='font-size:13px'>");
    for(String key:configAll.keySet()){
      if(config.get(key)==null){
        sb.append(key+"="+configAll.get(key)+"<br/>");
      }
    }
    sb.append("</div>");
    configParentContent.getElement().setInnerHTML(sb.toString());
   
   
    sb=new StringBuffer("<div style='font-size:13px'>");
    for(Map<String, String> record:model.getLocalResources()){
      sb.append("<p title='"+record.get("uri")+"'>"+record.get("name")+"</p>");
    }
    sb.append("</div>");
    resourceContent.getElement().setInnerHTML(sb.toString());
   
    sb=new StringBuffer("<div style='font-size:13px'>");
    for(Map<String, String> record:model.getAllResources()){
      if(!model.getLocalResources().contains(record)){
        sb.append("<p title='"+record.get("uri")+"'>"+record.get("name")+"</p>");
      }
    }
    sb.append("</div>");
    resourceParentContent.getElement().setInnerHTML(sb.toString());
   
    if(JobModel.MapReduce.equals(model.getJobRunType())){
      scriptFieldSet.hide();
    }else{
      script.setValue(model.getScript());
      scriptFieldSet.show();
    }
        if (!model.getJobRunType().equals(JobModel.MapReduce)
                && script != null
                && ToolUtil.extractSyncFromId(script.getValue()) != null
                && model.getOwner().equalsIgnoreCase(
                        presenter.getPlatformContext().getUser().getUid())) {
            toDoc.show();
        } else {
            toDoc.hide();
        }
  }

  public FieldSet getBaseFieldSet() {
    if(baseFieldSet==null){
      baseFieldSet=new FieldSet();
      baseFieldSet.setHeadingText("基本信息");
      baseFieldSet.setHeight(180);
     
      HorizontalLayoutContainer layoutContainer=new HorizontalLayoutContainer();
      baseFieldSet.add(layoutContainer);
     
      VerticalLayoutContainer leftContainer = new VerticalLayoutContainer();
      leftContainer.setWidth(300);
      VerticalLayoutContainer rightContainer=new VerticalLayoutContainer();
      rightContainer.setWidth(300);
      layoutContainer.add(leftContainer,new HorizontalLayoutData(-1,1));
      layoutContainer.add(rightContainer,new HorizontalLayoutData(-1,1));
     
      baseId=new FieldLabel(getLabel(),"id");
      baseName=new FieldLabel(getLabel(),"名称");
      baseOwner=new FieldLabel(getLabel(),"所有人");
      baseDesc=new FieldLabel(new Label("",true),"描述");
      baseJobType=new FieldLabel(getLabel(),"任务类型");
      baseScheduleType=new FieldLabel(new Label(),"调度类型");
      baseCron=new FieldLabel(getLabel(),"定时表达式");
      baseAuto=new FieldLabel(getLabel(),"自动调度");
      baseDepJobs=new FieldLabel(getLabel(),"依赖任务");
      baseDepCycle=new FieldLabel(getLabel(),"依赖周期");
      baseFollers=new FieldLabel(getLabel(),"关注人员");
      baseAdmins=new FieldLabel(getLabel(),"管理员");
     
      leftContainer.add(baseId,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      leftContainer.add(baseName,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      leftContainer.add(baseOwner,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      leftContainer.add(baseDesc,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseJobType,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseScheduleType,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseCron,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseAuto,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseDepJobs,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      rightContainer.add(baseDepCycle,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      leftContainer.add(baseFollers,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
      leftContainer.add(baseAdmins,new VerticalLayoutContainer.VerticalLayoutData(1, -1));

    }
    return baseFieldSet;
  }

  private FieldLabel outputTableLabel;
  private FieldLabel syncTableLabel;
  private FieldLabel keepDaysLabel;
  private FieldLabel driftPercentLabel;
  private FieldLabel zkHostLabel;
  private FieldLabel zkPathLabel;
 
  private Label getLabel(){
    Label label = new Label("",false);
    label.getElement().getStyle().setPaddingTop(3, Unit.PX);
    return label;
  }
  private FieldSet getHiveProcesserFieldSet() {
    if (hiveProcesserFieldSet == null) {
      hiveProcesserFieldSet = new FieldSet();
      hiveProcesserFieldSet.setCollapsible(true);
      hiveProcesserFieldSet.setHeadingText("辅助功能配置");
      VerticalLayoutContainer container = new VerticalLayoutContainer();
      outputTableLabel = new FieldLabel(getLabel(),"产出的表名");
      syncTableLabel = new FieldLabel(getLabel(),"阻塞同步的天网表");
      keepDaysLabel = new FieldLabel(getLabel(),"旧分区保留天数");
      driftPercentLabel = new FieldLabel(getLabel(),"产出数据浮动报警");
      zkHostLabel = new FieldLabel(getLabel(),"自定义ZK host");
      zkPathLabel = new FieldLabel(getLabel(),"自定义ZK path");
     
      container.add(syncTableLabel);
      container.add(outputTableLabel);
      container.add(keepDaysLabel);
      container.add(driftPercentLabel);
      container.add(zkHostLabel);
      container.add(zkPathLabel);

      hiveProcesserFieldSet.add(container);
    }
    return hiveProcesserFieldSet;
  }

  public FieldSet getConfigFieldSet() {
    if(configFieldSet==null){
      configFieldSet=new FieldSet();
      configFieldSet.setCollapsible(true);
      configFieldSet.setHeadingText("配置项信息");
      configContent=new HTMLPanel("");
      configFieldSet.add(configContent);
    }
    return configFieldSet;
  }

  public FieldSet getConfigParentField() {
    if(configParentField==null){
      configParentField=new FieldSet();
      configParentField.setCollapsible(true);
      configParentField.setHeadingText("继承的配置项信息");
     
      configParentContent=new HTMLPanel("");
      configParentField.add(configParentContent);
    }
    return configParentField;
  }

  public FieldSet getResourceField() {
    if(resourceField==null){
      resourceField=new FieldSet();
      resourceField.setCollapsible(true);
      resourceField.setHeadingText("资源信息");
     
      resourceContent=new HTMLPanel("");
      resourceField.add(resourceContent);
    }
    return resourceField;
  }

  public FieldSet getResourceParentField() {
    if(resourceParentField==null){
      resourceParentField=new FieldSet();
      resourceParentField.setCollapsible(true);
      resourceParentField.setHeadingText("继承的资源信息");
      resourceParentContent=new HTMLPanel("");
      resourceParentField.add(resourceParentContent);
    }
    return resourceParentField;
  }
  @Override
  public void refresh(JobModel t) {
    display(t);
  }

  public FieldSet getScriptFieldSet() {
    if(scriptFieldSet==null){
      scriptFieldSet=new FieldSet();
      scriptFieldSet.setCollapsible(true);
      scriptFieldSet.setHeadingText("脚本");
      CodeMirrorConfig cmc=new CodeMirrorConfig();
      script=new CodeMirror(cmc);
      scriptFieldSet.add(script);
      scriptFieldSet.setWidth("96%");
      scriptFieldSet.addBeforeHideHandler(new BeforeHideEvent.BeforeHideHandler() {
        @Override
        public void onBeforeHide(BeforeHideEvent event) {
          if(scriptFieldSet.getElement().getWidth(false)==0) {
            event.setCancelled(true);
          }
        }
      });
    }
    return scriptFieldSet;
  }
}
TOP

Related Classes of com.taobao.zeus.web.platform.client.module.jobdisplay.job.CardInfo

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.