Package com.google.gwt.demos.bulkloadingtable.client

Source Code of com.google.gwt.demos.bulkloadingtable.client.BulkLoadingTableDemo

/*
* Copyright 2007 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.gwt.demos.bulkloadingtable.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.widgetideas.table.client.ClientTableModel;
import com.google.gwt.widgetideas.table.client.FlexTableBulkRenderer;
import com.google.gwt.widgetideas.table.client.PreloadedTable;
import com.google.gwt.widgetideas.table.client.RendererCallback;
import com.google.gwt.widgetideas.table.client.overrides.FlexTable;
import com.google.gwt.widgetideas.table.client.overrides.Grid;
import com.google.gwt.widgetideas.table.client.overrides.HTMLTable;

/**
* Demo of {@link PreloadedTable} and
* {@link com.google.gwt.widgetideas.table.client.TableBulkRenderer}.
*/
public class BulkLoadingTableDemo implements EntryPoint {
  int numColumns = 15;
  int numRows = 120;
  HTMLTable curTable;
  Panel panel;

  public void onModuleLoad() {
    panel = new VerticalPanel();
    RootPanel.get().add(panel);
    panel.add(new HTML(
        "<h2>A very boring demo showing the speed difference of using bulk loading tables.</h2>"));
    panel.add(new Label("Number of rows"));
    final TextBox rows = new TextBox();
    panel.add(rows);
    rows.setText(numRows + "");
    rows.addChangeListener(new ChangeListener() {
      public void onChange(Widget sender) {
        numRows = Integer.parseInt(rows.getText().trim());
      }
    });

    panel.add(new Label("Number of columns"));
    final TextBox columns = new TextBox();
    panel.add(columns);
    columns.addChangeListener(new ChangeListener() {

      public void onChange(Widget sender) {
        numColumns = Integer.parseInt(columns.getText());
      }
    });
    columns.setText(numColumns + "");

    panel.add(new HTML(
        "<p/><p/><b>Clear Table now </b> (clearing will also happen if the buttons are clicked below)"));
    panel.add(new Button("Go", new ClickListener() {

      public void onClick(Widget sender) {
        clearTable();
      }

    }));

    panel.add(new HTML("<p/><p/><b> Use the traditional FlexTable API</b>"));
    Button flexTableAPI = new Button("Go", new ClickListener() {

      public void onClick(Widget sender) {
        clearTable();
        long milli = System.currentTimeMillis();
        FlexTable newTable = new FlexTable();
        usingFlexTableAPI(newTable);
        finishTable(newTable, milli);
      }
    });
    panel.add(flexTableAPI);

    panel.add(new HTML("<p/><p/><b> Use the traditional Grid API</b>"));
    Button gridAPI = new Button("Go", new ClickListener() {
      public void onClick(Widget sender) {
        clearTable();
        long milli = System.currentTimeMillis();
        Grid newTable = new Grid();
        usingGridAPI(newTable);
        finishTable(newTable, milli);
      }

    });
    panel.add(gridAPI);

    panel.add(new HTML("<p/><p/><b> Use Async BulkLoadedTable API</b>"));
    Button asyncAPI = new Button("Go", new ClickListener() {
      public void onClick(Widget sender) {
        clearTable();
        long milli = System.currentTimeMillis();
        FlexTable table = new FlexTable();
        usingBulkLoadedTableAPI(table, milli);
      }
    });

    panel.add(asyncAPI);

    panel.add(new HTML("<p/><p/><b> Use the PreloadedTable  API</b>"));
    Button pendingAPI = new Button("Go", new ClickListener() {

      public void onClick(Widget sender) {
        clearTable();
        long milli = System.currentTimeMillis();
        PreloadedTable table = new PreloadedTable();
        usingPreloadedTableAPI(table);
        finishTable(table, milli);
      }

    });
    panel.add(pendingAPI);
  }

  private void clearTable() {
    if (curTable != null) {
      curTable.removeFromParent();
      curTable = null;
    }
  }

  private void finishTable(final HTMLTable table, final long milli) {

    // In order to compare apples-to-apples for rendering time letting event cue
    // flush once.

    curTable = table;
    table.setBorderWidth(2);
    panel.add(table);

    table.setWidget(0, 3, new Button("A widget"));
    Window.alert("Finished in " + (System.currentTimeMillis() - milli)
        + " milliseconds");
  }

  private void usingBulkLoadedTableAPI(final FlexTable table, final long milli) {
    RendererCallback callback = new RendererCallback() {
      public void onRendered() {
        finishTable(table, milli);
      }
    };

    ClientTableModel<Object> tableModel = new ClientTableModel<Object>() {
      @Override
      public Object getCell(int rowNum, int cellNum) {
        if (rowNum >= numRows | cellNum >= numColumns) {
          return null;
        }
        return "cell " + rowNum + ", " + cellNum;
      }

      @Override
      protected boolean onRowInserted(int beforeRow) {
        return false;
      }

      @Override
      protected boolean onRowRemoved(int row) {
        return false;
      }

      @Override
      protected boolean onSetData(int row, int cell, Object data) {
        return false;
      }
    };
    FlexTableBulkRenderer renderer = new FlexTableBulkRenderer(table);
    renderer.renderRows(tableModel, callback);
  }

  private void usingFlexTableAPI(FlexTable table) {
    for (int i = 0; i < numRows; i++) {
      for (int j = 0; j < numColumns; j++) {
        table.setHTML(i, j, "cell " + i + ", " + j);
      }
    }
  }

  private void usingGridAPI(Grid table) {
    table.resize(numRows, numColumns);
    for (int i = 0; i < numRows; i++) {
      for (int j = 0; j < numColumns; j++) {
        table.setHTML(i, j, "cell " + i + ", " + j);
      }
    }
  }

  private void usingPreloadedTableAPI(PreloadedTable table) {
    for (int i = 0; i < numRows; i++) {
      for (int j = 0; j < numColumns; j++) {
        table.setPendingHTML(i, j, "cell " + i + ", " + j);
      }
    }
  }
}
TOP

Related Classes of com.google.gwt.demos.bulkloadingtable.client.BulkLoadingTableDemo

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.