1 /**
2 * Licensed under the Artistic License; you may not use this file
3 * except in compliance with the License.
4 * You may obtain a copy of the License at
5 *
6 * http://displaytag.sourceforge.net/license.html
7 *
8 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11 */
12 package org.displaytag.model;
13
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.commons.lang.builder.ToStringBuilder;
20 import org.apache.commons.lang.builder.ToStringStyle;
21 import org.displaytag.util.HtmlAttributeMap;
22 import org.displaytag.util.MultipleHtmlAttribute;
23 import org.displaytag.util.TagConstants;
24
25
26 /**
27 * Holds informations for a table row.
28 * @author Fabrizio Giustina
29 * @version $Revision: 1081 $ ($Author: fgiust $)
30 */
31 public class Row
32 {
33
34 /**
35 * Object holding values for the current row.
36 */
37 private Object rowObject;
38
39 /**
40 * List of cell objects.
41 */
42 private List staticCells;
43
44 /**
45 * Row number.
46 */
47 private int rowNumber;
48
49 /**
50 * TableModel which the row belongs to.
51 */
52 private TableModel tableModel;
53
54 /**
55 * Constructor for Row.
56 * @param object Object
57 * @param number int
58 */
59 public Row(Object object, int number)
60 {
61 this.rowObject = object;
62 this.rowNumber = number;
63 this.staticCells = new ArrayList();
64 }
65
66 /**
67 * Setter for the row number.
68 * @param number row number
69 */
70 public void setRowNumber(int number)
71 {
72 this.rowNumber = number;
73 }
74
75 /**
76 * Getter for the row number.
77 * @return row number
78 */
79 public int getRowNumber()
80 {
81 return this.rowNumber;
82 }
83
84 /**
85 * Adds a cell to the row.
86 * @param cell Cell
87 */
88 public void addCell(Cell cell)
89 {
90 this.staticCells.add(cell);
91 }
92
93 /**
94 * getter for the list of Cell object.
95 * @return List containing Cell objects
96 */
97 public List getCellList()
98 {
99 return this.staticCells;
100 }
101
102 /**
103 * getter for the object holding values for the current row.
104 * @return Object object holding values for the current row
105 */
106 public Object getObject()
107 {
108 return this.rowObject;
109 }
110
111 /**
112 * Iterates on columns.
113 * @param columns List
114 * @return ColumnIterator
115 */
116 public ColumnIterator getColumnIterator(List columns)
117 {
118 return new ColumnIterator(columns, this);
119 }
120
121 /**
122 * Setter for the table model the row belongs to.
123 * @param table TableModel
124 */
125 protected void setParentTable(TableModel table)
126 {
127 this.tableModel = table;
128 }
129
130 /**
131 * Getter for the table model the row belongs to.
132 * @return TableModel
133 */
134 protected TableModel getParentTable()
135 {
136 return this.tableModel;
137 }
138
139 /**
140 * Writes the open <tr> tag.
141 * @return String <tr> tag with the appropriate css class attribute
142 */
143 public String getOpenTag()
144 {
145 Map rowAttributes = new HtmlAttributeMap();
146
147 MultipleHtmlAttribute cssAttribute = new MultipleHtmlAttribute(this.tableModel.getProperties().getCssRow(
148 this.rowNumber));
149
150 if (this.tableModel.getTableDecorator() != null)
151 {
152 try
153 {
154 String addStyle = this.tableModel.getTableDecorator().addRowClass();
155
156 if (StringUtils.isNotBlank(addStyle))
157 {
158 cssAttribute.addAttributeValue(addStyle);
159 }
160
161 String id = this.tableModel.getTableDecorator().addRowId();
162 if (StringUtils.isNotBlank(id))
163 {
164 rowAttributes.put(TagConstants.ATTRIBUTE_ID, id);
165 }
166 }
167 catch (NoSuchMethodError e)
168 {
169 // this catch is here to allow decorators compiled with displaytag 1.0 work with 1.1
170 // since the addRowClass() and addRowId() are new in displaytag 1.1 earlier decorators could throw
171 // a NoSuchMethodError... be nice with them till a next major release
172 }
173 }
174
175 if (!cssAttribute.isEmpty())
176 {
177 rowAttributes.put(TagConstants.ATTRIBUTE_CLASS, cssAttribute);
178 }
179
180 StringBuffer tag = new StringBuffer();
181 tag.append(TagConstants.TAG_OPEN);
182 tag.append(TagConstants.TAGNAME_ROW);
183
184 tag.append(rowAttributes.toString());
185
186 tag.append(TagConstants.TAG_CLOSE);
187
188 return tag.toString();
189 }
190
191 /**
192 * writes the </tr> tag.
193 * @return String </tr> tag
194 */
195 public String getCloseTag()
196 {
197 return TagConstants.TAG_TR_CLOSE;
198 }
199
200 /**
201 * @see java.lang.Object#toString()
202 */
203 public String toString()
204 {
205 return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) //
206 .append("rowNumber", this.rowNumber) //$NON-NLS-1$
207 .append("rowObject", this.rowObject) //$NON-NLS-1$
208 .toString();
209 }
210 }