mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			635 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			635 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
/* DefaultTableModel.java --
 | 
						|
   Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing.table;
 | 
						|
 | 
						|
import java.io.Serializable;
 | 
						|
import java.util.Vector;
 | 
						|
 | 
						|
import javax.swing.event.TableModelEvent;
 | 
						|
 | 
						|
/**
 | 
						|
 * A two dimensional data structure used to store <code>Object</code>
 | 
						|
 * instances, usually for display in a <code>JTable</code> component.
 | 
						|
 *
 | 
						|
 * @author      Andrew Selkirk
 | 
						|
 */
 | 
						|
public class DefaultTableModel extends AbstractTableModel
 | 
						|
  implements Serializable
 | 
						|
{
 | 
						|
  static final long serialVersionUID = 6680042567037222321L;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Storage for the rows in the table (each row is itself
 | 
						|
   * a <code>Vector</code>).
 | 
						|
   */
 | 
						|
  protected Vector dataVector;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Storage for the column identifiers.
 | 
						|
   */
 | 
						|
  protected Vector columnIdentifiers;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an empty table with zero rows and zero columns.
 | 
						|
   */
 | 
						|
  public DefaultTableModel()
 | 
						|
  {
 | 
						|
    this(0, 0);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new table with the specified number of rows and columns.
 | 
						|
   * All cells in the table are initially empty (set to <code>null</code>).
 | 
						|
   *
 | 
						|
   * @param numRows  the number of rows.
 | 
						|
   * @param numColumns  the number of columns.
 | 
						|
   */
 | 
						|
  public DefaultTableModel(int numRows, int numColumns)
 | 
						|
  {
 | 
						|
    Vector defaultNames = new Vector(numColumns);
 | 
						|
    Vector data = new Vector(numRows);
 | 
						|
    for (int i = 0; i < numColumns; i++)
 | 
						|
      {
 | 
						|
        defaultNames.add(super.getColumnName(i));
 | 
						|
      }
 | 
						|
    for (int r = 0; r < numRows; r++)
 | 
						|
      {
 | 
						|
        Vector tmp = new Vector(numColumns);
 | 
						|
        tmp.setSize(numColumns);
 | 
						|
        data.add(tmp);
 | 
						|
      }
 | 
						|
    setDataVector(data, defaultNames);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new table with the specified column names and number of
 | 
						|
   * rows.  The number of columns is determined by the number of column
 | 
						|
   * names supplied.
 | 
						|
   *
 | 
						|
   * @param columnNames the column names.
 | 
						|
   * @param numRows the number of rows.
 | 
						|
   */
 | 
						|
  public DefaultTableModel(Vector columnNames, int numRows)
 | 
						|
  {
 | 
						|
    if (numRows < 0)
 | 
						|
      throw new IllegalArgumentException("numRows < 0");
 | 
						|
    Vector data = new Vector();
 | 
						|
    int numColumns = 0;
 | 
						|
 | 
						|
    if (columnNames != null)
 | 
						|
      numColumns = columnNames.size();
 | 
						|
 | 
						|
    while (0 < numRows--)
 | 
						|
      {
 | 
						|
        Vector rowData = new Vector();
 | 
						|
        rowData.setSize(numColumns);
 | 
						|
        data.add(rowData);
 | 
						|
      }
 | 
						|
    setDataVector(data, columnNames);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new table with the specified column names and row count.
 | 
						|
   *
 | 
						|
   * @param columnNames the column names.
 | 
						|
   * @param numRows the number of rows.
 | 
						|
   */
 | 
						|
  public DefaultTableModel(Object[] columnNames, int numRows)
 | 
						|
  {
 | 
						|
    this(convertToVector(columnNames), numRows);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new table with the specified data values and column names.
 | 
						|
   *
 | 
						|
   * @param data the data values.
 | 
						|
   * @param columnNames the column names.
 | 
						|
   */
 | 
						|
  public DefaultTableModel(Vector data, Vector columnNames)
 | 
						|
  {
 | 
						|
    setDataVector(data, columnNames);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new table with the specified data values and column names.
 | 
						|
   *
 | 
						|
   * @param data the data values.
 | 
						|
   * @param columnNames the column names.
 | 
						|
   */
 | 
						|
  public DefaultTableModel(Object[][] data, Object[] columnNames)
 | 
						|
  {
 | 
						|
    this(convertToVector(data), convertToVector(columnNames));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the vector containing the row data for the table.
 | 
						|
   *
 | 
						|
   * @return The data vector.
 | 
						|
   */
 | 
						|
  public Vector getDataVector()
 | 
						|
  {
 | 
						|
    return dataVector;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the data and column identifiers for the table.  The data vector
 | 
						|
   * contains a <code>Vector</code> for each row in the table - if the
 | 
						|
   * number of objects in each row does not match the number of column
 | 
						|
   * names specified, the row data is truncated or expanded (by adding
 | 
						|
   * <code>null</code> values) as required.
 | 
						|
   *
 | 
						|
   * @param data the data for the table (a vector of row vectors).
 | 
						|
   * @param columnNames the column names.
 | 
						|
   *
 | 
						|
   * @throws NullPointerException if either argument is <code>null</code>.
 | 
						|
   */
 | 
						|
  public void setDataVector(Vector data, Vector columnNames)
 | 
						|
  {
 | 
						|
    if (data == null)
 | 
						|
      dataVector = new Vector();
 | 
						|
    else
 | 
						|
      dataVector = data;
 | 
						|
    setColumnIdentifiers(columnNames);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the data and column identifiers for the table.
 | 
						|
   *
 | 
						|
   * @param data the data for the table.
 | 
						|
   * @param columnNames the column names.
 | 
						|
   *
 | 
						|
   * @throws NullPointerException if either argument is <code>null</code>.
 | 
						|
   */
 | 
						|
  public void setDataVector(Object[][] data, Object[] columnNames)
 | 
						|
  {
 | 
						|
    setDataVector(convertToVector(data),
 | 
						|
                  convertToVector(columnNames));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sends the specified <code>event</code> to all registered listeners.
 | 
						|
   * This method is equivalent to
 | 
						|
   * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
 | 
						|
   *
 | 
						|
   * @param event the event.
 | 
						|
   */
 | 
						|
  public void newDataAvailable(TableModelEvent event)
 | 
						|
  {
 | 
						|
    fireTableChanged(event);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sends the specified <code>event</code> to all registered listeners.
 | 
						|
   * This method is equivalent to
 | 
						|
   * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
 | 
						|
   *
 | 
						|
   * @param event the event.
 | 
						|
   */
 | 
						|
  public void newRowsAdded(TableModelEvent event)
 | 
						|
  {
 | 
						|
    fireTableChanged(event);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sends the specified <code>event</code> to all registered listeners.
 | 
						|
   * This method is equivalent to
 | 
						|
   * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
 | 
						|
   *
 | 
						|
   * @param event the event.
 | 
						|
   */
 | 
						|
  public void rowsRemoved(TableModelEvent event)
 | 
						|
  {
 | 
						|
    fireTableChanged(event);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the column identifiers, updates the data rows (truncating
 | 
						|
   * or padding each row with <code>null</code> values) to match the
 | 
						|
   * number of columns, and sends a {@link TableModelEvent} to all
 | 
						|
   * registered listeners.
 | 
						|
   *
 | 
						|
   * @param columnIdentifiers the column identifiers.
 | 
						|
   */
 | 
						|
  public void setColumnIdentifiers(Vector columnIdentifiers)
 | 
						|
  {
 | 
						|
    this.columnIdentifiers = columnIdentifiers;
 | 
						|
    setColumnCount(columnIdentifiers == null ? 0 : columnIdentifiers.size());
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the column identifiers, updates the data rows (truncating
 | 
						|
   * or padding each row with <code>null</code> values) to match the
 | 
						|
   * number of columns, and sends a {@link TableModelEvent} to all
 | 
						|
   * registered listeners.
 | 
						|
   *
 | 
						|
   * @param columnIdentifiers the column identifiers.
 | 
						|
   */
 | 
						|
  public void setColumnIdentifiers(Object[] columnIdentifiers)
 | 
						|
  {
 | 
						|
    setColumnIdentifiers(convertToVector(columnIdentifiers));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method is obsolete, use {@link #setRowCount(int)} instead.
 | 
						|
   *
 | 
						|
   * @param numRows the number of rows.
 | 
						|
   */
 | 
						|
  public void setNumRows(int numRows)
 | 
						|
  {
 | 
						|
    setRowCount(numRows);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the number of rows in the table.  If <code>rowCount</code> is less
 | 
						|
   * than the current number of rows in the table, rows are discarded.
 | 
						|
   * If <code>rowCount</code> is greater than the current number of rows in
 | 
						|
   * the table, new (empty) rows are added.
 | 
						|
   *
 | 
						|
   * @param rowCount the row count.
 | 
						|
   */
 | 
						|
  public void setRowCount(int rowCount)
 | 
						|
  {
 | 
						|
    int existingRowCount = dataVector.size();
 | 
						|
    if (rowCount < existingRowCount)
 | 
						|
    {
 | 
						|
      dataVector.setSize(rowCount);
 | 
						|
      fireTableRowsDeleted(rowCount, existingRowCount - 1);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      int rowsToAdd = rowCount - existingRowCount;
 | 
						|
      addExtraRows(rowsToAdd, columnIdentifiers.size());
 | 
						|
      fireTableRowsInserted(existingRowCount, rowCount - 1);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the number of columns in the table.  Existing rows are truncated
 | 
						|
   * or padded with <code>null</code> values to match the new column count.
 | 
						|
   * A {@link TableModelEvent} is sent to all registered listeners.
 | 
						|
   *
 | 
						|
   * @param columnCount the column count.
 | 
						|
   */
 | 
						|
  public void setColumnCount(int columnCount)
 | 
						|
  {
 | 
						|
    for (int i = 0; i < dataVector.size(); ++i)
 | 
						|
      {
 | 
						|
        ((Vector) dataVector.get(i)).setSize(columnCount);
 | 
						|
      }
 | 
						|
    if (columnIdentifiers != null)
 | 
						|
      columnIdentifiers.setSize(columnCount);
 | 
						|
    fireTableStructureChanged();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a column with the specified name to the table.  All cell values
 | 
						|
   * for the column are initially set to <code>null</code>.
 | 
						|
   *
 | 
						|
   * @param columnName the column name (<code>null</code> permitted).
 | 
						|
   */
 | 
						|
  public void addColumn(Object columnName)
 | 
						|
  {
 | 
						|
    addColumn(columnName, (Object[]) null);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a column with the specified name and data values to the table.
 | 
						|
   *
 | 
						|
   * @param columnName the column name (<code>null</code> permitted).
 | 
						|
   * @param columnData the column data.
 | 
						|
   */
 | 
						|
  public void addColumn(Object columnName, Vector columnData)
 | 
						|
  {
 | 
						|
    Object[] dataArray = null;
 | 
						|
    if (columnData != null)
 | 
						|
    {
 | 
						|
      int rowCount = dataVector.size();
 | 
						|
      if (columnData.size() < rowCount)
 | 
						|
        columnData.setSize(rowCount);
 | 
						|
      dataArray = columnData.toArray();
 | 
						|
    }
 | 
						|
    addColumn(columnName, dataArray);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a column with the specified name and data values to the table.
 | 
						|
   *
 | 
						|
   * @param columnName the column name (<code>null</code> permitted).
 | 
						|
   * @param columnData the column data.
 | 
						|
   */
 | 
						|
  public void addColumn(Object columnName, Object[] columnData)
 | 
						|
  {
 | 
						|
    if (columnData != null)
 | 
						|
    {
 | 
						|
      // check columnData array for cases where the number of items
 | 
						|
      // doesn't match the number of rows in the existing table
 | 
						|
      if (columnData.length > dataVector.size())
 | 
						|
      {
 | 
						|
        int rowsToAdd = columnData.length - dataVector.size();
 | 
						|
        addExtraRows(rowsToAdd, columnIdentifiers.size());
 | 
						|
      }
 | 
						|
      else if (columnData.length < dataVector.size())
 | 
						|
      {
 | 
						|
        Object[] tmp = new Object[dataVector.size()];
 | 
						|
        System.arraycopy(columnData, 0, tmp, 0, columnData.length);
 | 
						|
        columnData = tmp;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    for (int i = 0; i < dataVector.size(); ++i)
 | 
						|
      {
 | 
						|
        ((Vector) dataVector.get(i)).add(columnData == null ? null : columnData[i]);
 | 
						|
      }
 | 
						|
    columnIdentifiers.add(columnName);
 | 
						|
    fireTableStructureChanged();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a new row containing the specified data to the table and sends a
 | 
						|
   * {@link TableModelEvent} to all registered listeners.
 | 
						|
   *
 | 
						|
   * @param rowData the row data (<code>null</code> permitted).
 | 
						|
   */
 | 
						|
  public void addRow(Vector rowData)
 | 
						|
  {
 | 
						|
    int rowIndex = dataVector.size();
 | 
						|
    dataVector.add(rowData);
 | 
						|
    newRowsAdded(new TableModelEvent(
 | 
						|
      this, rowIndex, rowIndex, -1, TableModelEvent.INSERT)
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a new row containing the specified data to the table and sends a
 | 
						|
   * {@link TableModelEvent} to all registered listeners.
 | 
						|
   *
 | 
						|
   * @param rowData the row data (<code>null</code> permitted).
 | 
						|
   */
 | 
						|
  public void addRow(Object[] rowData)
 | 
						|
  {
 | 
						|
    addRow(convertToVector(rowData));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Inserts a new row into the table.
 | 
						|
   *
 | 
						|
   * @param row the row index.
 | 
						|
   * @param rowData the row data.
 | 
						|
   */
 | 
						|
  public void insertRow(int row, Vector rowData)
 | 
						|
  {
 | 
						|
    dataVector.add(row, rowData);
 | 
						|
    fireTableRowsInserted(row, row);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Inserts a new row into the table.
 | 
						|
   *
 | 
						|
   * @param row the row index.
 | 
						|
   * @param rowData the row data.
 | 
						|
   */
 | 
						|
  public void insertRow(int row, Object[] rowData)
 | 
						|
  {
 | 
						|
    insertRow(row, convertToVector(rowData));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Moves the rows from <code>startIndex</code> to <code>endIndex</code>
 | 
						|
   * (inclusive) to the specified row.
 | 
						|
   *
 | 
						|
   * @param startIndex the start row.
 | 
						|
   * @param endIndex the end row.
 | 
						|
   * @param toIndex the row to move to.
 | 
						|
   */
 | 
						|
  public void moveRow(int startIndex, int endIndex, int toIndex)
 | 
						|
  {
 | 
						|
    Vector removed = new Vector();
 | 
						|
    for (int i = endIndex; i >= startIndex; i--)
 | 
						|
    {
 | 
						|
      removed.add(this.dataVector.remove(i));
 | 
						|
    }
 | 
						|
    for (int i = 0; i <= endIndex - startIndex; i++)
 | 
						|
    {
 | 
						|
      dataVector.insertElementAt(removed.get(i), toIndex);
 | 
						|
    }
 | 
						|
    int firstRow = Math.min(startIndex, toIndex);
 | 
						|
    int lastRow = Math.max(endIndex, toIndex + (endIndex - startIndex));
 | 
						|
    fireTableRowsUpdated(firstRow, lastRow);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Removes a row from the table and sends a {@link TableModelEvent} to
 | 
						|
   * all registered listeners.
 | 
						|
   *
 | 
						|
   * @param row the row index.
 | 
						|
   */
 | 
						|
  public void removeRow(int row)
 | 
						|
  {
 | 
						|
    dataVector.remove(row);
 | 
						|
    fireTableRowsDeleted(row, row);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the number of rows in the model.
 | 
						|
   *
 | 
						|
   * @return The row count.
 | 
						|
   */
 | 
						|
  public int getRowCount()
 | 
						|
  {
 | 
						|
    return dataVector.size();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the number of columns in the model.
 | 
						|
   *
 | 
						|
   * @return The column count.
 | 
						|
   */
 | 
						|
  public int getColumnCount()
 | 
						|
  {
 | 
						|
    return columnIdentifiers == null ? 0 : columnIdentifiers.size();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the name of the column. If the column has the column identifier set,
 | 
						|
   * the return value is the result of the .toString() method call on that
 | 
						|
   * identifier. If the identifier is not explicitly set, the returned value
 | 
						|
   * is calculated by {@link AbstractTableModel#getColumnName(int)}.
 | 
						|
   *
 | 
						|
   * @param column the column index.
 | 
						|
   *
 | 
						|
   * @return The column name.
 | 
						|
   */
 | 
						|
  public String getColumnName(int column)
 | 
						|
  {
 | 
						|
    String result = "";
 | 
						|
    if (columnIdentifiers == null)
 | 
						|
      result = super.getColumnName(column);
 | 
						|
    else
 | 
						|
    {
 | 
						|
      if (column < getColumnCount())
 | 
						|
      {
 | 
						|
        checkSize();
 | 
						|
        Object id = columnIdentifiers.get(column);
 | 
						|
        if (id != null)
 | 
						|
          result = id.toString();
 | 
						|
        else
 | 
						|
          result = super.getColumnName(column);
 | 
						|
      }
 | 
						|
      else
 | 
						|
        result = super.getColumnName(column);
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns <code>true</code> if the specified cell can be modified, and
 | 
						|
   * <code>false</code> otherwise.  For this implementation, the method
 | 
						|
   * always returns <code>true</code>.
 | 
						|
   *
 | 
						|
   * @param row the row index.
 | 
						|
   * @param column the column index.
 | 
						|
   *
 | 
						|
   * @return <code>true</code> in all cases.
 | 
						|
   */
 | 
						|
  public boolean isCellEditable(int row, int column)
 | 
						|
  {
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the value at the specified cell in the table.
 | 
						|
   *
 | 
						|
   * @param row the row index.
 | 
						|
   * @param column the column index.
 | 
						|
   *
 | 
						|
   * @return The value (<code>Object</code>, possibly <code>null</code>) at
 | 
						|
   *         the specified cell in the table.
 | 
						|
   */
 | 
						|
  public Object getValueAt(int row, int column)
 | 
						|
  {
 | 
						|
    return ((Vector) dataVector.get(row)).get(column);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value for the specified cell in the table and sends a
 | 
						|
   * {@link TableModelEvent} to all registered listeners.
 | 
						|
   *
 | 
						|
   * @param value the value (<code>Object</code>, <code>null</code> permitted).
 | 
						|
   * @param row the row index.
 | 
						|
   * @param column the column index.
 | 
						|
   */
 | 
						|
  public void setValueAt(Object value, int row, int column)
 | 
						|
  {
 | 
						|
    ((Vector) dataVector.get(row)).set(column, value);
 | 
						|
    fireTableCellUpdated(row, column);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Converts the data array to a <code>Vector</code>.
 | 
						|
   *
 | 
						|
   * @param data the data array (<code>null</code> permitted).
 | 
						|
   *
 | 
						|
   * @return A vector (or <code>null</code> if the data array
 | 
						|
   *         is <code>null</code>).
 | 
						|
   */
 | 
						|
  protected static Vector convertToVector(Object[] data)
 | 
						|
  {
 | 
						|
    if (data == null)
 | 
						|
      return null;
 | 
						|
    Vector vector = new Vector(data.length);
 | 
						|
    for (int i = 0; i < data.length; i++)
 | 
						|
      vector.add(data[i]);
 | 
						|
    return vector;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Converts the data array to a <code>Vector</code> of rows.
 | 
						|
   *
 | 
						|
   * @param data the data array (<code>null</code> permitted).
 | 
						|
   *
 | 
						|
   * @return A vector (or <code>null</code> if the data array
 | 
						|
   *         is <code>null</code>.
 | 
						|
   */
 | 
						|
  protected static Vector convertToVector(Object[][] data)
 | 
						|
  {
 | 
						|
    if (data == null)
 | 
						|
      return null;
 | 
						|
    Vector vector = new Vector(data.length);
 | 
						|
    for (int i = 0; i < data.length; i++)
 | 
						|
      vector.add(convertToVector(data[i]));
 | 
						|
    return vector;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method adds some rows to <code>dataVector</code>.
 | 
						|
   *
 | 
						|
   * @param rowsToAdd number of rows to add
 | 
						|
   * @param nbColumns size of the added rows
 | 
						|
   */
 | 
						|
  private void addExtraRows(int rowsToAdd, int nbColumns)
 | 
						|
  {
 | 
						|
    for (int i = 0; i < rowsToAdd; i++)
 | 
						|
      {
 | 
						|
        Vector tmp = new Vector();
 | 
						|
        tmp.setSize(columnIdentifiers.size());
 | 
						|
        dataVector.add(tmp);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Checks the real columns/rows sizes against the ones returned by
 | 
						|
   * <code>getColumnCount()</code> and <code>getRowCount()</code>.
 | 
						|
   * If the supposed one are bigger, then we grow <code>columIdentifiers</code>
 | 
						|
   * and <code>dataVector</code> to their expected size.
 | 
						|
   */
 | 
						|
  private void checkSize()
 | 
						|
  {
 | 
						|
    int columnCount = getColumnCount();
 | 
						|
    int rowCount = getRowCount();
 | 
						|
 | 
						|
    if (columnCount > columnIdentifiers.size())
 | 
						|
      columnIdentifiers.setSize(columnCount);
 | 
						|
 | 
						|
    if (dataVector != null && rowCount > dataVector.size())
 | 
						|
      {
 | 
						|
        int rowsToAdd = rowCount - dataVector.size();
 | 
						|
        addExtraRows(rowsToAdd, columnCount);
 | 
						|
      }
 | 
						|
  }
 | 
						|
}
 |