Package com.taobao.zeus.web.platform.client.module.tablemanager.component

Source Code of com.taobao.zeus.web.platform.client.module.tablemanager.component.PartitionTab

package com.taobao.zeus.web.platform.client.module.tablemanager.component;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.cell.core.client.TextButtonCell;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
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.TextField;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.grid.GridSelectionModel;
import com.sencha.gxt.widget.core.client.grid.editing.GridEditing;
import com.sencha.gxt.widget.core.client.grid.editing.GridInlineEditing;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.PartitionModel;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.PartitionModelProperties;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.TableModel;
import com.taobao.zeus.web.platform.client.module.word.images.Images;
import com.taobao.zeus.web.platform.client.util.PlatformContext;
import com.taobao.zeus.web.platform.client.util.RPCS;
import com.taobao.zeus.web.platform.client.util.async.AbstractAsyncCallback;
import com.taobao.zeus.web.platform.client.widget.TitledCell;
import com.taobao.zeus.web.platform.shared.rpc.TableManagerServiceAsync;
/**
* @author gufei.wzy 2012-9-21
*/
public class PartitionTab implements IsWidget {
  @SuppressWarnings("unused")
  private PlatformContext context;
  private TableInfoPanel panel;
  private ListStore<PartitionModel> store;
  private Grid<PartitionModel> grid;

  private final PartitionModelProperties props = GWT
      .create(PartitionModelProperties.class);

  private final TableManagerServiceAsync tableService = RPCS
      .getTableManagerService();

  public PartitionTab(TableInfoPanel p) {
    this.panel = p;
    this.context = p.getContext();
  }

  @Override
  public Widget asWidget() {
      if(grid==null){
        ColumnConfig<PartitionModel, String> name = new ColumnConfig<PartitionModel, String>(
            props.name(), 100, "名称");
        name.setCell(new TitledCell());
        ColumnConfig<PartitionModel, String> path = new ColumnConfig<PartitionModel, String>(
            props.path(), 40, "路径");
        path.setCell(new TitledCell());
        ColumnConfig<PartitionModel, String> size = new ColumnConfig<PartitionModel, String>(
            props.size(), 60, "大小");
        size.setCell(new TitledCell() {
          @Override
          public void render(com.google.gwt.cell.client.Cell.Context context,
              String value, SafeHtmlBuilder sb) {
            if (value == null || value.equals("")) {
              sb.appendHtmlConstant("Loading...");
            } else {
              super.render(context, value, sb);
            }
          }
        });
            ColumnConfig<PartitionModel, String> download = new ColumnConfig<PartitionModel, String>(
                    new com.sencha.gxt.core.client.ValueProvider<PartitionModel, String>(){
                        @Override
                        public String getValue(PartitionModel object){
                            return null;
                        }
                        @Override
                        public void setValue(PartitionModel object, String value){
                        }
                        @Override
                        public String getPath(){
                            return null;
                        }
                    } , 30, "下载");
            final TextButtonCell downloadButton = new TextButtonCell();
            downloadButton.setIcon(Images.getImageResources().download());
            downloadButton.addSelectHandler(new SelectHandler() {
                @Override
                public void onSelect(SelectEvent event) {
                    downloadSelectPartition();
                }
            });
            download.setCell(downloadButton);
        List<ColumnConfig<PartitionModel, ?>> list = new ArrayList<ColumnConfig<PartitionModel, ?>>();
        list.add(name);
        list.add(path);
        list.add(size);
        list.add(download);
        ColumnModel<PartitionModel> colModel = new ColumnModel<PartitionModel>(
            list);
        grid = new Grid<PartitionModel>(getStore(), colModel);
        grid.setAllowTextSelection(true);
        grid.getView().setForceFit(true);
        grid.getView().setAutoFill(true);
   
        // 名称和路径字段加上文本框,方便复制
        final GridEditing<PartitionModel> editing = new GridInlineEditing<PartitionModel>(
            grid);
        editing.addEditor(path, new TextField());
        editing.getEditor(path).setReadOnly(true);
        editing.addEditor(name, new TextField());
        editing.getEditor(name).setReadOnly(true);
   
        // 选择时加载分区数据预览
        GridSelectionModel<PartitionModel> gs = new GridSelectionModel<PartitionModel>();
        gs.addSelectionHandler(new SelectionHandler<PartitionModel>() {
          @Override
          public void onSelection(SelectionEvent<PartitionModel> event) {
            panel.getPresenter().loadDataPreview(event.getSelectedItem());
          }
        });
        grid.setSelectionModel(gs);
      }

    return grid;
  }

    private void downloadSelectPartition() {
        PartitionModel pm = grid.getSelectionModel().getSelectedItem();
        if (RootPanel.get("downloadiframe") != null) {
            Widget widgetFrame = (Widget) RootPanel
                    .get("downloadiframe");
            widgetFrame.removeFromParent();
        }
        Frame frame = new Frame(GWT.getHostPageBaseURL()
                + "partition_download.do" + "?path=" + pm.getPath()
                + "&table=" + panel.getTable().getName());
        frame.setVisible(false);
        frame.setSize("0px", "0px");
        RootPanel.get().add(frame);
    }

  public void load(final TableModel t) {
    if (t == null)
      return;
    grid.mask("加载中...");
    tableService.getPartitions(t,
        new AbstractAsyncCallback<List<PartitionModel>>() {

          @Override
          public void onSuccess(List<PartitionModel> result) {
            getStore().clear();
            getStore().addAll(result);
            grid.unmask();

            // 读取分区大小
            for (PartitionModel p : result) {
              tableService
                  .fillPartitionSize(
                      p,
                      new AbstractAsyncCallback<PartitionModel>() {
                        @Override
                        public void onSuccess(
                            PartitionModel result) {
                          getStore().update(result);
                        }
                      });
            }
          }

          @Override
          public void onFailure(Throwable caught) {
            super.onFailure(caught);
            grid.unmask();
          }
        });
  }

  private ListStore<PartitionModel> getStore() {
    if (store == null) {
      store = new ListStore<PartitionModel>(
          new ModelKeyProvider<PartitionModel>() {
            @Override
            public String getKey(PartitionModel item) {
              return item.getName();
            }
          });
    }
    return store;
  }
}
TOP

Related Classes of com.taobao.zeus.web.platform.client.module.tablemanager.component.PartitionTab

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.