KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > albel > tags > table > render > impl > TableRenderer


1 /*
2  * TableRenderer.java
3  *
4  * Created on Šeštadienis, 2004, Rugsėjo 4, 21.29
5  */

6
7 package albel.tags.table.render.impl;
8
9 /**
10  *
11  * @author Albertas Laurinav
12  */

13 import albel.tags.table.utils.Writer;
14 import albel.tags.table.*;
15 import albel.tags.table.render.*;
16 import albel.tags.table.model.*;
17 import albel.tags.table.controll.*;
18
19 import org.apache.ecs.html.*;
20
21 public class TableRenderer implements ITableRenderer
22 {
23     
24     private albel.tags.table.model.Table table;
25     /** Creates a new instance of TableRenderer */
26     public TableRenderer()
27     {
28     }
29     
30     public ITableRenderable render() throws javax.servlet.jsp.JspException JavaDoc
31     {
32         try
33         {
34             return doRender();
35         }
36         catch (Exception JavaDoc e)
37         {
38             throw new javax.servlet.jsp.JspException JavaDoc(e);
39         }
40     }
41     private ITableRenderable doRender() throws Exception JavaDoc
42     {
43         java.util.List JavaDoc beanList=table.getSource();
44         java.util.Iterator JavaDoc source=org.apache.commons.collections.
45         IteratorUtils.getIterator(beanList);
46         ITableRenderable renderable=Manager.getTableRenderable();
47         org.apache.ecs.html.Table ht=(org.apache.ecs.html.Table)renderable.getRenderable();
48         java.util.List JavaDoc cols=table.getColumns();
49         org.apache.ecs.html.THead head=renderHeader(cols);
50         ht.addElement(head);
51         IRowRenderer rowRend=Manager.getRowRenderer();
52         int rowNr=0;
53         Row selRow=table.getTableState().getSelectedRow();
54         while (source.hasNext())
55         {
56             Row row=new Row(table);
57             row.setNumber(rowNr);
58             TR tr;
59             Object JavaDoc obj=source.next();
60             if(isRowMustBeEdited(rowNr,selRow)) //Handle how to render editing
61
{
62                 IRowEditor rowEdit=Manager.getRowEditor();
63                 tr=(TR)rowEdit.render(row, cols, obj).getRenderable();
64             }
65             else
66             {
67                 tr=(org.apache.ecs.html.TR)
68                 rowRend.render(row,cols,obj).getRenderable();
69             }
70             ht.addElement(tr);
71             rowNr++;
72         }
73         boolean notEditing=!(table.getTableState().getSelectedRow()!=null && table.getTableState().getSelectedRow().getRowState().isEditing());
74         boolean hasDefinedNewRowColumns=table.getNewRowColumns()!=null && table.getNewRowColumns().hasColumns();
75         if(notEditing && hasDefinedNewRowColumns)
76         {
77             TR tr=Manager.getNewRowRenderer().render(table.getNewRowColumns().getColumns());
78             ht.addElement(tr);
79         }
80         return renderable;
81         
82     }
83     private org.apache.ecs.html.THead renderHeader(java.util.List JavaDoc cols) throws TableTagException
84     {
85         IColumnHeaderRenderer hrend=Manager.getColumnHeaderRenderer();
86         org.apache.ecs.html.THead thead=new org.apache.ecs.html.THead();
87         for(int i=0;i<cols.size();i++)
88         {
89             Column col=(Column)cols.get(i);
90             ColumnHeader header=col.getHeader();
91             try
92             {
93                 org.apache.ecs.html.TH th=(org.apache.ecs.html.TH)hrend.render(header).getRenderable();
94                 thead.addElement(th);
95             }
96             catch (javax.servlet.jsp.JspException JavaDoc jex)
97             {
98                 throw new TableTagException(jex);
99             }
100         }
101         return thead;
102     }
103     private boolean isRowMustBeEdited(int loopRowNr,Row selRow)
104     {
105         return selRow!=null && selRow.getRowState()!=null && selRow.getRowState().isEditing() && loopRowNr==selRow.getNumber();
106     }
107     
108     public void setTable(albel.tags.table.model.Table table)
109     {
110         this.table=table;
111     }
112     
113 }
114
Popular Tags