%@page contentType="text/xml"%><%@page pageEncoding="UTF-8"%><%@include file="../Framework/TreeGridFramework.jsp"%><%!
/*-----------------------------------------------------------------------------------------------------------------
! Support file only, run Grouping.html instead !
This file is used as Page_Url
Generates data for one TreeGrid page from database, according to grouping information
! Demonstrates Server paging but client child paging - all children are sent to server at once
This is only simple example with not ideal database access (for every page gets all data)
Uses TreeGridFramework.jsp
-------------------------------------------------------------------------------------------------------------------------------*/
// -------------------------------------------------------------------------------------------------------------------------------
// Writes one level of grouped children
// Uses recursion to write next levels
// Level is actual level to write
// Where is WHERE clause for SQL, for every level there is added one condition
void WriteLevel(int Level, String Where, String[] GroupCols, java.sql.Statement[] Cmd, int Levels, int Start, JspWriter out) throws Exception
{
java.sql.ResultSet R;
if (Level == Levels) R = Cmd[Level].executeQuery("SELECT * FROM TableData" + Where);
else R = Cmd[Level].executeQuery("SELECT DISTINCT " + GroupCols[Level] + " FROM TableData" + Where);
if (Level == 0) for (int i = 0; i < Start && R.next(); i++) ; // On level 0 throws away data in front of requested page
int Max = 20; // 21 rows per page on level 0
while(R.next())
{
if (Level == Levels) // Final, writing data row
{
String[] Names = {"id","Project","Resource","Week","Hours"};
out.print(getRowXML(R,Names));
}
else // Next grouping row
{
out.print(""); // writes the grouping row
String Where2 = (Level == 0 ? " WHERE " : " AND ") + GroupCols[Level] + "="
+ (GroupCols[Level].equals("Week") || GroupCols[Level].equals("Hours") ? R.getString(1) : toSQL(R.getString(1)));
WriteLevel(Level + 1, Where + Where2, GroupCols, Cmd, Levels, 0,out);
out.print("");
}
if(Level==0 && --Max<0) break; // On level 0 maximally 21 rows per page
}
R.close();
}
// -------------------------------------------------------------------------------------------------------------------------------
%><%
//------------------------------------------------------------------------------------------------------------------
response.addHeader("Cache-Control","max-age=1, must-revalidate");
// --- Parses XML request ---
String XML = request.getParameter("TGData"); // was set
if (XML==null) XML = ""; // Just for examples if called directly
org.w3c.dom.Document X = parseXML(XML);
// --- Parses grouping settings ---
String[] GroupCols = getGroupCols(X);
int Levels = GroupCols == null ? 0 : GroupCols.length; // Depth of grouping, 0 - no grouping
// --- Gets information about page number ---
int pos = getPagePos(X);
int start = pos*21; // 21 = PageLength
// --- Database connection ---
java.sql.Statement Cmd[] = new java.sql.Statement[Levels+1];
for(int i=0;i<=Levels;i++) Cmd[i] = getHsqlStatement(request,out,"../Database","sa","");
// --- Writes data for requested page ---
out.print(""); // XML Header
WriteLevel(0, "", GroupCols, Cmd, Levels, start,out);
out.print (""); // XML Footer
// -------------------------------------------------------------------------------------------------------------------------------
%>