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

Source Code of com.taobao.zeus.web.platform.client.module.tablemanager.TableManagerViewImpl$TableManagerViewImplUiBinder

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

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.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.Style.LayoutRegion;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.client.loader.RpcProxy;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.loader.FilterPagingLoadConfig;
import com.sencha.gxt.data.shared.loader.FilterPagingLoadConfigBean;
import com.sencha.gxt.data.shared.loader.LoadEvent;
import com.sencha.gxt.data.shared.loader.LoadHandler;
import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding;
import com.sencha.gxt.data.shared.loader.PagingLoadResult;
import com.sencha.gxt.data.shared.loader.PagingLoader;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
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.filters.GridFilters;
import com.sencha.gxt.widget.core.client.toolbar.PagingToolBar;
import com.taobao.zeus.web.platform.client.module.tablemanager.component.DataPreviewGrid;
import com.taobao.zeus.web.platform.client.module.tablemanager.component.TableInfoPanel;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.PartitionModel;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.TableModel;
import com.taobao.zeus.web.platform.client.module.tablemanager.model.TableModelProperties;
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.MyStringFilter;
import com.taobao.zeus.web.platform.shared.rpc.TableManagerServiceAsync;

public class TableManagerViewImpl implements TableManagerView {

  private TableManagerPresenter tableManagerPresenter;
  @SuppressWarnings("unused")
  private PlatformContext context;
  private ListStore<TableModel> commonStore;
  private final TableModelProperties props = GWT
      .create(TableModelProperties.class);

  private BorderLayoutContainer container;
  @UiField
  ContentPanel commonTab;
  @UiField
  VerticalLayoutContainer commonTableContainer;
  @UiField
  ContentPanel dataPreviewPanel;
  private Grid<TableModel> commonGrid;
  private TableInfoPanel commonTableInfoPanel;
  private PagingLoader<FilterPagingLoadConfig, PagingLoadResult<TableModel>> loader;
  private static TableManagerViewImplUiBinder uiBinder = GWT
      .create(TableManagerViewImplUiBinder.class);

  interface TableManagerViewImplUiBinder extends
      UiBinder<BorderLayoutContainer, TableManagerViewImpl> {
  }

  private final TableManagerServiceAsync tableService = RPCS
      .getTableManagerService();

  public TableManagerViewImpl(PlatformContext context,
      TableManagerPresenter presenter) {
    this.tableManagerPresenter = presenter;
    this.context = context;

    container = uiBinder.createAndBindUi(this);

    commonTableContainer.add(getCommonGrid(), new VerticalLayoutData(1, 1));
    commonTableContainer.add(getToolbar(), new VerticalLayoutData(1, 30));
    commonTableContainer.add(getTableInfoPanel(), new VerticalLayoutData(1,
        220, new Margins(1)));
  }

  /*@UiFactory
  public ContentPanel createContentPanel(String headingText) {
    ContentPanel cp;
    // 数据预览窗口第一次渲染后缩起
    if (headingText.equals("数据预览")) {
      cp = new ContentPanel() {
        @Override
        protected void onAfterFirstAttach() {
          container.collapse(LayoutRegion.SOUTH);
        }
      };
    } else {
      cp = new ContentPanel();
    }

    cp.setHeadingText(headingText);
    return cp;
  }*/

  @Override
  public TableModel getSelectedItem() {
    return getCommonGrid().getSelectionModel().getSelectedItem();
  }

  @Override
  public void selectFileModel(TableModel fileModel) {
    getCommonGrid().getSelectionModel().select(fileModel, false);
  }

  @Override
  public Widget asWidget() {
    return container;
  }

  public TableManagerPresenter getFileManagerPresenter() {
    return tableManagerPresenter;
  }

