com.google.gwt.gen2.table.client.TableDefinition.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.gen2.table.client.TableDefinition.java

Source

/*
 * Copyright 2008 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.gen2.table.client;

import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant;
import com.google.gwt.user.client.ui.HasVerticalAlignment.VerticalAlignmentConstant;

import java.util.Iterator;
import java.util.List;

/**
 * A collection of {@link ColumnDefinition ColumnDefinitions} that define a
 * table.
 * 
 * @param <RowType> the type of the row values
 */
public interface TableDefinition<RowType> {
    /**
     * A hook into where the rendered cell will be displayed.
     * 
     * @param <RowType> the type of the row values
     */
    public abstract static class AbstractCellView<RowType> {
        private int cellIndex = 0;
        private int rowIndex = 0;
        private HasTableDefinition<RowType> source;

        /**
         * Construct a new {@link TableDefinition.AbstractCellView}.
         * 
         * @param sourceTableDef the {@link HasTableDefinition} that defined the
         *          cell view
         */
        public AbstractCellView(HasTableDefinition<RowType> sourceTableDef) {
            this.source = sourceTableDef;
        }

        /**
         * @return the actual cell index being rendered
         */
        public int getCellIndex() {
            return cellIndex;
        }

        /**
         * @return the actual row index being rendered
         */
        public int getRowIndex() {
            return rowIndex;
        }

        /**
         * @return the source of the {@link TableDefinition}
         */
        public HasTableDefinition<RowType> getSourceTableDefinition() {
            return source;
        }

        /**
         * Sets the horizontal alignment of the specified cell.
         * 
         * @param align the cell's new horizontal alignment as specified in
         *          {@link com.google.gwt.user.client.ui.HasHorizontalAlignment}.
         */
        public abstract void setHorizontalAlignment(HorizontalAlignmentConstant align);

        /**
         * Set the html string in the current cell.
         * 
         * @param html the html string to set
         */
        public abstract void setHTML(String html);

        /**
         * Sets an attribute on the cell's style.
         * 
         * @param attr the name of the style attribute to be set
         * @param value the style attribute's new value
         */
        public abstract void setStyleAttribute(String attr, String value);

        /**
         * Set the style name of the cell, which can be a space delimited list of
         * style names.
         */
        public abstract void setStyleName(String stylename);

        /**
         * Set the text string in the current cell.
         * 
         * @param text the text string to set
         */
        public abstract void setText(String text);

        /**
         * Sets the vertical alignment of the specified cell.
         * 
         * @param align the cell's new vertical alignment as specified in
         *          {@link com.google.gwt.user.client.ui.HasVerticalAlignment}.
         */
        public abstract void setVerticalAlignment(VerticalAlignmentConstant align);

        /**
         * Set the {@link Widget} in the current cell.
         * 
         * @param widget the widget to set
         */
        public abstract void setWidget(Widget widget);

        /**
         * Render a single cell.
         * 
         * @param rowIndex the index of the row
         * @param cellIndex the index of the cell
         * @param rowValue the row value associated with the row
         * @param columnDef the {@link ColumnDefinition} associated with the column
         */
        protected void renderCellImpl(int rowIndex, int cellIndex, RowType rowValue,
                ColumnDefinition<RowType, ?> columnDef) {
            this.rowIndex = rowIndex;
            this.cellIndex = cellIndex;
            renderRowValue(rowValue, columnDef);
        }

        /**
         * Render a row value into a cell.
         * 
         * @param rowValue the row value associated with the row
         * @param columnDef the {@link ColumnDefinition} associated with the column
         */
        protected void renderRowValue(RowType rowValue, ColumnDefinition columnDef) {
            columnDef.getCellRenderer().renderRowValue(rowValue, columnDef, this);
        }
    }

    /**
     * A hook into where the rendered row will be displayed.
     * 
     * @param <RowType> the type of the row values
     */
    public abstract static class AbstractRowView<RowType> {
        private int rowIndex = 0;
        private AbstractCellView<RowType> cellView;

        /**
         * Construct a new {@link TableDefinition.AbstractRowView}.
         * 
         * @param cellView the view of the cell
         */
        public AbstractRowView(AbstractCellView<RowType> cellView) {
            this.cellView = cellView;
        }

        /**
         * @return the actual row index being rendered
         */
        public int getRowIndex() {
            return rowIndex;
        }

        /**
         * @return the source of the {@link TableDefinition}
         */
        public HasTableDefinition<RowType> getSourceTableDefinition() {
            return cellView.getSourceTableDefinition();
        }

        /**
         * Sets an attribute on the cell's style.
         * 
         * @param attr the name of the style attribute to be set
         * @param value the style attribute's new value
         */
        public abstract void setStyleAttribute(String attr, String value);

        /**
         * Set the style name of the cell, which can be a space delimited list of
         * style names.
         */
        public abstract void setStyleName(String stylename);

        /**
         * Render all of the cells in a single row.
         * 
         * @param rowIndex the index of the row
         * @param rowValue the row value associated with the row
         * @param rowRenderer the renderer used to render the rows
         * @param visibleColumns the list of visible {@link ColumnDefinition}
         */
        protected void renderRowImpl(int rowIndex, RowType rowValue, RowRenderer<RowType> rowRenderer,
                List<ColumnDefinition<RowType, ?>> visibleColumns) {
            this.rowIndex = rowIndex;
            renderRowValue(rowValue, rowRenderer);
            int numColumns = visibleColumns.size();
            for (int i = 0; i < numColumns; i++) {
                cellView.renderCellImpl(rowIndex, i, rowValue, visibleColumns.get(i));
            }
        }

        /**
         * Render the rows in the table given the list of visible
         * {@link ColumnDefinition ColumnDefinitions}.
         * 
         * @param startRowIndex the index of the first row to render
         * @param rowValues the values associated with each row
         * @param rowRenderer the renderer used to render the rows
         * @param visibleColumns the list of visible {@link ColumnDefinition}
         */
        protected void renderRowsImpl(int startRowIndex, Iterator<RowType> rowValues,
                RowRenderer<RowType> rowRenderer, List<ColumnDefinition<RowType, ?>> visibleColumns) {
            int curRow = startRowIndex;
            while (rowValues.hasNext()) {
                renderRowImpl(curRow, rowValues.next(), rowRenderer, visibleColumns);
                curRow++;
            }
        }

        /**
         * Render a row value into a row.
         * 
         * @param rowValue the row value associated with the row
         * @param rowRenderer the renderer used to render the rows
         */
        protected void renderRowValue(RowType rowValue, RowRenderer<RowType> rowRenderer) {
            rowRenderer.renderRowValue(rowValue, this);
        }
    }

    /**
     * Get the {@link RowRenderer} used to render rows. The return value should
     * not be null.
     * 
     * @return the row renderer
     */
    RowRenderer<RowType> getRowRenderer();

    /**
     * Get a list of the visible {@link ColumnDefinition ColumnDefinitions}.
     * 
     * @return the visible {@link ColumnDefinition ColumnDefinitions}
     */
    List<ColumnDefinition<RowType, ?>> getVisibleColumnDefinitions();

    /**
     * Iterator over the row values, rendering every cell in every row.
     * 
     * @param startRowIndex the index of the first row to render
     * @param rowValues the values associated with the rows
     * @param view the view used to render the rows and cells
     */
    void renderRows(int startRowIndex, Iterator<RowType> rowValues, AbstractRowView<RowType> view);
}