/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.displaytag.util.HtmlAttributeMap;
import org.displaytag.util.MultipleHtmlAttribute;
import org.displaytag.util.TagConstants;
/**
* Holds informations for a table row.
* @author Fabrizio Giustina
* @version $Revision: 956 $ ($Author: fgiust $)
*/
public class Row
{
/**
* Object holding values for the current row.
*/
private Object rowObject;
/**
* List of cell objects.
*/
private List staticCells;
/**
* Row number.
*/
private int rowNumber;
/**
* TableModel which the row belongs to.
*/
private TableModel tableModel;
/**
* Constructor for Row.
* @param object Object
* @param number int
*/
public Row(Object object, int number)
{
this.rowObject = object;
this.rowNumber = number;
this.staticCells = new ArrayList();
}
/**
* Setter for the row number.
* @param number row number
*/
public void setRowNumber(int number)
{
this.rowNumber = number;
}
/**
* Getter for the row number.
* @return row number
*/
public int getRowNumber()
{
return this.rowNumber;
}
/**
* Adds a cell to the row.
* @param cell Cell
*/
public void addCell(Cell cell)
{
this.staticCells.add(cell);
}
/**
* getter for the list of Cell object.
* @return List containing Cell objects
*/
public List getCellList()
{
return this.staticCells;
}
/**
* getter for the object holding values for the current row.
* @return Object object holding values for the current row
*/
public Object getObject()
{
return this.rowObject;
}
/**
* Iterates on columns.
* @param columns List
* @return ColumnIterator
*/
public ColumnIterator getColumnIterator(List columns)
{
return new ColumnIterator(columns, this);
}
/**
* Setter for the table model the row belongs to.
* @param table TableModel
*/
protected void setParentTable(TableModel table)
{
this.tableModel = table;
}
/**
* Getter for the table model the row belongs to.
* @return TableModel
*/
protected TableModel getParentTable()
{
return this.tableModel;
}
/**
* Writes the open <tr> tag.
* @return String <tr> tag with the appropriate css class attribute
*/
public String getOpenTag()
{
Map rowAttributes = new HtmlAttributeMap();
MultipleHtmlAttribute cssAttribute = new MultipleHtmlAttribute(this.tableModel.getProperties().getCssRow(
this.rowNumber));
if (this.tableModel.getTableDecorator() != null)
{
try
{
String addStyle = this.tableModel.getTableDecorator().addRowClass();
if (StringUtils.isNotBlank(addStyle))
{
cssAttribute.addAttributeValue(addStyle);
}
String id = this.tableModel.getTableDecorator().addRowId();
if (StringUtils.isNotBlank(id))
{
rowAttributes.put(TagConstants.ATTRIBUTE_ID, id);
}
}
catch (NoSuchMethodError e)
{
// this catch is here to allow decorators compiled with displaytag 1.0 work with 1.1
// since the addRowClass() and addRowId() are new in displaytag 1.1 earlier decorators could throw
// a NoSuchMethodError... be nice with them till a next major release
}
}
rowAttributes.put(TagConstants.ATTRIBUTE_CLASS, cssAttribute);
StringBuffer tag = new StringBuffer();
tag.append(TagConstants.TAG_OPEN);
tag.append(TagConstants.TAGNAME_ROW);
tag.append(rowAttributes.toString());
tag.append(TagConstants.TAG_CLOSE);
return tag.toString();
}
/**
* writes the </tr> tag.
* @return String </tr> tag
*/
public String getCloseTag()
{
return TagConstants.TAG_TR_CLOSE;
}
/**
* @see java.lang.Object#toString()
*/
public String toString()
{
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) //
.append("rowNumber", this.rowNumber) //$NON-NLS-1$
.append("rowObject", this.rowObject) //$NON-NLS-1$
.toString();
}
}