  public Grid<TableModel> getCommonGrid() {
    if (commonGrid == null) {
      ColumnConfig<TableModel, String> name = new ColumnConfig<TableModel, String>(
          props.name(), 280, "Name");
      name.setSortable(false);
      List<ColumnConfig<TableModel, ?>> list = new ArrayList<ColumnConfig<TableModel, ?>>();
      list.add(name);
      ColumnModel<TableModel> cm = new ColumnModel<TableModel>(list);

      commonGrid = new Grid<TableModel>(getCommonStore(), cm);
      commonGrid.getView().setForceFit(true);
      commonGrid.setAllowTextSelection(true);
      commonGrid.setLoader(getLoader());
      commonGrid.setHideHeaders(true);
      commonGrid.setLoadMask(true);
      commonGrid.getView().setForceFit(true);
      commonGrid.getView().setAutoFill(true);
      commonGrid.getView().setEmptyText("没有查询结果!");

      final GridFilters<TableModel> filters = new GridFilters<TableModel>(
          loader);
      filters.initPlugin(commonGrid);
      final MyStringFilter<TableModel> myFilter = new MyStringFilter<TableModel>(
          props.name(), getLoader()) {
        @Override
        protected void onFieldKeyUp(Event event) {
          if (field.getCurrentValue() == null
              || field.getCurrentValue().trim().length() < 3)
            return;
          super.onFieldKeyUp(event);
        }
      };
      filters.addFilter(myFilter);
      final TextField filterText = myFilter.getField();
      filterText.setWidth(280);
      filterText.setEmptyText("关键词用空格隔开,'*'代表任意一个或多个字符");
      commonTableContainer.add(filterText, new VerticalLayoutData(1, 30,
          new Margins(3)));
      GridSelectionModel<TableModel> gs = new GridSelectionModel<TableModel>();
      gs.addSelectionHandler(new SelectionHandler<TableModel>() {
        @Override
        public void onSelection(SelectionEvent<TableModel> event) {
          getTableInfoPanel().load(event.getSelectedItem());
        }
      });
      commonGrid.setSelectionModel(gs);
    }
    return commonGrid;
  }

  public PagingToolBar getToolbar() {

    final PagingToolBar toolBar = new PagingToolBar(30) {
      @Override
      protected void onAfterFirstAttach() {
        displayText.hide();
        super.onAfterFirstAttach();
      }
    };
    toolBar.bind(getLoader());

    return toolBar;
  }

  private PagingLoader<FilterPagingLoadConfig, PagingLoadResult<TableModel>> getLoader() {
    if (loader == null) {
      RpcProxy<FilterPagingLoadConfig, PagingLoadResult<TableModel>> proxy = new RpcProxy<FilterPagingLoadConfig, PagingLoadResult<TableModel>>() {
        @Override
        public void load(FilterPagingLoadConfig loadConfig,
            AsyncCallback<PagingLoadResult<TableModel>> callback) {
          tableService.getPagingTables(loadConfig, null, callback);
        }
      };
      loader = new PagingLoader<FilterPagingLoadConfig, PagingLoadResult<TableModel>>(
          proxy) {
        @Override
        protected FilterPagingLoadConfig newLoadConfig() {
          return new FilterPagingLoadConfigBean();
        }
      };
      loader.addLoadHandler(new LoadResultListStoreBinding<FilterPagingLoadConfig, TableModel, PagingLoadResult<TableModel>>(
          getCommonStore()));

      loader.setRemoteSort(true);

      loader.addLoadHandler(new LoadHandler<FilterPagingLoadConfig, PagingLoadResult<TableModel>>() {

        @Override
        public void onLoad(
            LoadEvent<FilterPagingLoadConfig, PagingLoadResult<TableModel>> event) {
          if (event.getLoadResult().getData().isEmpty())
            return;
          getTableInfoPanel().load(
              event.getLoadResult().getData().get(0));
        }

      });
    }
    return this.loader;
  }

  public ListStore<TableModel> getCommonStore() {
    if (commonStore == null) {
      commonStore = new ListStore<TableModel>(
          new ModelKeyProvider<TableModel>() {
            @Override
            public String getKey(TableModel item) {
              return item.getName();
            }
          });
    }

    return commonStore;
  }

  private TableInfoPanel getTableInfoPanel() {
    if (commonTableInfoPanel == null) {
      commonTableInfoPanel = new TableInfoPanel(tableManagerPresenter);
      commonTableInfoPanel.setBorders(false);
    }
    return this.commonTableInfoPanel;
  }

  @Override
  public void loadDataPreview(PartitionModel pm) {
    if (pm != null) {
//      container.expand(LayoutRegion.SOUTH);
      dataPreviewPanel.mask("Loading...");
      tableService.getPreviewData(pm,
          new AbstractAsyncCallback<TablePreviewModel>() {

            @Override
            public void onSuccess(TablePreviewModel result) {
              dataPreviewPanel.clear();
              dataPreviewPanel.add(new DataPreviewGrid(result));
              dataPreviewPanel.unmask();
            }

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

  }
}
TOP

Related Classes of com.taobao.zeus.web.platform.client.module.tablemanager.TableManagerViewImpl$TableManagerViewImplUiBinder

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.