KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dinamica > HGridOutput


1 package dinamica;
2
3 /**
4  * Prints recordset in tabular format using
5  * horizontal direction, meaning that each row
6  * from the recordset will fill a cell until
7  * the maximum nimber of cells is reached, then
8  * a new row will be appended to the table. It may
9  * be used to print products catalog with pictures
10  * and things like that.<br><br>
11  * The Actions using this class are supposed to be INCLUDED
12  * by other Actions, using the include marker ${inc:/action/xyz?param=value},
13  * it was not designed to produce a complete page, just a part of it,
14  * a grid with horizontal data direction, to be more specific. Actions
15  * using this Output class must define the following elements in config.xml,
16  * under the root element:<br><br>
17  * <xmp>
18  * <row-template>row.htm</row-template>
19  * <col-template>col.htm</col-template>
20  * <cols>3</cols>
21  * <hgrid-recordset>myRecordset.sql</hgrid-recordset>
22  * </xmp>
23  * <br><br>
24  * Of course you can adjust these elements's values to
25  * meet your requirements.
26  * <br><br>
27  * Most of the time, the Action using this Output class
28  * will require only one recordset, which must be created
29  * by the parent Action (the one that includes the others)
30  * and saved into a request attribute, which means that this
31  * class must retrieve the recordset from the request
32  * object.
33  * <br><br>
34  * This class requires a basic template (defined in the output block in config.xml),
35  * like any other text-based output that inherits from dinamica.GenericOutput,
36  * invokes super.print() before proceeding to create its own output. This template
37  * should contain the surrounding HTML code for the table, and a dummy marker
38  * named ${hgrid} where the actual generated HGrid will be printed.
39  * <br><br>
40  * Creation date: 09/07/2005
41  * (c) 2005 Martin Cordova<br>
42  * This code is released under the LGPL license<br>
43  * Dinamica Framework - http://www.martincordova.com<br>
44  * @author Martin Cordova (dinamica@martincordova.com)
45  */

46 public class HGridOutput extends GenericOutput
47 {
48
49     public void print(TemplateEngine te, GenericTransaction data)
50             throws Throwable JavaDoc
51     {
52         
53         // let parent class execute normal processing of config.xml
54
super.print(te, data);
55         
56         //read config values
57
String JavaDoc rsName = getConfig().getConfigValue("hgrid-recordset");
58         int cols = Integer.parseInt(getConfig().getConfigValue("cols"));
59         Recordset rs = (Recordset)getRequest().getAttribute(rsName);
60         String JavaDoc tRow = getResource(getConfig().getConfigValue("row-template"));
61         String JavaDoc tCol = getResource(getConfig().getConfigValue("col-template"));
62         
63         //navigate recordset and create String containing
64
//hgrid body
65
StringBuffer JavaDoc hgrid = new StringBuffer JavaDoc();
66         rs.top();
67         for (int k=0;k<rs.getRecordCount();k=k+cols)
68         {
69             StringBuffer JavaDoc colsBuf = new StringBuffer JavaDoc();
70             for (int i=0;i<cols;i++)
71             {
72                 if (k+i==rs.getRecordCount())
73                     break;
74                 rs.setRecordNumber(k+i);
75                 TemplateEngine t = new TemplateEngine(getContext(),getRequest(),tCol);
76                 t.replace(rs, "&nbsp;");
77                 colsBuf.append(t.toString());
78             }
79             hgrid.append(StringUtil.replace(tRow,"${cols}", colsBuf.toString()));
80         }
81         
82         //replace hgrid body into main template
83
te.replace("${hgrid}", hgrid.toString());
84         
85     }
86 }
87
Popular Tags