All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.ibm.as400.util.html.HTMLTable Maven / Gradle / Ivy

The newest version!
///////////////////////////////////////////////////////////////////////////////
//                                                                             
// JTOpen (IBM Toolbox for Java - OSS version)                                 
//                                                                             
// Filename: HTMLTable.java
//                                                                             
// The source code contained herein is licensed under the IBM Public License   
// Version 1.0, which has been approved by the Open Source Initiative.         
// Copyright (C) 1997-2001 International Business Machines Corporation and     
// others. All rights reserved.                                                
//                                                                             
///////////////////////////////////////////////////////////////////////////////

package com.ibm.as400.util.html;

import com.ibm.as400.access.ExtendedIllegalArgumentException;
import com.ibm.as400.access.ExtendedIllegalStateException;
import com.ibm.as400.access.Trace;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeSupport;
import java.beans.VetoableChangeListener;
import java.util.Vector;
import java.io.Serializable;

/**
*  The HTMLTable class represents an HTML table tag.
*
*  

This example creates an HTMLTable object and sets its attributes. * *

*  HTMLTable table = new HTMLTable();
*  table.setAlignment(HTMLTable.CENTER);
*  table.setHeaderInUse(false); 
*  table.setBorderWidth(1);
*  table.setCellSpacing(2);
*  table.setCellPadding(2);
*  // Add the rows to the table (Assume that the HTMLTableRow objects are already created).
*  table.addRow(row1);
*  table.addRow(row2);
*  table.addRow(row3);
*  System.out.println(table.getTag());
*  
* *

Here is the output of the table tag: *

*  <table border="1" align="center" cellspacing="2" cellpadding="2">
*  <tr>
*  <td>row1data1</td>
*  <td>row1data2</td>
*  </tr>
*  <tr>
*  <td>row2data1</td>
*  <td>row2data2</td>
*  </tr>
*  <tr>
*  <td>row3data1</td>
*  <td>row3data2</td>
*  </tr>
*  </table>
*  
* *

* The output generated by calling getFOTag() looks like the following: *

*  <fo:block text-align='center'>
*  <fo:table>
*  <fo:table-column column-width='3pt'/>
*  <fo:table-column column-width='3pt'/>
*  <fo:table-column column-width='3pt'/>
*  <fo:table-body>
*  <fo:table-row>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row1data1</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row1data2</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  </fo:table-row>
*  <fo:table-row>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row2data1</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row2data2</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  </fo:table-row>
*  <fo:table-row>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row3data1</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  <fo:table-cell border-style='solid' border-width='1px' padding='2px'><fo:block-container>
*  <fo:block>row3data2</fo:block>
*  </fo:block-container>
*  </fo:table-cell>
*  </fo:table-row>
*  </fo:table-body>
*  </fo:table>
*  </fo:block>
*  
* * *

HTMLTable objects generate the following events: *

    *
  • ElementEvent - The events fired are: *
      *
    • elementAdded *
    • elementChanged *
    • elementRemoved *
    *
  • PropertyChangeEvent *
  • VetoableChangeEvent *
* * @see com.ibm.as400.util.html.HTMLTableRow * @see com.ibm.as400.util.html.HTMLTableCell * @see com.ibm.as400.util.html.HTMLTableHeader * @see com.ibm.as400.util.html.HTMLTableCaption **/ public class HTMLTable extends HTMLTagAttributes implements HTMLConstants, Serializable { private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others."; static final long serialVersionUID = 4552974069573452181L; private Vector rows_; // The table rows. private HTMLTableCaption caption_; // The table caption. private Vector headerTag_; // The table header. private String alignment_; // The table horizontal alignment. private int borderWidth_ = 0; // The table border. private int cellPadding_ = -1; // The global table cell padding. // @C1C private int cellSpacing_ = -1; // The global table cell spacing. // @C1C private int width_ = 0; // The table width. private boolean headerInUse_ = true; // Indicates if the column headers are used. private boolean widthPercent_ = false; // Indicates if the table width is in percent. private String lang_; // The primary language used to display the tags contents. //$B1A private String dir_; // The direction of the text interpretation. //$B1A private boolean useFO_ = false; // Indicates if XSL-FO tags are outputted. //@D1A transient private Vector rowListeners_; // The list of row listeners. @CRS transient private VetoableChangeSupport vetos_; //@CRS /** * Constructs a default HTMLTable object. **/ public HTMLTable() { rows_ = new Vector(); } /** * Constructs an HTMLTable object with the specified rows. * @param rows An array of HTMLTableRow objects. **/ public HTMLTable(HTMLTableRow[] rows) { this(); if (rows == null) throw new NullPointerException("rows"); // Add the rows. for (int i=0; i < rows.length; i++) addRow(rows[i]); } /** * Adds a column to the end of the table. * @param column An array of HTMLTableCell objects containing the data. **/ public void addColumn(HTMLTableCell[] column) { // Validate the column parameter. if (column == null) throw new NullPointerException("column"); HTMLTableRow row; int size = rows_.size(); synchronized (rows_) { // Add new rows to an empty table. if (size == 0) { for (int i=0; i< column.length; i++) { row = new HTMLTableRow(); row.addColumn(column[i]); rows_.addElement(row); } } // Validate the column length. else if (column.length != size) { throw new ExtendedIllegalArgumentException("column", ExtendedIllegalArgumentException.LENGTH_NOT_VALID); } // Add the columns. else { for (int i=0; i< size; i++) { row = (HTMLTableRow)rows_.elementAt(i); row.addColumn(column[i]); } } } } /** * Adds a column header to the end of the table header. * @param header The column header. **/ public void addColumnHeader(String header) { addColumnHeader(new HTMLTableHeader(new HTMLText(header))); } /** * Adds a column header to the end of the table header. * @param header The column header. **/ public void addColumnHeader(HTMLTableHeader header) { if (header == null) throw new NullPointerException("header"); // Verify that the header's HTMLTagElement is set. if (header.getElement() == null) { Trace.log(Trace.ERROR, "The HTMLTableHeader's element attribute is invalid."); throw new ExtendedIllegalArgumentException("header", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); } if (headerTag_ == null) headerTag_ = new Vector(); headerTag_.addElement(header); } /** * Adds a row to the end of the table. * @param row An HTMLTableRow object containing the row data. **/ public void addRow(HTMLTableRow row) // @B2C { //@C2D if (row == null) throw new NullPointerException("row"); rows_.addElement(row); fireAdded(); // Fire the row added event. } /** * Adds an ElementListener for the rows. * The ElementListener object is added to an internal list of RowListeners; * it can be removed with removeRowListener. * @see #removeRowListener * @param listener The ElementListener. **/ public void addRowListener(ElementListener listener) { if (listener == null) throw new NullPointerException("listener"); if (rowListeners_ == null) rowListeners_ = new Vector(); //@CRS rowListeners_.addElement(listener); } /** * Adds the VetoableChangeListener. The specified VetoableChangeListener's vetoableChange * method is called each time the value of any constrained property is changed. * @see #removeVetoableChangeListener * @param listener The VetoableChangeListener. **/ public void addVetoableChangeListener(VetoableChangeListener listener) { if (listener == null) throw new NullPointerException("listener"); if (vetos_ == null) vetos_ = new VetoableChangeSupport(this); //@CRS vetos_.addVetoableChangeListener(listener); } /** * Fires a ELEMENT_ADDED event. **/ private void fireAdded() { if (rowListeners_ == null) return; //@CRS Vector targets = (Vector) rowListeners_.clone(); ElementEvent event = new ElementEvent(this, ElementEvent.ELEMENT_ADDED); for (int i=0; icolumnIndex. * @param columnIndex The index of the column header (0-based). * @return The table header tag. **/ public HTMLTableHeader getColumnHeader(int columnIndex) { if (columnIndex < 0 || columnIndex >= headerTag_.size()) throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); return(HTMLTableHeader)headerTag_.elementAt(columnIndex); } /** * Returns the direction of the text interpretation. * @return The direction of the text. **/ public String getDirection() //$B1A { return dir_; } /** * Returns the direction attribute tag. * @return The direction tag. **/ String getDirectionAttributeTag() //$B1A { //@C2D if(useFO_) //@D1A { //@D1A if((dir_ != null) && (dir_.length()>0)) //@D1A { //@D1A if(dir_.equals(HTMLConstants.RTL)) //@D1A return " writing-mode='rl'"; //@D1A else //@D1A return " writing-mode='lr'"; //@D1A } //@D1A else //@D1A return ""; //@D1A } //@D1A else //@D1A { //@D1A //@C2D if ((dir_ != null) && (dir_.length() > 0)) { StringBuffer buffer = new StringBuffer(" dir=\""); buffer.append(dir_); buffer.append("\""); return buffer.toString(); } else return ""; } //@D1A } /** * Returns the table end tag. * @return The tag. **/ private String getEndTableTag() { if(!useFO_) //@D1A return "\n"; else //@D1A return "\n"; } /** * Returns the table column header tags. * @return The header tags or null if the header is not set. **/ public HTMLTableHeader[] getHeader() { if (headerTag_ == null) return null; else { HTMLTableHeader[] list = new HTMLTableHeader[headerTag_.size()]; headerTag_.copyInto(list); return list; } } /** * Returns the HTML tag for the table column headers. * @return The HTML table header tag or an empty String * if the header is not set. **/ public String getHeaderTag() { if (headerTag_ == null) return ""; else { StringBuffer tag = new StringBuffer(); if(!useFO_ ) //@D1A tag.append("\n"); else //@D1A { //@D1A //get the number of columns in the header, XSL-FO to pdf converter requires you specify column width for the columns int size = headerTag_.size(); //@D1A int column_width = 100/size; //@D1A for (int i=0; i< size; i++) //@D1A { tag.append("\n"); //@D1A } tag.append("\n"); //@D1A tag.append("\n"); //@D1A } HTMLTableHeader colHeader; int size = headerTag_.size(); for (int i=0; i< size; i++) { colHeader = (HTMLTableHeader)headerTag_.elementAt(i); if( !useFO_ ) //@D1A tag.append(colHeader.getTag()); else //@D1A { //@D1A colHeader.setBorderWidth(borderWidth_); //@D1A if(cellPadding_ > -1) //@D1A colHeader.setCellPadding(cellPadding_); //@D1A tag.append(colHeader.getFOTag()); //@D1A } //@D1A } if(!useFO_ ) //@D1A tag.append("\n"); else //@D1A { //@D1A tag.append("\n"); //@D1A tag.append("\n"); //@D1A } //@D1A return tag.toString(); //@D1C } } /** * Returns the language of the caption. * @return The language of the caption. **/ public String getLanguage() //$B1A { return lang_; } /** * Returns the language attribute tag. * @return The language tag. **/ String getLanguageAttributeTag() //$B1A { //@C2D if ((lang_ != null) && (lang_.length() > 0)) { StringBuffer buffer = new StringBuffer(" lang=\""); buffer.append(lang_); buffer.append("\""); return buffer.toString(); } else return ""; } /** * Returns the number of rows in the table. * @return The number of rows. **/ public int getRowCount() { return rows_.size(); } /** * Returns the HTMLTableRow object for the specified rowIndex. * @param rowIndex The index of the table row (0-based). * @return The table row object. **/ public HTMLTableRow getRow(int rowIndex) { if (rowIndex < 0 || rowIndex >= rows_.size()) throw new ExtendedIllegalArgumentException("rowIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); return(HTMLTableRow)rows_.elementAt(rowIndex); } /** * Returns the start table tag. * @return The tag. **/ private String getStartTableTag() { //@C2D StringBuffer tag = new StringBuffer(""); //@D1A if( !useFO_ ) //@D1A { //@D1A tag.append(" 0) { tag.append(" border=\""); tag.append(borderWidth_); tag.append("\""); } if (cellPadding_ >= 0) // @C1C { tag.append(" cellpadding=\""); tag.append(cellPadding_); tag.append("\""); } if (cellSpacing_ >= 0) // @C1C { tag.append(" cellspacing=\""); tag.append(cellSpacing_); tag.append("\""); } if (width_ > 0) { tag.append(" width=\""); tag.append(width_); if (widthPercent_) tag.append("%"); tag.append("\""); } tag.append(getLanguageAttributeTag()); //$B1A tag.append(getDirectionAttributeTag()); //$B1A tag.append(getAttributeString()); // @Z1A tag.append(">\n"); if (caption_ != null) tag.append(caption_.getTag()); } else { //@D1A tag.append("\n"); if(caption_!= null) tag.append(caption_.getFOTag()); tag.append("\n"); } return tag.toString(); //@D1C } /** * Returns the HTML table tag. * @return The tag. **/ public String getTag() { //@C2D if(useFO_) //@D1A return getFOTag(); //@D1A StringBuffer tag = new StringBuffer(getStartTableTag()); // Add the column headers. if (headerInUse_) { if (rows_.size() > 0) { // Verify that the header is set. if (headerTag_ == null) { Trace.log(Trace.ERROR, "Attempting to get the table tag before setting the table header."); throw new ExtendedIllegalStateException("header", ExtendedIllegalStateException.PROPERTY_NOT_SET); } int hdrSize = headerTag_.size(); for (int i=0; i 0) { // Verify that the header is set. if (headerTag_ == null) { Trace.log(Trace.ERROR, "Attempting to get the XSL-FO table tag before setting the table header."); throw new ExtendedIllegalStateException("header", ExtendedIllegalStateException.PROPERTY_NOT_SET); } int hdrSize = headerTag_.size(); int size = rows_.size(); for (int i=0; i\n"); } } tag.append("\n"); size = rows_.size(); for (int i=0; i< size; i++) { row = (HTMLTableRow)rows_.elementAt(i); row.setBorderWidth(borderWidth_); if(cellPadding_ > -1 ) row.setCellPadding(cellPadding_); tag.append(row.getFOTag()); } tag.append("\n"); //Add Closing xsl-fo table body tag tag.append(getEndTableTag()); //Set useFO_ to previous state. setUseFO(useFO); return tag.toString(); //@D1C } /** * Returns the table width in pixels or percent. * @return The table width. * @see #isWidthInPercent **/ public int getWidth() { return width_; } /** * Indicates if the table column header should be used. * @return true if column header should be used; false otherwise. **/ public boolean isHeaderInUse() { return headerInUse_; } /** * Indicates if the table width is in percent or pixels. * @return true if percent, false if pixels. * @see #getWidth **/ public boolean isWidthInPercent() { return widthPercent_; } /** * Returns if Formatting Object tags are outputted. * The default value is false. * @return true if the output generated is an XSL formatting object, false if the output generated is HTML. **/ public boolean isUseFO() //@D1A { return useFO_; } /** * Deserializes and initializes transient data. **/ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); //@CRS rowListeners_ = new Vector(); //@CRS changes_ = new PropertyChangeSupport(this); //@CRS vetos_ = new VetoableChangeSupport(this); } /** * Removes all the rows from the table. **/ public void removeAllRows() { //@C2D rows_.removeAllElements(); fireRemoved(); } /** * Removes a column from the table at the specified columnIndex. * If the column header exists it is also removed. * @param columnIndex The index of the column to be removed (0-based). **/ public void removeColumn(int columnIndex) { // Validate the columnIndex parameter. if (rows_.size() == 0) { Trace.log(Trace.ERROR, "Attempting to remove a column before adding a row to the table."); throw new ExtendedIllegalStateException("rows", ExtendedIllegalStateException.PROPERTY_NOT_SET); } HTMLTableRow row; synchronized (rows_) { int size = rows_.size(); for (int i=0; i< size; i++) { row = (HTMLTableRow)rows_.elementAt(i); row.removeColumn( (HTMLTableCell)row.getColumn(columnIndex) ); } // Remove the column header. if (headerTag_ != null && columnIndex < headerTag_.size()) removeColumnHeader(columnIndex); } } /** * Removes the column header at the specified columnIndex. * @param columnIndex The index of the column header to be removed (0-based). **/ public void removeColumnHeader(int columnIndex) { // Verify that the column header list exists. if (headerTag_ == null) { Trace.log(Trace.ERROR, "Attempting to remove a column header before adding the header list to the table."); throw new ExtendedIllegalStateException("header", ExtendedIllegalStateException.PROPERTY_NOT_SET); } if (columnIndex < 0 || columnIndex >= headerTag_.size()) throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); headerTag_.removeElementAt(columnIndex); } /** * Removes a column header from the table header. * @param header The column header. **/ public void removeColumnHeader(HTMLTableHeader header) { // Verify that the column header list exists. if (headerTag_ == null) { Trace.log(Trace.ERROR, "Attempting to remove a column header before adding the header list to the table."); throw new ExtendedIllegalStateException("header", ExtendedIllegalStateException.PROPERTY_NOT_SET); } if (header == null) throw new NullPointerException("header"); if (!headerTag_.removeElement(header)) throw new ExtendedIllegalArgumentException("header", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); } /** * Removes the row from the table. * @param row An HTMLTableRow object containing the row data. **/ public void removeRow(HTMLTableRow row) { //@C2D // Validate the row parameter. if (row == null) throw new NullPointerException("row"); // Verify the table is not empty. if (rows_.size() == 0) { Trace.log(Trace.ERROR, "Attempting to remove a row when the table is empty."); throw new ExtendedIllegalStateException("rows", ExtendedIllegalStateException.PROPERTY_NOT_SET); } // Remove the row and notify the listeners. if (rows_.removeElement(row)) fireRemoved(); } /** * Removes the row at the specified rowIndex. * @param rowIndex The index of the row to be removed (0-based). **/ public void removeRow(int rowIndex) { //@C2D // Validate the rowIndex parameter. if (rowIndex < 0 || rowIndex >= rows_.size()) throw new ExtendedIllegalArgumentException("rowIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); // Remove the row and notify the listeners. rows_.removeElementAt(rowIndex); fireRemoved(); } /** * Removes this row ElementListener from the internal list. * If the ElementListener is not on the list, nothing is done. * @see #addRowListener * @param listener The ElementListener. **/ public void removeRowListener(ElementListener listener) { if (listener == null) throw new NullPointerException("listener"); if (rowListeners_ != null) rowListeners_.removeElement(listener); //@CRS } /** * Removes the VetoableChangeListener from the internal list. * If the VetoableChangeListener is not on the list, nothing is done. * @see #addVetoableChangeListener * @param listener The VetoableChangeListener. **/ public void removeVetoableChangeListener(VetoableChangeListener listener) { if (listener == null) throw new NullPointerException("listener"); if (vetos_ != null) vetos_.removeVetoableChangeListener(listener); //@CRS } /** * Sets the table horizontal alignment. The default value is LEFT. * @param alignment The table alignment. One of the following constants * defined in HTMLConstants: LEFT, CENTER, or RIGHT. * @exception PropertyVetoException If the change is vetoed. * @see com.ibm.as400.util.html.HTMLConstants **/ public void setAlignment(String alignment) throws PropertyVetoException { if (alignment == null) { throw new NullPointerException("alignment"); } else if (alignment.equalsIgnoreCase(LEFT) || alignment.equalsIgnoreCase(CENTER) || alignment.equalsIgnoreCase(RIGHT)) { String old = alignment_; if (vetos_ != null) vetos_.fireVetoableChange("alignment", old, alignment ); //@CRS alignment_ = alignment; if (changes_ != null) changes_.firePropertyChange("alignment", old, alignment ); //@CRS } else { throw new ExtendedIllegalArgumentException("alignment", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); } } /** * Sets the border width in pixels. A value of zero indicates no border. * The default value is zero. * @param borderWidth The border width. * @exception PropertyVetoException If the change is vetoed. **/ public void setBorderWidth(int borderWidth) throws PropertyVetoException { if (borderWidth < 0) throw new ExtendedIllegalArgumentException("borderWidth", ExtendedIllegalArgumentException.RANGE_NOT_VALID); //@CRS Integer oldWidth = new Integer(borderWidth_); //@CRS Integer newWidth = new Integer(borderWidth); int oldWidth = borderWidth_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("borderWidth", new Integer(oldWidth), new Integer(borderWidth)); //@CRS borderWidth_ = borderWidth; if (changes_ != null) changes_.firePropertyChange("borderWidth", new Integer(oldWidth), new Integer(borderWidth)); //@CRS } /** * Sets the table caption. * @param caption The table caption. * @exception PropertyVetoException If the change is vetoed. **/ public void setCaption(String caption) throws PropertyVetoException { setCaption(new HTMLTableCaption(new HTMLText(caption))); } /** * Sets the table caption. * @param caption An HTMLTableCaption object containing the table caption. * @exception PropertyVetoException If the change is vetoed. **/ public void setCaption(HTMLTableCaption caption) throws PropertyVetoException { if (caption == null) throw new NullPointerException("caption"); HTMLTableCaption old = caption_; if (vetos_ != null) vetos_.fireVetoableChange("caption", old, caption ); //@CRS caption_ = caption; if (changes_ != null) changes_.firePropertyChange("caption", old, caption ); //@CRS } /** * Sets the global table cell padding. The cell padding is the spacing between * data in a table cell and the border of the cell. * The default value is -1 (browser default used). * @param cellPadding The cell padding. * @exception PropertyVetoException If the change is vetoed. **/ public void setCellPadding(int cellPadding) throws PropertyVetoException { if (cellPadding < -1) // @C1C throw new ExtendedIllegalArgumentException("cellPadding", ExtendedIllegalArgumentException.RANGE_NOT_VALID); //@CRS Integer oldPadding = new Integer(cellPadding_); //@CRS Integer newPadding = new Integer(cellPadding); int oldPadding = cellPadding_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("cellPadding", new Integer(oldPadding), new Integer(cellPadding)); //@CRS cellPadding_ = cellPadding; if (changes_ != null) changes_.firePropertyChange("cellPadding", new Integer(oldPadding), new Integer(cellPadding)); //@CRS } /** * Sets the global table cell spacing. * The cell spacing is the spacing between the cells. * The default value is -1 (browser default used). * @param cellSpacing The cell spacing. * @exception PropertyVetoException If the change is vetoed. **/ public void setCellSpacing(int cellSpacing) throws PropertyVetoException { if (cellSpacing < -1) // @C1C throw new ExtendedIllegalArgumentException("cellSpacing", ExtendedIllegalArgumentException.RANGE_NOT_VALID); //@CRS Integer oldSpacing = new Integer(cellSpacing_); //@CRS Integer newSpacing = new Integer(cellSpacing); int oldSpacing = cellSpacing_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("cellSpacing", new Integer(oldSpacing), new Integer(cellSpacing)); //@CRS cellSpacing_ = cellSpacing; if (changes_ != null) changes_.firePropertyChange("cellSpacing", new Integer(oldSpacing), new Integer(cellSpacing)); //@CRS } /** * Sets a column in the table at the specified columnIndex. * @param column An array of HTMLTableCell objects containing the column data. * @param columnIndex The index of the column (0-based). **/ public void setColumn(HTMLTableCell[] column, int columnIndex) { // Validate the column parameter. if (column == null) throw new NullPointerException("column"); int size = rows_.size(); // Add the rows if table is empty. if (size == 0) { addColumn(column); return; } else if (column.length != size) { throw new ExtendedIllegalArgumentException("column", ExtendedIllegalArgumentException.LENGTH_NOT_VALID); } // Validate the columnIndex parameter. if (columnIndex < 0 || columnIndex > ((HTMLTableRow)rows_.elementAt(0)).getColumnCount()) throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); // Update the table rows. HTMLTableRow row; synchronized (rows_) { for (int i=0; i< size; i++) { row = (HTMLTableRow)rows_.elementAt(i); row.setColumn(column[i], columnIndex); } } } /** * Sets the table column header tag. * @param header The table column header. * @param columnIndex The index of the column to be changed (0-based). * @exception PropertyVetoException If the change is vetoed. **/ public void setColumnHeader(String header, int columnIndex) throws PropertyVetoException { setColumnHeader(new HTMLTableHeader(new HTMLText(header)), columnIndex); } /** * Sets the table column header tag at the specified columnIndex. * @param header The table column header. * @param columnIndex The index of the column to be changed (0-based). * @exception PropertyVetoException If the change is vetoed. **/ public void setColumnHeader(HTMLTableHeader header, int columnIndex) throws PropertyVetoException { // Validate the header parameter. if (header == null) throw new NullPointerException("header"); // Validate that the header tag exists. if (headerTag_ == null) { if (columnIndex == 0) { addColumnHeader(header); return; } else { Trace.log(Trace.ERROR, "Attempting to change a column header before adding a column header to the table."); throw new ExtendedIllegalStateException("header", ExtendedIllegalStateException.PROPERTY_NOT_SET); } } // Verify that the header's HTMLTagElement is set. if (header.getElement() == null) { Trace.log(Trace.ERROR, "The HTMLTableHeader's element attribute is invalid."); throw new ExtendedIllegalArgumentException("header", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); } // Validate the columnIndex parameter. if (columnIndex < 0 || columnIndex > headerTag_.size()) throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); else if (columnIndex == headerTag_.size()) { addColumnHeader(header); return; } else { Vector old = headerTag_; if (vetos_ != null) vetos_.fireVetoableChange("header", old, headerTag_); //@CRS headerTag_.setElementAt(header, columnIndex); if (changes_ != null) changes_.firePropertyChange("header", old, headerTag_); //@CRS } } /** * Sets the direction of the text interpretation. * @param dir The direction. One of the following constants * defined in HTMLConstants: LTR or RTL. * * @see com.ibm.as400.util.html.HTMLConstants * * @exception PropertyVetoException If a change is vetoed. **/ public void setDirection(String dir) //$B1A throws PropertyVetoException { if (dir == null) throw new NullPointerException("dir"); // If direction is not one of the valid HTMLConstants, throw an exception. if ( !(dir.equals(HTMLConstants.LTR)) && !(dir.equals(HTMLConstants.RTL)) ) { throw new ExtendedIllegalArgumentException("dir", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); } String old = dir_; if (vetos_ != null) vetos_.fireVetoableChange("dir", old, dir ); //@CRS dir_ = dir; if (changes_ != null) changes_.firePropertyChange("dir", old, dir ); //@CRS } /** * Sets the table column headers. * @param header The column headers. * @exception PropertyVetoException If the change is vetoed. * @see #setHeaderInUse **/ public void setHeader(HTMLTableHeader[] header) throws PropertyVetoException { if (header == null) throw new NullPointerException("header"); // Verify that the header size matches the number of columns in a row. if ((!rows_.isEmpty()) && header.length != ((HTMLTableRow)rows_.elementAt(0)).getColumnCount()) throw new ExtendedIllegalArgumentException("header", ExtendedIllegalArgumentException.LENGTH_NOT_VALID); Vector old = headerTag_; if (vetos_ != null) vetos_.fireVetoableChange("header", old, header ); //@CRS headerTag_ = new Vector(); for (int i=0; i< header.length; i++) headerTag_.addElement(header[i]); if (changes_ != null) changes_.firePropertyChange("header", old, header ); //@CRS } /** * Sets the table column headers. * @param header The column headers. * @exception PropertyVetoException If the change is vetoed. **/ public void setHeader(String[] header) throws PropertyVetoException { if (header == null) throw new NullPointerException("header"); // Create an array of HTMLTableHeader objects. HTMLTableHeader[] tableHeader = new HTMLTableHeader[header.length]; for (int column=0; column < header.length; column++) tableHeader[column] = new HTMLTableHeader(new HTMLText(header[column])); setHeader(tableHeader); } /** * Sets if table column headers should be used. The default value is true. * @param headerInUse true if the column headers should be used; false otherwise. * @exception PropertyVetoException If the change is vetoed. **/ public void setHeaderInUse(boolean headerInUse) throws PropertyVetoException { //@CRS Boolean oldUse = new Boolean(headerInUse_); //@CRS Boolean newUse = new Boolean(headerInUse); boolean oldUse = headerInUse_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("useHeader", new Boolean(oldUse), new Boolean(headerInUse)); //@CRS headerInUse_ = headerInUse; if (changes_ != null) changes_.firePropertyChange("useHeader", new Boolean(oldUse), new Boolean(headerInUse)); //@CRS } /** * Sets the language of the caption. * @param lang The language. Example language tags include: * en and en-US. * * @exception PropertyVetoException If a change is vetoed. **/ public void setLanguage(String lang) //$B1A throws PropertyVetoException { if (lang == null) throw new NullPointerException("lang"); String old = lang_; if (vetos_ != null) vetos_.fireVetoableChange("lang", old, lang ); //@CRS lang_ = lang; if (changes_ != null) changes_.firePropertyChange("lang", old, lang ); //@CRS } /** * Sets the table row at the specified rowIndex. * @param row An HTMLTableRow object with the row data. * @param rowIndex The index of the row (0-based). **/ public void setRow(HTMLTableRow row, int rowIndex) { //@C2D // Validate the row parameter. if (row == null) throw new NullPointerException("row"); // Validate the rowIndex parameter. if (rowIndex < 0 || rowIndex > rows_.size()) throw new ExtendedIllegalArgumentException("rowIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID); // Set the row. if (rowIndex == rows_.size()) addRow(row); else { // Validate the number of columns in the row. if (row.getColumnCount() != ((HTMLTableRow)rows_.elementAt(0)).getColumnCount()) throw new ExtendedIllegalArgumentException("row", ExtendedIllegalArgumentException.LENGTH_NOT_VALID); rows_.setElementAt(row, rowIndex); // Notify the listeners. fireChanged(); } } /** * Sets the table width. The default width unit is pixels. * @param width The table width. * @exception PropertyVetoException If the change is vetoed. * @see #setWidthInPercent **/ public void setWidth(int width) throws PropertyVetoException { if (width < 0) throw new ExtendedIllegalArgumentException("width", ExtendedIllegalArgumentException.RANGE_NOT_VALID); //@CRS Integer oldWidth = new Integer(width_); //@CRS Integer newWidth = new Integer(width); int oldWidth = width_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("width", new Integer(oldWidth), new Integer(width)); //@CRS width_ = width; if (changes_ != null) changes_.firePropertyChange("width", new Integer(oldWidth), new Integer(width)); //@CRS } /** * Sets the table width in percent or pixels. * @param width The table width. * @param widthInPercent true if width is specified as a percent; false if width is specified in pixels. * @exception PropertyVetoException If the change is vetoed. **/ public void setWidth(int width, boolean widthInPercent) throws PropertyVetoException { int oldWidth = width_; setWidth(width); try { setWidthInPercent(widthInPercent); } catch (PropertyVetoException e) { // restore the original width. width_ = oldWidth; throw new PropertyVetoException("widthInPercent", e.getPropertyChangeEvent()); } } /** * Sets the table width unit in percent or pixels. The default is false. * @param widthInPercent true if width is specified as a percent; false if width is specified in pixels. * @exception PropertyVetoException If the change is vetoed. * @see #setWidth **/ public void setWidthInPercent(boolean widthInPercent) throws PropertyVetoException { //@CRS Boolean oldValue = new Boolean(widthPercent_); //@CRS Boolean newValue = new Boolean(widthInPercent); boolean oldValue = widthPercent_; //@CRS if (vetos_ != null) vetos_.fireVetoableChange("widthInPercent", new Boolean(oldValue), new Boolean(widthInPercent)); //@CRS widthPercent_ = widthInPercent; if (changes_ != null) changes_.firePropertyChange("widthInPercent", new Boolean(oldValue), new Boolean(widthInPercent)); //@CRS } /** * Sets if Formatting Object tags should be used. * The default value is false. * @param useFO - true if output generated is an XSL formatting object, false if the output generated is HTML. **/ public void setUseFO(boolean useFO) //@D1A { boolean old = useFO_; useFO_ = useFO; if (changes_ != null) changes_.firePropertyChange("useFO", old, useFO ); } /** * Returns the HTML table tag. * @return The tag. **/ public String toString() { return getTag(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy