01: package dinamica;
02:
03: /**
04: * Prints recordset in tabular format using
05: * horizontal direction, meaning that each row
06: * from the recordset will fill a cell until
07: * the maximum nimber of cells is reached, then
08: * a new row will be appended to the table. It may
09: * be used to print products catalog with pictures
10: * and things like that.<br><br>
11: * This class also supports paged views, which are
12: * ideal for creating thumbnails or galleries.
13: * <br>
14: * The Actions using this class are supposed to be INCLUDED
15: * by other Actions, using the include marker ${inc:/action/xyz?param=value},
16: * it was not designed to produce a complete page, just a part of it,
17: * a grid with horizontal data direction, to be more specific. Actions
18: * using this Output class must define the following elements in config.xml,
19: * under the root element:<br><br>
20: * <xmp>
21: * <row-template>row.htm</row-template>
22: * <col-template>col.htm</col-template>
23: * <cols>3</cols>
24: * <hgrid-recordset>myRecordset.sql</hgrid-recordset>
25: * </xmp>
26: * <br><br>
27: * Of course you can adjust these elements's values to
28: * meet your requirements.
29: * <br><br>
30: * Most of the time, the Action using this Output class
31: * will require only one recordset, which must be created
32: * by the parent Action (the one that includes the others)
33: * and saved into a request attribute, which means that this
34: * class must retrieve the recordset from the request
35: * object.
36: * <br><br>
37: * This class requires a basic template (defined in the output block in config.xml),
38: * like any other text-based output that inherits from dinamica.GenericOutput,
39: * invokes super.print() before proceeding to create its own output. This template
40: * should contain the surrounding HTML code for the table, and a dummy marker
41: * named ${hgrid} where the actual generated HGrid will be printed.
42: * <br><br>
43: * Creation date: 09/07/2005
44: * (c) 2005 Martin Cordova<br>
45: * This code is released under the LGPL license<br>
46: * Dinamica Framework - http://www.martincordova.com<br>
47: * @author Martin Cordova (dinamica@martincordova.com)
48: */
49: public class HGridPagedOutput extends GenericOutput {
50:
51: public void print(TemplateEngine te, GenericTransaction data)
52: throws Throwable {
53:
54: //read config values
55: String rsName = getConfig().getConfigValue("hgrid-recordset");
56: int cols = Integer.parseInt(getConfig().getConfigValue("cols"));
57: Recordset rs = (Recordset) getSession().getAttribute(rsName);
58: String tRow = getResource(getConfig().getConfigValue(
59: "row-template"));
60: String tCol = getResource(getConfig().getConfigValue(
61: "col-template"));
62: int page = Integer.parseInt(getRequest().getParameter(
63: "pagenumber"));
64: rs = rs.getPage(page);
65:
66: //navigate recordset and create String containing
67: //hgrid body
68: StringBuffer hgrid = new StringBuffer();
69: rs.top();
70: for (int k = 0; k < rs.getRecordCount(); k = k + cols) {
71: StringBuffer colsBuf = new StringBuffer();
72: for (int i = 0; i < cols; i++) {
73: if (k + i == rs.getRecordCount()) {
74: for (int j = i; j < cols; j++) {
75: colsBuf.append("<td></td>");
76: }
77: break;
78: }
79: rs.setRecordNumber(k + i);
80: TemplateEngine t = new TemplateEngine(getContext(),
81: getRequest(), tCol);
82: t.replace(rs, " ");
83: colsBuf.append(t.toString());
84: }
85: hgrid.append(StringUtil.replace(tRow, "${cols}", colsBuf
86: .toString()));
87: }
88:
89: //replace hgrid body into main template
90: te.replace("${hgrid}", hgrid.toString());
91:
92: // let parent class execute normal processing of config.xml
93: super.print(te, data);
94:
95: }
96: }
|