src.com.ibm.as400.util.html.HTMLTableRow Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400-jdk8 Show documentation
Show all versions of jt400-jdk8 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: HTMLTableRow.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.io.Serializable;
import java.util.Vector;
/**
* The HTMLTableRow class represents an HTML row tag.
*
* This example creates an HTMLTableRow object and sets the attributes.
*
* HTMLTableRow row = new HTMLTableRow();
* row.setHorizontalAlignment(HTMLTableRow.CENTER);
* row.setVerticalAlignment(HTMLTableRow.MIDDLE);
* // Add the columns to the row (Assume that the HTMLTableCell objects are already created).
* row.addColumn(column1);
* row.addColumn(column2);
* row.addColumn(column3);
* row.addColumn(column4);
* System.out.println(row.getTag());
*
* Here is the output of the tag:
*
* <tr align="center" valign="middle">
* <td>data1</td>
* <td>data2</td>
* <td>data3</td>
* <td>data4</td>
* </tr>
*
*
* Using XSL Formatting Objects, the output generated is:
*
* <fo:table-row text-align="center">
* <fo:table-cell border-style='solid' border-width='1px' padding='1px'><fo:block-container>
* <fo:block>data1</fo:block>
* </fo:block-container>
* </fo:table-cell>
* <fo:table-cell border-style='solid' border-width='1px' padding='1px'><fo:block-container>
* <fo:block>data2</fo:block>
* </fo:block-container>
* </fo:table-cell>
* <fo:table-cell border-style='solid' border-width='1px' padding='1px'><fo:block-container>
* <fo:block>data3</fo:block>
* </fo:block-container>
* </fo:table-cell>
* <fo:table-cell border-style='solid' border-width='1px' padding='1px'><fo:block-container>
* <fo:block>data4</fo:block>
* </fo:block-container>
* </fo:table-cell>
* </fo:table-row>
*
*
* HTMLTableRow objects generate the following events:
*
* - ElementEvent - The events fired are:
*
* - elementAdded
*
- elementChanged
*
- elementRemoved
*
* - PropertyChangeEvent
*
- VetoableChangeEvent
*
*
* @see com.ibm.as400.util.html.HTMLTable
* @see com.ibm.as400.util.html.HTMLTableCell
**/
public class HTMLTableRow extends HTMLTagAttributes implements HTMLConstants, Serializable // @Z1C
{
private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others.";
static final long serialVersionUID = -3968067893063774982L;
private Vector row_; // The columns in the row.
private String hAlign_; // The global horizontal alignment for each cells in the row.
private String vAlign_; // The global vertical alignment for each cell in the row.
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; // Sets use fo tag. //@D1A
private int borderWidth_ = 1; // The border width //@D1A
private int cellPadding_ = 1; // The cell padding //@D1A
transient private Vector columnListeners_; // The list of column listeners. @CRS
transient private VetoableChangeSupport vetos_; //@CRS
/**
* Constructs a default HTMLTableRow object.
**/
public HTMLTableRow()
{
row_ = new Vector();
}
/**
* Constructs an HTMLTableRow object with the specified cells.
* @param cells The HTMLTableCell array.
**/
public HTMLTableRow(HTMLTableCell[] cells)
{
this();
if (cells == null)
throw new NullPointerException("cells");
for (int i=0; i< cells.length; i++)
row_.addElement(cells[i]);
}
/**
* Adds the column to the row.
* @param cell The HTMLTableCell containing the column data.
**/
public void addColumn(HTMLTableCell cell)
{
//@C1D
if (cell == null)
throw new NullPointerException("cell");
row_.addElement(cell);
// Notify the listeners.
fireAdded();
}
/**
* Adds an ElementListener for the columns.
* The ElementListener object is added to an internal list of ColumnListeners;
* it can be removed with removeColumnListener.
* @see #removeColumnListener
* @param listener The ElementListener.
**/
public void addColumnListener(ElementListener listener)
{
if (listener == null)
throw new NullPointerException("listener");
if (columnListeners_ == null) columnListeners_ = new Vector(); //@CRS
columnListeners_.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 (columnListeners_ == null) return; //@CRS
Vector targets = (Vector) columnListeners_.clone();
ElementEvent event = new ElementEvent(this, ElementEvent.ELEMENT_ADDED);
for (int i=0; icolumnIndex.
* @param columnIndex - The column index.
* @return An HTMLTableCell object with the column data.
**/
public HTMLTableCell getColumn(int columnIndex)
{
if (columnIndex < 0 || columnIndex >= row_.size())
throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID);
return(HTMLTableCell)row_.elementAt(columnIndex);
}
/**
* Returns the number of columns in the row.
* @return The number of columns.
**/
public int getColumnCount()
{
return row_.size();
}
/**
* Returns the column index of the specified cell.
* @param cell An HTMLTableCell object that contains the cell data.
* @return The column index of the cell. Returns -1 if the column is not found.
**/
public int getColumnIndex(HTMLTableCell cell)
{
if (cell == null)
throw new NullPointerException("cell");
return row_.indexOf(cell);
}
/**
* Returns the column index of the specified cell.
* @param cell An HTMLTableCell object that contains the cell data.
* @param index The column index to start searching from.
* @return The column index of the cell. Returns -1 if the column is not found.
**/
public int getColumnIndex(HTMLTableCell cell, int index )
{
if (cell == null)
throw new NullPointerException("cell");
if (index >= row_.size() || index < 0)
throw new ExtendedIllegalArgumentException("index", ExtendedIllegalArgumentException.RANGE_NOT_VALID);
return row_.indexOf(cell, index);
}
/**
* 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
{
//@C1D
if ((dir_ != null) && (dir_.length() > 0))
{
StringBuffer buffer = new StringBuffer(" dir=\"");
buffer.append(dir_);
buffer.append("\"");
return buffer.toString();
}
else
return "";
}
/**
* Returns the global horizontal alignment for the row.
* @return The horizontal alignment. One of the following constants
* defined in HTMLConstants: CENTER, LEFT, or RIGHT.
* @see com.ibm.as400.util.html.HTMLConstants
**/
public String getHorizontalAlignment()
{
return hAlign_;
}
/**
* 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
{
//@C1D
if ((lang_ != null) && (lang_.length() > 0))
{
StringBuffer buffer = new StringBuffer(" lang=\"");
buffer.append(lang_);
buffer.append("\"");
return buffer.toString();
}
else
return "";
}
/**
* Returns the table row tag.
* @return The tag.
**/
public String getTag()
{
//@C1D
if(useFO_) //@D1A
return getFOTag(); //@D1A
if (row_.size() == 0)
{
Trace.log(Trace.ERROR, "Attempting to get tag before adding a column to the row.");
throw new ExtendedIllegalStateException("column", ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
StringBuffer tag = new StringBuffer("\n");
for (int i=0; i< row_.size(); i++)
{
HTMLTableCell cell = (HTMLTableCell)row_.elementAt(i);
tag.append(cell.getTag());
}
tag.append(" \n");
return tag.toString(); //@D1C
}
/**
* Returns the XSL-FO table row tag.
* The valign, halign, and language attributes are not supported in XSL-FO.
* @return The xsl-fo tag.
**/
public String getFOTag() //@D1A
{
//Store the current state of useFO_
boolean useFO = useFO_;
setUseFO(true);
int size = row_.size();
if (size == 0)
{
Trace.log(Trace.ERROR, "Attempting to get XSL-FO tag before adding a column to the row.");
throw new ExtendedIllegalStateException("column", ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
StringBuffer tag = new StringBuffer("");
tag.append("\n");
for (int i=0; i< size; i++)
{
//Must specify the cell border width and padding for each cell
HTMLTableCell cell = (HTMLTableCell)row_.elementAt(i);
cell.setBorderWidth(borderWidth_);
if(cellPadding_ > -1)
cell.setCellPadding(cellPadding_);
if ((dir_ != null) && (dir_.length() > 0))
{
try
{
cell.setDirection(dir_);
}
catch(PropertyVetoException p)
{
}
}
tag.append(cell.getFOTag());
}
tag.append(" \n");
//Set useFO_ to previous state
setUseFO(useFO);
return tag.toString(); //@D1C
}
/**
* Returns the global vertical alignment for the row.
* @return The vertical alignment. One of the following constants
* defined in HTMLConstants: BASELINE, BOTTOM, MIDDLE, or TOP.
* @see com.ibm.as400.util.html.HTMLConstants
**/
public String getVerticalAlignment()
{
return vAlign_;
}
/**
* 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 changes_ = new PropertyChangeSupport(this);
//@CRS vetos_ = new VetoableChangeSupport(this);
//@CRS columnListeners_ = new Vector();
}
/**
* Removes all the columns from the row.
**/
public void removeAllColumns()
{
//@C1D
row_.removeAllElements();
fireRemoved();
}
/**
* Removes the column element from the row.
* @param cell The HTMLTableCell object to be removed.
**/
public void removeColumn(HTMLTableCell cell)
{
//@C1D
if (cell == null)
throw new NullPointerException("cell");
if (row_.removeElement(cell))
fireRemoved(); // Fire the column removed event.
}
/**
* Removes the column at the specified columnIndex.
* @param columnIndex The column index.
**/
public void removeColumn(int columnIndex)
{
//@C1D
if (columnIndex < 0 || columnIndex >= row_.size())
throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID);
row_.removeElement((HTMLTableCell)row_.elementAt(columnIndex));
fireRemoved();
}
/**
* Removes this column ElementListener from the internal list.
* If the ElementListener is not on the list, nothing is done.
* @see #addColumnListener
* @param listener The ElementListener.
**/
public void removeColumnListener(ElementListener listener)
{
if (listener == null)
throw new NullPointerException("listener");
if (columnListeners_ != null) columnListeners_.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 column element at the specified column.
* @param cell The HTMLTableCell object to be added.
* @param columnIndex The column index.
**/
public void setColumn(HTMLTableCell cell, int columnIndex)
{
//@C1D
// Validate the cell parameter.
if (cell == null)
throw new NullPointerException("cell");
// Validate the column parameter.
if (columnIndex > row_.size() || columnIndex < 0)
throw new ExtendedIllegalArgumentException("columnIndex", ExtendedIllegalArgumentException.RANGE_NOT_VALID);
// Set the column.
if (columnIndex == row_.size())
addColumn(cell);
else
{
row_.setElementAt(cell, columnIndex);
fireChanged(); // Notify the listeners.
}
}
/**
* 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 global horizontal alignment for the row.
* @param alignment The horizontal alignment. One of the following constants
* defined in HTMLConstants: CENTER, LEFT, or RIGHT.
* @exception PropertyVetoException If the change is vetoed.
* @see com.ibm.as400.util.html.HTMLConstants
**/
public void setHorizontalAlignment(String alignment) throws PropertyVetoException
{
if (alignment == null)
{
throw new NullPointerException("alignment");
}
else if (alignment.equalsIgnoreCase(LEFT) ||
alignment.equalsIgnoreCase(CENTER) ||
alignment.equalsIgnoreCase(RIGHT))
{
String old = hAlign_;
if (vetos_ != null) vetos_.fireVetoableChange("alignment", old, alignment ); //@CRS
hAlign_ = alignment;
if (changes_ != null) changes_.firePropertyChange("alignment", old, alignment ); //@CRS
}
else
{
throw new ExtendedIllegalArgumentException("alignment", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID);
}
}
/**
* 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 border width in pixels. A value of zero indicates no border.
* The default value is one.
* @param borderWidth The border width.
**/
public void setBorderWidth(int borderWidth) //@D1A
{
Integer oldWidth = new Integer(borderWidth_);
Integer newWidth = new Integer(borderWidth);
borderWidth_ = borderWidth;
if (changes_ != null) changes_.firePropertyChange("borderWidth", oldWidth, newWidth);
}
/**
* 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.
* @param cellPadding The cell padding.
**/
public void setCellPadding(int cellPadding) //@D1A
{
Integer oldPadding = new Integer(cellPadding_);
Integer newPadding = new Integer(cellPadding);
cellPadding_ = cellPadding;
if (changes_ != null) changes_.firePropertyChange("cellPadding", oldPadding, newPadding);
}
/**
* 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 );
}
/**
* Sets the global vertical alignment for the row.
* @param alignment The vertical alignment. One of the following constants
* defined in HTMLConstants: BASELINE, BOTTOM, MIDDLE, or TOP.
* @exception PropertyVetoException If the change is vetoed.
* @see com.ibm.as400.util.html.HTMLConstants
**/
public void setVerticalAlignment(String alignment) throws PropertyVetoException
{
if (alignment == null)
{
throw new NullPointerException("alignment");
}
else if (alignment.equalsIgnoreCase(TOP) ||
alignment.equalsIgnoreCase(MIDDLE) ||
alignment.equalsIgnoreCase(BOTTOM) ||
alignment.equalsIgnoreCase(BASELINE))
{
String old = vAlign_;
if (vetos_ != null) vetos_.fireVetoableChange("alignment", old, alignment ); //@CRS
vAlign_ = alignment;
if (changes_ != null) changes_.firePropertyChange("alignment", old, alignment ); //@CRS
}
else
{
throw new ExtendedIllegalArgumentException("alignment", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID);
}
}
/**
* Returns the HTML table row tag.
* @return The row tag.
**/
public String toString()
{
return getTag();
}
}