/*
$Log$
Revision 1.9 2005/02/08 16:03:21 heto
DbIndividual is now complete. Some bug tests are done.
DbSamplingunit is converted. No bugtest.
All transactions should now be handled in the GUI (yuck..)
Revision 1.8 2005/02/07 15:54:01 heto
Converted DbIndividual to PostgreSQL
Now some transaction problem occures with Groupings (update)
Revision 1.7 2005/02/04 15:58:40 heto
Converting from Oracle to PostgreSQL or somewhat more SQL server independence.
Revision 1.6 2005/01/31 16:16:41 heto
Changing database to PostgreSQL. Problems with counts and selection buttons...
Revision 1.5 2003/05/02 07:58:45 heto
Changed the package structure from se.prevas.arexis.XYZ to se.arexis.agdb.XYZ
Modified configuration and source files according to package change.
Revision 1.4 2003/04/25 12:14:46 heto
Changed all references to axDefault.css
Source layout fixes.
Revision 1.3 2002/10/22 06:08:09 heto
rebuilt the "back-buttons".
Dont save the request object, save the URL instead.
New function.
Revision 1.2 2002/10/18 11:41:10 heto
Replaced Assertion.assert with Assertion.assertMsg
Java 1.4 have a keyword "assert".
Revision 1.1.1.1 2002/10/16 18:14:05 heto
Import of aGDB 1.5 L3 from Prevas CVS-tree.
This version of aGDB is migrated to Tomcat from JServ by Tobias Hermansson
Revision 1.9 2001/05/31 07:07:00 frob
Implemented the writeBottomDefault method in HTMLWriter and removed it from all
servlets. The servlets now uses the method in HTMLWriter.
Revision 1.8 2001/05/22 06:16:54 roca
Backfuncktionality fixed for all (?) servlets/subpages
Revision 1.7 2001/05/15 13:36:24 roca
After merge problems from last checkin..
Revision 1.6 2001/05/11 06:34:54 frob
Changed all methods that used to call writeError() to write an error page. These
methods now calls the general method commitOrRollback() which does the commit or
rollback operation as well as handle any errors. writeError() was removed.
Revision 1.5 2001/05/03 07:57:39 frob
Replaced calls to removeQSParameter to calls to dedicated methods eg removeQSParameterSid
Revision 1.4 2001/05/02 13:54:33 frob
Calls to removeOper changed to use the general removeQSParameter.
The previously called method is removed.
Revision 1.3 2001/04/24 09:33:54 frob
Moved file import classes to new package se.prevas.arexis.util.FileImport,
caused updates in several files.
Revision 1.2 2001/04/24 06:31:27 frob
Checkin after merging frob_fileparser branch.
Revision 1.1.1.1.2.5 2001/04/19 10:57:49 frob
Changed some comments.
Revision 1.1.1.1.2.4 2001/04/18 09:26:44 frob
Removed the size of the main table used on the webpages.
Revision 1.1.1.1.2.3 2001/04/11 13:15:03 frob
createGroupingFile: Changed call to Parse() to pass valid file type definitions.
No longer uses delimiters in request object.
Layout changes.
writeImpFilePage: Removed field for delimiter.
Changed length of filename field.
HTML validated.
Revision 1.1.1.1.2.2 2001/03/28 13:47:54 frob
Added catch() for InputDataFileException which can be
raised from the parse()-method.
Added check that the connection object is created before doing
rollback on it (to avoid null pointer exception).
Revision 1.1.1.1.2.1 2001/03/28 12:37:46 frob
Changed the call to the FileParser constructor.
Indeted the file and added the log header.
*/
package se.arexis.agdb.servlet;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.oreilly.servlet.MultipartRequest;
import se.arexis.agdb.db.*;
import se.arexis.agdb.util.*;
import se.arexis.agdb.util.FileImport.*;
public class viewGrouping extends SecureArexisServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res);
}
/**
* This method dispatches the request to the corresponding
* method. The servlet handles the surrounding frameset,
* the top frame, the bottom frame and methods for creation of
* new groupings.
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
if ( !authorized(req, res) ) {
// The user does not have the privileges to view the requested page.
// The method pageLocked has already written an error message
// to the output stream, and that's why we safely can return here.
return;
}
String extPath = req.getPathInfo();
if (extPath == null || extPath.equals("") || extPath.equals("/")) {
// The frame is requested
writeFrame(req, res);
} else if (extPath.equals("/top")) {
writeTop(req, res);
} else if (extPath.equals("/middle")) {
writeMiddle(req, res);
} else if (extPath.equals("/bottom")) {
writeBottom(req, res);
} else if (extPath.equals("/new")) {
writeNew(req, res);
} else if (extPath.equals("/copy")) {
writeCopy(req, res);
} else if (extPath.equals("/impFile")) {
writeImpFile(req, res);
} else if (extPath.equals("/impMultipart")) {
createGroupingFile(req, res);
} else if (extPath.equals("/edit")) {
writeEdit(req, res);
} else if (extPath.equals("/details")) {
writeDetails(req, res);
}
}
private void writeFrame(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
// set content type and other response header fields first
res.setContentType("text/html");
PrintWriter out = res.getWriter();
try
{
// Check if redirection is needed
res = checkRedirectStatus(req,res);
//req= getServletState(req,session);
String topQS = buildQS(req);
String bottomQS = topQS.toString();
out.println("<html>"
+ "<HEAD>"
+ " <TITLE>View Groupings</TITLE>"
+ "</HEAD>"
+ "<frameset rows=\"180,35,*\" framespacing=\"0\" border=\"true\">" //
+ "<frame name=\"viewgroupingtop\" "
+ "src=\""+getServletPath("viewGrouping/top?") + topQS + "\""
+ "scrolling=\"no\" marginheight=\"0\" noresize frameborder=\"0\">"
+ "</frame>\n"
+ "<frame name=\"viewgroupingmiddle\" "
+ "src=\""+getServletPath("viewGrouping/middle?") + topQS + "\""
+ "scrolling=\"no\" marginheight=\"0\" noresize frameborder=\"0\">"
+ "</frame>\n"
+ "<frame name=\"viewgroupingbottom\""
+ "src=\""+getServletPath("viewGrouping/bottom?") + bottomQS + "\" "
+ "scrolling=\"auto\" marginheight=\"0\" frameborder=\"0\"></frameset>"
+ "<noframes><body><p>"
+ "This page uses frames, but your browser doesn't support them."
+ "</p></body></noframes></frameset>"
+ "</HTML>");
} catch (Exception e)
{
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
}
finally {
}
}
private String buildQS(HttpServletRequest req) {
StringBuffer output = new StringBuffer(512);
HttpSession session = req.getSession(true);
Connection conn = (Connection) session.getValue("conn");
String pid = (String) session.getValue("PID");
String action = null;
String suid = null, old_suid = null, orderby = null;
// Find suid
//old_suid = (String) session.getValue("SUID");
suid = req.getParameter("suid");
if (suid == null)
{
suid = old_suid;
}
/*
* This code is not used
* And if old_suid is null (which means that suid becomes null) then
* the result of the function is not kept.
if (suid == null)
findSuid(conn, pid);
*/
// Find the requested action
if ("DISPLAY".equalsIgnoreCase(req.getParameter("DISPLAY"))) {
action = "DISPLAY";
} else if ("COUNT".equalsIgnoreCase(req.getParameter("COUNT"))) {
action = "COUNT";
} else if ("<<".equalsIgnoreCase(req.getParameter("TOP"))) {
action = "TOP";
} else if ("<".equalsIgnoreCase(req.getParameter("PREV"))) {
action = "PREV";
} else if (">".equalsIgnoreCase(req.getParameter("NEXT"))) {
action = "NEXT";
} else if (">>".equalsIgnoreCase(req.getParameter("END"))) {
action = "END";
} else {
action = req.getParameter("ACTION");
if (action == null) action = "NOP";
}
output.append("ACTION=").append(action);
// Set the parameters STARTINDEX and ROWS
output.append(setIndecis(suid, old_suid, action, req, session));
orderby = req.getParameter("ORDERBY");
if (orderby != null)
output.append("&ORDERBY=").append(orderby);
else
output.append("&ORDERBY=NAME");
output.append("&suid=").append(suid);
if (req.getParameter("oper") != null)
output.append("&oper=").append(req.getParameter("oper"));
if (req.getParameter("new_grouping_name") != null)
output.append("&new_grouping_name=").append(req.getParameter("new_grouping_name"));
return output.toString().replace('%', '*');
}
/*
* This method is commented out. An ignored exception occured that
* messed up the transaction support. The function was not in use.
*
private String findSuid(Connection conn, String pid)
{
Statement stmt = null;
ResultSet rset = null;
String ret;
try
{
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT SUID FROM gdbadm.V_ENABLED_SAMPLING_UNITS_2 WHERE PID=" +
pid + " ORDER BY NAME");
if (rset.next())
{
ret = rset.getString("SUID");
}
else
{
ret = "-1";
}
}
catch (SQLException e)
{
e.printStackTrace();
ret = "-1";
}
finally
{
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
} catch (SQLException ignored) {
}
}
return ret;
}
*/
private String setIndecis(String suid, String old_suid, String action, HttpServletRequest req, HttpSession session) {
StringBuffer output = new StringBuffer(128);
int rows = 0, startIndex = 0, maxRows = 0;
rows = countRows(suid, req, session);
maxRows = getMaxRows(session);
if (req.getParameter("STARTINDEX") != null && old_suid != null && old_suid.equalsIgnoreCase(suid))
startIndex = Integer.parseInt(req.getParameter("STARTINDEX"));
else
startIndex = 1;
if ("COUNT".equalsIgnoreCase(action) ||
"DISPLAY".equalsIgnoreCase(action)) {
if (startIndex >= rows)
startIndex = 1;
} else if ("TOP".equalsIgnoreCase(action)) {
startIndex = 1;
} else if ("PREV".equalsIgnoreCase(action)) {
// decrement startindex with maxRows, if possible
startIndex -= maxRows;
if (startIndex < 1) startIndex = 1;
} else if ("NEXT".equalsIgnoreCase(action)) {
// Increment startindex with maxrows, if possible
startIndex += maxRows;
if (startIndex >= rows)
startIndex -= maxRows;
} else if ("END".equalsIgnoreCase(action)) {
int mult = (int) rows / maxRows;
if (rows % maxRows == 0) mult--;
startIndex = (mult > 0 ? mult : 0) * maxRows + 1;
} else {
// action = NOP, i guess
}
output.append("&STARTINDEX=").append(startIndex)
.append("&ROWS=").append(rows);
return output.toString();
}
private int countRows(String suid, HttpServletRequest req, HttpSession session) {
Connection conn = (Connection) session.getValue("conn");
Statement stmt = null;
ResultSet rset = null;
StringBuffer sbSQL = new StringBuffer(512);
try {
sbSQL.append("SELECT count(*) "
+ "FROM gdbadm.V_GROUPINGS_2 WHERE SUID=" + suid + " ");
sbSQL.append(buildFilter(req,false));
stmt = conn.createStatement();
rset = stmt.executeQuery(sbSQL.toString());
rset.next();
return rset.getInt(1);
} catch (SQLException e) {
return 0;
} finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
}catch (SQLException ignored) {}
}
}
private String buildFilter(HttpServletRequest req)
{
return buildFilter(req,true);
}
private String buildFilter(HttpServletRequest req, boolean order) {
StringBuffer filter = new StringBuffer(256);
return filter.toString().replace('*', '%');
}
/***************************************************************************************
* *************************************************************************************
* The top frame
*/
public void writeTop(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// set content type and other response header fields first
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String oper;
oper = req.getParameter("oper");
if (oper == null || "".equals(oper))
oper = "SELECT";
/*
if (oper.equals("NEW_GROUPING")) {
if (!createGrouping(req, res))
; //return;
}
*/
HttpSession session = req.getSession(true);
Connection conn = null;
Statement stmt_su = null;
ResultSet rset_su = null;
int startIndex = 0, rows = 0, maxRows = 0;
String suid, gsid, name, orderby, oldQS, newQS, action, pid;
int currentPrivs[];
try {
conn = (Connection) session.getValue("conn");
stmt_su = conn.createStatement();
currentPrivs = (int [])session.getValue("PRIVILEGES");
pid = (String) session.getValue("PID");
suid = req.getParameter("suid");
maxRows = getMaxRows(session);
action = req.getParameter("ACTION");
oldQS = removeQSParameter(req.getQueryString(),"oper");
newQS = buildTopQS(oldQS);
orderby = req.getParameter("ORDERBY");
if (req.getParameter("STARTINDEX") != null)
startIndex = Integer.parseInt(req.getParameter("STARTINDEX"));
else
startIndex = 0;
if (req.getParameter("ROWS") != null)
rows = Integer.parseInt(req.getParameter("ROWS"));
else
rows = 0;
if (suid == null) suid = new String("-1");
if (orderby == null) orderby = new String("NAME");
if (action == null) action = new String("NOP");
if (pid == null || "".equalsIgnoreCase(pid))
pid = new String("-1");
// new
out.println("<html>");
out.println("<head><link rel=\"stylesheet\" type=\"text/css\" href=\""+ getURL("style/view.css") +"\">");
out.println("<base target=\"content\">");
writeTopScript(out);
out.println("<title>View Grouping</title>");
out.println("</head>");
out.println("<body bgcolor=\"#ffffd0\">"
+"<table width=\"846\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" valign=\"top\">"
+"<tr>"
+ "<td width=\"14\" rowspan=\"3\">" +"</td>"
+"<td width=\"736\" colspan=\"2\" height=\"15\">"
+"<form method=get action=\"" +getServletPath("viewGrouping") +"\">"
+"<p align=\"center\"><font size=\"2\"><b style=\"font-size: 15pt\">Groupings - View & Edit</b>"
+"</font></td></tr>"
+"<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>"
+"</tr><tr><td width=\"517\">");
out.println("<table width=488 height=\"92\">"
+"<td><b>Sampling Units</b><br><select name=suid "
+"name=select onChange='document.forms[0].submit()' style=\"HEIGHT: 22px; WIDTH: 126px\">");
// Get all the sampling units for this project
rset_su = stmt_su.executeQuery("SELECT NAME, SUID FROM gdbadm.V_ENABLED_SAMPLING_UNITS_2 " +
" WHERE PID=" + pid + " order by NAME");
String s_suid = null; // Selected sampling unit
boolean first_round = true;
while (rset_su.next()) {
if (first_round) {
s_suid = new String(rset_su.getString("SUID"));
first_round = false;
}
if (suid != null && suid.equalsIgnoreCase(rset_su.getString("SUID"))) {
s_suid = new String(rset_su.getString("SUID"));
out.println("<OPTION selected value=\"" + rset_su.getString("SUID") + "\">" + rset_su.getString("NAME"));
}
else
out.println("<OPTION value=\"" + rset_su.getString("SUID") + "\">" + rset_su.getString("NAME"));
}
// In case there isn't a suid stored in session-object
out.println("</SELECT>");
out.println("</td></table></td>");
out.println("<td width=219>");
out.println("<table border=0 cellpadding=0 cellspacing=0 width=135 align=\"right\">\n");
out.println("<td colspan=4>\n");
out.println("<tr><td width=68 colspan=2>");
System.err.println("top/oldQS="+oldQS);
System.err.println("top/newQS="+newQS);
out.println(privDependentString(currentPrivs,GRP_W,
/*if true*/"<input type=button value=\"New\""
+ " onClick='parent.location.href=\"" +getServletPath("viewGrouping/new?") + oldQS+ "\"' "
// + "onClick='newGroup()'"
+" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\">"
+"</td>",
/*if false*/"<input type=button disabled value=\"New\""
+"height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\" name=\"button\">"
+"</td>"));
out.println("<td width=68 colspan=2>");
out.println(privDependentString(currentPrivs,GRP_W,
/*if true*/"<input type=button value=\"Copy\""
+ " onClick='parent.location.href=\"" +getServletPath("viewGrouping/copy?") + oldQS + "\"' "
+" width=\"70\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\">"
+"</td></tr>",
/*if false*/"<input type=button disabled value=\"Copy\""
+"height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\" name=\"button\">"
+"</td>"));
out.println("<tr><td width=68 colspan=2>"
+"<input id=COUNT name=COUNT type=submit value=\"Count\" width=\"69\""
+" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\">"
+"</td>"
+"<td width=68 colspan=2>"
+"<input id=DISPLAY name=DISPLAY type=submit value=\"Display\""
+" width=\"70\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 66px\">"
+"</td></tr>");
out.println("<input type=\"hidden\" id=\"STARTINDEX\" name=\"STARTINDEX\" value=\"" + startIndex + "\">");
out.println("<input type=\"hidden\" id=\"ORDERBY\" name=\"ORDERBY\" value=\"" + orderby + "\">");
out.println("<input type=\"hidden\" id=\"oper\" name=\"oper\" value=\"\">");
out.println("<input type=\"hidden\" id=\"new_grouping_name\" name=\"new_grouping_name\" value=\"\">");
out.println("<td width=34 colspan=1><input id=TOP name=TOP type=submit value=\"<<\""
+"width=\"35\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 31px\">"
+"</td>");
out.println("<td width=34 colspan=1><input id=PREV name=PREV type=submit value=\"<\""
+"width=\"34\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 32px\">"
+"</td>");
out.println("<td width=34 colspan=1><input id=NEXT name=NEXT type=submit value=\">\""
+"width=\"35\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 32px\">"
+"</td>");
out.println("<td width=34 colspan=1><input id=END name=END type=submit value=\">>\""
+"width=\"35\" height=15 style=\"font-size: 9pt; HEIGHT: 24px; WIDTH: 31px\">"
+"</td>");
out.println("</table></form></td></tr></table>");
out.println("</body></html>");
} catch (Exception e)
{
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
}
finally {
try {
if (rset_su != null) rset_su.close();
if (stmt_su != null) stmt_su.close();
} catch (SQLException ignored) {}
}
}
private String buildTopQS(String oldQS) {
StringBuffer sb = new StringBuffer(256);
// First we remove the ORDERBY parameter (Must be at the end)
int i1 = 0, i2 = 0;
i1 = oldQS.indexOf("&ORDERBY=");
if (i1 >= 0)
oldQS = oldQS.substring(0, i1);
// Now let's remove the parameter ACTION
i1 = oldQS.indexOf("ACTION=");
if (i1 >= 0) {
i2 = oldQS.indexOf("&", i1 + 1);
if (12 > i1) {
sb.append(oldQS.substring(0, i1));
sb.append(oldQS.substring(i2 + 1));
} else {
// There was no parameter after ACTAION
}
} else { // The query string didn't contain a ACTION-parameter
sb.append(oldQS);
}
return sb.toString();
}
private String buildInfoLine(String action, int startIndex, int rows, int maxRows) {
String output = null;
int upperLimit = startIndex + maxRows - 1;
if (upperLimit > rows) upperLimit = rows;
if (rows == 0) startIndex = 0;
if (action.regionMatches(true, 0, "NEXT", 0, "NEXT".length())) {
// Print the current row intervall
output = new String("Displaying " + startIndex + "-" + upperLimit +
" of " + rows + " rows.");
} else if (action.regionMatches(true, 0, "PREV", 0, "PREV".length())) {
// Print the current row intervall
output = new String("Displaying " + startIndex + "-" + upperLimit +
" of " + rows + " rows.");
} else if (action.regionMatches(true, 0, "TOP", 0, "TOP".length())) {
// Print the current row intervall
output = new String("Displaying " + startIndex + "-" + upperLimit +
" of " + rows + " rows.");
} else if (action.regionMatches(true, 0, "END", 0, "END".length())) {
// Print the current row intervall
output = new String("Displaying " + startIndex + "-" + upperLimit +
" of " + rows + " rows.");
} else if ("COUNT".equalsIgnoreCase(action)) {
// Count the number of rows this filter will return
output = new String("Query will return " + rows + " rows.");
} else if ("DISPLAY".equalsIgnoreCase(action)) {
// print the current row intervall
output = new String("Displaying " + startIndex + "-" + upperLimit +
" of " + rows + " rows.");
} else if ("NOP".equalsIgnoreCase(action)) {
// Print something that isn't visible (to make the frame as big as it would be in the cases above
output = new String(" ");
} else {
// ???
output = new String("?" + action + "?");
}
return output;
}
private void writeTopScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println("var MAX_GROUPING_LENGTH = 20;");
out.println("var MIN_GROUPING_LENGTH = 1;");
out.println("function newGrouping() {");
out.println(" var grouping_name = prompt('Grouping name', '');");
out.println(" if (grouping_name == null || '' == grouping_name)");
out.println(" return (false);");
out.println(" else if (grouping_name.length > MAX_GROUPING_LENGTH) {");
out.println(" alert('The name must be in the range 1-20 characters.');");
out.println(" return (false);");
out.println(" }");
out.println(" if (!confirm('Are you sure you want to create a\\n'");
out.println(" + 'new grouping with the name \\'' + grouping_name + '\\'')) {");
out.println(" return (false);");
out.println(" }");
out.println("");
out.println("");
out.println(" document.forms[0].oper.value='NEW_GROUPING';");
out.println(" document.forms[0].new_grouping_name.value=grouping_name;");
out.println(" document.forms[0].submit();");
out.println("}");
out.println("//-->");
out.println("</script>");
}
/**
* Creates a new grouping
*
* @param request The request object to use.
* @param response The response object to use.
* @return True if grouping was created.
* False if grouping was not created.
*/
private boolean createGrouping(HttpServletRequest request,
HttpServletResponse response)
{
HttpSession session = request.getSession(true);
Connection connection = (Connection) session.getValue("conn");
String name = null, suid = null, comm = null;
boolean isOk = true;
String errMessage = null;
try
{
connection.setAutoCommit(false);
name = request.getParameter("new_grouping_name");
suid = request.getParameter("suid");
comm = request.getParameter("COMM");
if (name == null)
{
// Well, nothing much to do really.
return true;
}
DbIndividual dbInd = new DbIndividual();
dbInd.CreateGrouping(connection,
Integer.parseInt((String) session.getValue("UserID")),
name,
comm, // Comment
Integer.parseInt(suid));
errMessage = dbInd.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
commitOrRollback(connection, request, response, "Groupings.New.Create",
errMessage, "viewGrouping/new", isOk);
return isOk;
}
/**
* Imports individuals from a file.
*
* @param request The request object to use.
* @param response The response object to use.
* @return True if groupings was imported correctly.
* @exception IOException If frame or error page could not be written.
* @exception ServletException If frame or error page could not be
* written.
*/
private boolean createGroupingFile(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
boolean isOk = true;
String errMessage = null;
Connection connection = null;
try
{
HttpSession session = request.getSession(true);
connection = (Connection) session.getValue("conn");
connection.setAutoCommit(false);
String upPath = getUpFilePath();
MultipartRequest multiRequest =
new MultipartRequest(request, upPath, 5 * 1024 * 1024);
int samplingUnitId = Integer.parseInt(multiRequest.getParameter("suid"));
int userId = Integer.parseInt((String) session.getValue("UserID"));
DbIndividual dbIndividual = new DbIndividual();
Enumeration fileEnum = multiRequest.getFileNames();
if (fileEnum.hasMoreElements())
{
String givenFileName = (String) fileEnum.nextElement();
String systemFileName = multiRequest.getFilesystemName(givenFileName);
FileParser fileParser = new FileParser(upPath + "/" + systemFileName);
fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.GROUPING,
FileTypeDefinition.LIST));
dbIndividual.CreateGroupings(fileParser, connection,
samplingUnitId, userId);
errMessage = dbIndividual.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
}
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
if (commitOrRollback(connection, request, response,
"Groupings.FileImport.Send", errMessage,
"viewGrouping/impFile", isOk)
&& isOk)
{
writeFrame(request, response);
}
return isOk;
}
private boolean deleteGrouping(HttpServletRequest request,
HttpServletResponse response,
Connection connection)
throws ServletException, IOException
{
String errMessage = null;
boolean isOk = true;
int gsid;
try
{
gsid = Integer.parseInt(request.getParameter("gsid"));
DbIndividual dbi = new DbIndividual();
dbi.DeleteGrouping(connection, gsid);
errMessage = dbi.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
// if commit/rollback was ok and if databas operation was ok, write
// the original frame.
if (commitOrRollback(connection, request, response,
"Groupings.Edit.Delete", errMessage,
"viewGrouping", isOk)
&& isOk)
{
writeFrame(request, response);
}
return isOk;
}
/**
* Updates a grouping
*
* @param request The request object to use.
* @param response The response object to use.
* @param connection The connection object to use.
* @return True if grouping was updated.
* False if grouping was not updated.
* @exception ServletException if an error occurs
* @exception IOException if an error occurs
*/
private boolean updateGrouping(HttpServletRequest request,
HttpServletResponse response,
Connection connection)
throws ServletException, IOException
{
HttpSession session = request.getSession(true);
String errMessage = null;
boolean isOk = true;
String name, comment, UserID;
int gsid;
try
{
connection.setAutoCommit(false);
name = request.getParameter("n_name");
comment = request.getParameter("n_comm");
gsid = Integer.parseInt(request.getParameter("gsid"));
UserID = (String) session.getValue("UserID");
DbIndividual dbi = new DbIndividual();
dbi.UpdateGrouping(connection, gsid, name, comment, Integer.parseInt(UserID));
errMessage = dbi.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
commitOrRollback(connection, request, response,
"Groupings.Edit.Update", errMessage, "viewGrouping",
isOk);
return isOk;
}
/**
* Copies a grouping, ie creates a new grouping from an existing one.
*
* @param request The request object to use.
* @param response The response object to use.
* @return True if the grouping was copied.
* False if grouping was not created.
*/
private boolean copyGrouping(HttpServletRequest request,
HttpServletResponse response)
{
HttpSession session = request.getSession(true);
Connection connection = (Connection) session.getValue("conn");
String from_gsid = null, g_name = null, suid = null, comm = null;
String errMessage = null;
boolean isOk = true;
try
{
connection.setAutoCommit(false);
g_name = request.getParameter("to_gname");
from_gsid = request.getParameter("from_gsid");
comm = request.getParameter("COMM");
suid = request.getParameter("suid");
DbIndividual dbInd = new DbIndividual();
dbInd.CopyGrouping(connection,
Integer.parseInt((String) session.getValue("UserID")),
Integer.parseInt(suid),
Integer.parseInt(from_gsid),
g_name,
comm);
errMessage = dbInd.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
commitOrRollback(connection, request, response,
"Groupings.Copy.Copy", errMessage,
"viewGrouping/copy", isOk);
return isOk;
}
/***********************************************************
/* The middle frame (contains header for the result-table)
*/
private void writeMiddle(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
// set content type and other response header fields first
res.setContentType("text/html");
PrintWriter out = res.getWriter();
Statement stmt = null;
ResultSet rset = null;
Connection conn = null;
String action;
int startIndex, rows, maxRows;
action = req.getParameter("ACTION");
if (req.getParameter("STARTINDEX") != null)
startIndex = Integer.parseInt(req.getParameter("STARTINDEX"));
else
startIndex = 0;
if (req.getParameter("ROWS") != null)
rows = Integer.parseInt(req.getParameter("ROWS"));
else
rows = 0;
maxRows = getMaxRows(session);
try {
out.println("<html>\n<head>\n<link rel=\"stylesheet\" type=\"text/css\" href=\""+getURL("style/tableBar.css")+"\">");
out.println("<base target=\"content\">");
out.println("</head><body>");
if(action != null)
{
/*
out.println("<tr>"
+ "<td width=\"750\" colspan=\"3\">"
+ "<p align=left> "
+ buildInfoLine(action, startIndex, rows, maxRows)
+ "</td>"
+ "</tr>");
*/
out.println(" " +buildInfoLine(action, startIndex, rows, maxRows));
}
String oldQS, newQS;
oldQS = req.getQueryString();
String choosen= req.getParameter("ORDERBY");
newQS = buildTopQS(oldQS);
/*
out.println("<table width=\"846\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" valign=\"top\">"
+ "</tr>"
+ "<tr>"
+ "<td width=\"750\" colspan=\"3\">"
+ "<table bgcolor=\"#008B8B\" border=0 cellpadding=0 cellspacing=0 height=20 width=840 style=\"margin-left:2px\">"
+ "<td width=5></td>");
*/
out.println("<table width=846 border=0 cellspacing=0 cellpadding=0 valign=top>");
out.println("<table bgcolor=\"#008B8B\" border=0 cellpadding=0 cellspacing=0" +
" height=20 width=845 style=\"margin-left:2px\">");
out.println("<td width=5></td>");
// the menu choices
//Name
out.println("<td width=100><a href=\"" + getServletPath("viewGrouping")+"?ACTION=DISPLAY&" + newQS + "&ORDERBY=NAME\">");
if(choosen.equals("NAME"))
out.println("<FONT color=saddlebrown><b>Name</b></FONT></a></td>\n");
else out.println("Name</a></td>\n");
//Comment
out.println("<td width=200><a href=\"" + getServletPath("viewGrouping")+"?ACTION=DISPLAY&" + newQS + "&ORDERBY=COMM\">");
if(choosen.equals("COMM"))
out.println("<FONT color=saddlebrown><b>Comment</b></FONT></a></td>\n");
else out.println("Comment</a></td>\n");
//Idividuals
out.println("<td width=100><a href=\"" + getServletPath("viewGrouping")+"?ACTION=DISPLAY&" + newQS + "&ORDERBY=GRPS\">");
if(choosen.equals("GRPS"))
out.println("<FONT color=saddlebrown><b>Groups</b></FONT></a></td>\n");
else out.println("Groups</a></td>\n");
//USER
out.println("<td width=100><a href=\"" + getServletPath("viewGrouping")+"?ACTION=DISPLAY&" + newQS + "&ORDERBY=USR\">");
if(choosen.equals("USR"))
out.println("<FONT color=saddlebrown><b>User</b></FONT></a></td>\n");
else out.println("User</a></td>\n");
//Updated
out.println("<td width=140><a href=\"" + getServletPath("viewGrouping")+"?ACTION=DISPLAY&" + newQS + "&ORDERBY=TS\">");
if(choosen.equals("TS"))
out.println("<FONT color=saddlebrown><b>Updated</b></FONT></a></td>\n");
else out.println("Updated</a></td>\n");
/*
out.println("<td width=100> </td>"
+ "<td width=100> </td>"
+ "</table>"
+ "</td>"
+ "</tr>"
+ "</table>"
+ "</body></html>");
*/
out.println("<td width=100> </td>");
out.println("<td width=100> </td>");
out.println("</table></table>");
out.println("</body></html>");
} catch (Exception e)
{
out.println("<strong>Error in filter!</strong><br>");
out.println("Error message: " + e.getMessage());
out.println("<br>Modify filter according to message!</body></html>");
}
finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
} catch (Exception ignored) {}
}
}
/***************************************************************************************
* *************************************************************************************
* The bottom frame
*/
private void writeBottom(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
// set content type and other response header fields first
res.setContentType("text/html");
PrintWriter out = res.getWriter();
Statement stmt = null;
ResultSet rset = null;
Connection conn = null;
int currentPrivs[];
try
{
currentPrivs = (int [])session.getValue("PRIVILEGES");
String suid, action = null, orderby = null, pid=null;
String oldQS = removeQSParameterOper(req.getQueryString());
action = req.getParameter("ACTION");
suid = req.getParameter("suid");
pid = (String)session.getValue("PID");
if (suid == null) suid = "-1";
if (action == null || action.equalsIgnoreCase("NOP") ||
action.equalsIgnoreCase("COUNT") || suid == null)
{
// Nothing to do!
HTMLWriter.writeBottomDefault(out);
return;
}
else if (action.equalsIgnoreCase("NEXT"))
{
// Skip the first 50 rows?!
} else if (action.equalsIgnoreCase("PREV"))
{
// The opposit
}
out.println("<html>\n"
+ "<head><link rel=\"stylesheet\" type=\"text/css\" href=\""
+getURL("style/bottom.css")+"\">\n"
+ "<title>bottom</title>\n"
+ "</head>\n"
+ "<body>\n");
conn = (Connection) session.getValue("conn");
stmt = conn.createStatement();
StringBuffer sbSQL = new StringBuffer(512);
sbSQL.append("SELECT GSID, NAME, COMM, USR, " +
"to_char(TS, '" + getDateFormat(session) + "') as TC_TS, " +
"GRPS FROM gdbadm.V_GROUPINGS_2 WHERE SUID=" + suid + " AND PID="+pid+" ");
String qs = req.getQueryString();
// Build filter
String filter = buildFilter(req);
sbSQL.append(filter);
orderby = req.getParameter("ORDERBY");
if (orderby == null)
sbSQL.append(" order by NAME");
else
sbSQL.append(" order by " + orderby);
rset = stmt.executeQuery(sbSQL.toString());
out.println("<TABLE align=left border=0 cellPadding=0");
out.println("cellSpacing=0 width=840 style=\"margin-left:2px\">");
boolean odd = true;
int rowCount = 0;
int startIndex = Integer.parseInt(req.getParameter("STARTINDEX"));
if (startIndex > 1) {
while ((rowCount++ < startIndex - 1) && rset.next() )
;
}
rowCount = 0;
int maxRows = getMaxRows(session);
while (rset.next() && rowCount < maxRows)
{
out.println("<TR align=left ");
if (odd) {
out.println("bgcolor=white>");
odd = false;
} else {
out.println("bgcolor=lightgrey>");
odd = true;
}
out.println("<TD WIDTH=5></TD><TD WIDTH=100>" + rset.getString("NAME")+ "</TD>");
out.println("<TD WIDTH=200>" + formatOutput(session,rset.getString("COMM"),30) +"</TD>");
out.println("<TD WIDTH=100>" + formatOutput(session,rset.getString("GRPS"),6) + "</TD>");
out.println("<TD WIDTH=100>" + formatOutput(session,rset.getString("USR"),8) + "</TD>");
out.println("<TD WIDTH=140>" + rset.getString("TC_TS") + "</TD>");
out.println("<TD WIDTH=100><A HREF=\""+getServletPath("viewGrouping/details?gsid=") + rset.getString("GSID") + "&" + oldQS + "\" target=\"content\">Details</A></TD>");
out.println("<TD WIDTH=100>");
out.println(privDependentString(currentPrivs,GRP_W,
/*if true*/"<A HREF=\""+getServletPath("viewGrouping/edit?gsid=") + rset.getString("GSID") + "&" + oldQS + "\" target=\"content\">Edit</A></TD></TR>",
/*if false*/"<font color=tan>  Edit</font></TD>") );
rowCount++;
}
out.println("</TABLE>");
out.println("</body></html>");
}
catch (Exception e)
{
e.printStackTrace();
out.println("<strong>Error in filter!</strong><br>");
out.println("Error message: " + e.getMessage());
out.println("<br>Modify filter according to message!</body></html>");
}
finally
{
try
{
if (rset != null) rset.close();
if (stmt != null) stmt.close();
}
catch (Exception ignored)
{}
}
}
private void printScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println("function valForm(action) {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" if ('CREATE' == action.toUpperCase()) {");
out.println(" if (confirm('Are you sure you want to create the grouping?')) {");
out.println(" document.forms[0].oper.value='CREATE';");
out.println(" rc = 0;");
out.println(" }");
out.println(" ");
out.println(" } else {");
out.println(" document.forms[0].oper.value='';");
out.println(" }");
out.println(" ");
out.println(" if (rc == 0) {");
out.println(" document.forms[0].submit();");
out.println(" return true;");
out.println(" }");
out.println(" return false;");
out.println(" ");
out.println("}");
out.println("//-->");
out.println("</script>");
}
private void writeImpFile(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
Connection conn = null;
conn = (Connection) session.getValue("conn");
writeImpFilePage(req, res);
}
/**
* Writes the page used to import groupings.
*
* @param request The request object to use.
* @param response The response object to use.
*/
private void writeImpFilePage(HttpServletRequest request,
HttpServletResponse response)
{
HttpSession session = request.getSession(true);
Connection connection = (Connection) session.getValue("conn");
Statement sqlStatement = null;
ResultSet resultSet = null;
response.setContentType("text/html");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
try
{
connection = (Connection) session.getValue("conn");
String projectId = (String) session.getValue("PID");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
"Transitional//EN\"");
out.println(" \"http://www.w3.org/TR/html4/loose.dtd\">");
out.println("<html>");
out.println("<head>");
HTMLWriter.css(out,getURL("style/axDefault.css"));
// Validation script
out.println("<script type=\"text/javascript\">");
out.println("<!--");
out.println("function valForm() {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" ");
out.println(" if (rc) {");
out.println(" if (confirm('Are you sure that you want to create the grouping?')) {");
out.println(" document.forms[0].oper.value = 'UPLOAD';");
out.println(" document.forms[0].submit();");
out.println(" }");
out.println(" }");
out.println(" ");
out.println(" ");
out.println("}");
out.println("//-->");
out.println("</script>");
out.println("<title>Import grouping</title>");
out.println("</head>");
out.println("<body>");
out.println("<table width=\"846\" border=\"0\">" +
"<tr>" +
"<td width=\"14\" rowspan=\"3\"></td>" +
"<td width=\"736\" colspan=\"2\" height=\"15\">");
out.println("<center>" +
"<b style=\"font-size: 15pt\">Groupings - File import</b></center>" +
"</td></tr>" +
"<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>" +
"</tr></table>");
out.println("<form method=post enctype=\"multipart/form-data\" action=\"" +
getServletPath("viewGrouping/impMultipart") + "\">");
out.println("<table border=0>");
out.println("<tr><td width=10 style=\"WIDTH: 10px\"> </td>");
sqlStatement = connection.createStatement();
resultSet = sqlStatement.executeQuery("SELECT SUID, NAME FROM V_ENABLED_SAMPLING_UNITS_2 WHERE " +
"PID=" + projectId + " ORDER BY NAME");
out.println("<td>Sampling units<br>");
out.println("<select name=suid style=\"WIDTH: 200px\">");
while (resultSet.next() ) {
out.println("<option value=\"" + resultSet.getString("SUID") + "\">" +
resultSet.getString("NAME") + "</option>");
}
out.println("</select>");
resultSet.close();
sqlStatement.close();
out.println("</td></tr>");
// File
out.println("<tr><td width=10 style=\"WIDTH: 10px\"> </td>");
out.println("<td>File<br>");
out.println("<input type=file name=filename " +
"style=\"WIDTH: 350px\">");
out.println("<tr><td width=10 style=\"WIDTH: 10px\"> </td><td></td></tr>");
out.println("<tr><td width=10 style=\"WIDTH: 10px\"> </td><td>");
out.println("<table border=0><tr>");
out.println("<td>");
out.println("<input type=button value=Send " +
"style=\"WIDTH: 100px\" onClick='valForm()'>");
out.println(" </td></tr></table>");
out.println("</td></tr>");
out.println("</table>");
out.println("<input type=hidden name=oper value=\"\">");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
finally
{
try
{
if (resultSet != null)
{
resultSet.close();
}
if (sqlStatement != null)
{
sqlStatement.close();
}
}
catch (SQLException ignored)
{
}
}
}
private void writeDetails(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
res.setContentType("text/html");
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
out.println("<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">");
Connection conn = null;
Statement stmt_curr = null, stmt_hist = null;
ResultSet rset_curr = null, rset_hist = null;
String prev_name = null;
String prev_comm = null;
String prev_usr = null;
String prev_ts = null;
String curr_name = null;
String curr_comm = null;
String curr_usr = null;
String curr_ts = null;
boolean has_history = false;
try {
String oldQS = buildQS(req);
String gsid = req.getParameter("gsid");
if (gsid == null || gsid.trim().equals("")) gsid = "-1";
conn = (Connection) session.getValue("conn");
// Get the current data
stmt_curr = conn.createStatement();
String strSQL = "SELECT SUNAME, NAME, COMM, USR, "
+ "to_char(TS, '"+ getDateFormat(session) + "') as TC_TS "
+ "FROM gdbadm.V_GROUPINGS_2 WHERE "
+ "GSID=" + gsid ;
rset_curr = stmt_curr.executeQuery(strSQL);
// Get the history
stmt_hist = conn.createStatement();
strSQL = "SELECT NAME, COMM, USR, " +
"to_char(TS , '" + getDateFormat(session) + "') as TC_TS, TS as dummy " +
"FROM gdbadm.V_GROUPINGS_LOG " +
"WHERE GSID=" + gsid + " " +
"ORDER BY dummy desc";
rset_hist = stmt_hist.executeQuery(strSQL);
// We baldly assume that this is alright (why shouldn't we?)
rset_curr.next();
curr_name = rset_curr.getString("NAME");
curr_comm = rset_curr.getString("COMM");
curr_usr = rset_curr.getString("USR");
curr_ts = rset_curr.getString("TC_TS"); // Time stamp
if (rset_hist.next()) {
prev_name = rset_hist.getString("NAME");
prev_comm = rset_hist.getString("COMM");
prev_usr = rset_hist.getString("USR");
prev_ts = rset_hist.getString("TC_TS");
has_history = true;
}
out.println("<html>\n"
+ "<head>\n");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("<title>Details</title>\n"
+ "<META HTTP_EQUIV=\"Pragma\" CONTENT=\"no-cache\">");
out.println("</head>\n<body>\n");
out.println("<table width=\"846\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" valign=\"top\">" +
"<tr>" +
"<td width=\"14\" rowspan=\"3\"></td>" +
"<td width=\"736\" colspan=\"2\" height=\"15\">");
out.println("<center>" +
"<b style=\"font-size: 15pt\">Groupings - Details</b></center>" +
"</font></td></tr>" +
"<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>" +
"</tr></table>");
out.println("<table cellspacing=0 cellpadding=0><tr>" +
"<td width=15></td><td></td></tr>");
out.println("<tr><td></td><td>");
out.println("<table nowrap border=0 cellSpacing=0>");
out.println("<tr><td colspan=2 bgcolor=lightgrey><font size=\"+1\">Static data</font></td></tr>");
out.println("<tr><td>Sampling unit</td><td>" + rset_curr.getString("SUNAME") + "</td></tr>");
out.println("</table><br><br>");
out.println("</td></tr>");
out.println("<tr><td></td><td></td></tr><tr><td></td><td>");
out.println("<table nowrap align=center border=0 cellSpacing=0 width=600px>");
out.println("<tr bgcolor=black><td align=center colspan=9><b><font color=\"#ffffff\">Current Data</font></b></td></tr>");
out.println("<tr bgcolor=\"#008B8B\">");
out.println("<td nowrap WIDTH=100>Name</td>");
out.println("<td nowrap WIDTH=300>Comment</td>");
out.println("<td nowrap WIDTH=50>User</td>");
out.println("<td nowrap WIDTH=150>Last updated</td></tr>");
out.println("<tr bgcolor=white>");
// Name
out.println("<td>");
if (("" + curr_name).equals("" + prev_name))
out.println(formatOutput(session, curr_name, 12));
else
out.println("<font color=red>" + formatOutput(session, curr_name, 12) + "</font>");
out.println("</td>");
// Comment
out.println("<td>");
if (("" + curr_comm).equals("" + prev_comm))
out.println(formatOutput(session, curr_comm, 30));
else
out.println("<font color=red>" + formatOutput(session, curr_comm, 30) + "</font>");
out.println("</td>");
// User
out.println("<td>" + formatOutput(session, curr_usr, 10) + "</td>");
out.println("<td>" + formatOutput(session, curr_ts, 16) + "</td>"); // Last updated
out.println("</tr>");
out.println("<tr bgcolor=Black>");
out.println("<td align=center colspan=9><b><font color=\"#ffffff\">History</font></b></td></tr>");
curr_name = prev_name;
curr_comm = prev_comm;
curr_usr = prev_usr;
curr_ts = prev_ts;
boolean odd = true;
while (rset_hist.next()) {
prev_name = rset_hist.getString("NAME");
prev_comm = rset_hist.getString("COMM");
prev_usr = rset_hist.getString("USR");
prev_ts = rset_hist.getString("TC_TS");
if (odd)
out.println("<tr bgcolor=white>");
else
out.println("<tr bgcolor=lightgrey>");
odd = !odd;
// Name
out.println("<td>");
if (("" + curr_name).equals("" + prev_name))
out.println(formatOutput(session, curr_name, 12));
else
out.println("<font color=red>" + formatOutput(session, curr_name, 12) + "</font>");
out.println("</td>");
// Comment
out.println("<td>");
if (("" + curr_comm).equals("" + prev_comm))
out.println(formatOutput(session, curr_comm, 30));
else
out.println("<font color=red>" + formatOutput(session, curr_comm, 30) + "</font>");
out.println("</td>");
// User
out.println("<td>" + formatOutput(session, curr_usr, 10) + "</td>");
out.println("<td>" + formatOutput(session, curr_ts, 16) + "</td>"); // Last updated
out.println("</tr>");
curr_name = prev_name;
curr_comm = prev_comm;
curr_usr = prev_usr;
curr_ts = prev_ts;
}
if (has_history) {
if (odd) {
out.println("<tr bgcolor=white>");
odd = false;
} else {
out.println("<tr bgcolor=lightgrey>");
odd = true;
}
// Name
out.println("<td>");
if (("" + curr_name).equals("" + prev_name))
out.println(formatOutput(session, curr_name, 12));
else
out.println("<font color=red>" + formatOutput(session, curr_name, 12) + "</font>");
out.println("</td>");
// Comment
out.println("<td>");
if (("" + curr_comm).equals("" + prev_comm))
out.println(formatOutput(session, curr_comm, 30));
else
out.println("<font color=red>" + formatOutput(session, curr_comm, 30) + "</font>");
out.println("</td>");
// User
out.println("<td>" + formatOutput(session, curr_usr, 10) + "</td>");
out.println("<td>" + formatOutput(session, curr_ts, 16) + "</td>"); // Last updated
out.println("</tr>");
}
out.println("</table>");
out.println("</td></tr>");
out.println("<tr><td></td><td></td></tr><tr><td></td><td>");
// Back' button
out.println("<form>");
out.println("<table cellspacing=0 cellpading=0>");
out.println("<tr>");
out.println("<td>");
out.println("<input type=button name=BACK value=Back width=100 " +
"style=\"WIDTH: 100px\" onClick='location.href=\"" +
// getServletPath("viewGrouping?") + oldQS + "\"'> ");
getServletPath("viewGrouping?&RETURNING=YES") + "\"'> ");
out.println("</td></tr></table>");
out.println("</form>");
out.println("</td></tr></table>");
out.println("</body></html>");
} catch (SQLException e)
{
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
} finally {
try {
if (rset_curr != null) rset_curr.close();
if (rset_hist != null) rset_hist.close();
if (stmt_curr != null) stmt_curr.close();
if (stmt_hist != null) stmt_hist.close();
} catch (SQLException ignored) {}
}
}
/***************************************************************************************
* *************************************************************************************
* The new Grouping Page
*/
private void writeNew(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
Connection conn = null;
String oper = req.getParameter("oper");
conn = (Connection) session.getValue("conn");
if (oper == null) oper = "SEL_CHANGED";
if (oper.equals("CREATE")) {
if (createGrouping(req, res))
{
writeFrame(req, res);
}
} else {
writeNewPage(req, res);
}
}
private void writeNewPage(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
PrintWriter out = res.getWriter();
// set content type and other response header fields first
res.setContentType("text/html");
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
printScript(out);
//writeNewScript(out);
try {
conn = (Connection) session.getValue("conn");
stmt = conn.createStatement();
String suname, suid,pid;
pid= (String) session.getValue("PID");
//suid = (String) session.getValue("SUID");
suid=req.getParameter("suid");
// System.err.println ("suid="+suid);
String oldQS = buildQS(req);
//String inParameters=req.getQueryString();
//System.err.println ("new/OLDQS="+oldQS);
//System.err.println ("new/REQ="+req.getQueryString());
out.println("<html>\n"
+ "<head>\n"
+ "<title>New Grouping</title>\n"
+ "</head>\n");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("<body>\n");
out.println("<table width=846 border=0 cellspacing=0 cellpadding=0 valign=top>");
out.println("<tr>");
out.println("<td width=14 rowspan=3></td>");
out.println("<td width=736 colspan=2 height=15>");
out.println("<center>" +
"<b style=\"font-size: 15pt\">Groupings - New</b></center>");
out.println("</td></tr>");
out.println("<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>");
out.println("</tr></table>");
out.println("<FORM method=\"post\" action=\"" + getServletPath("viewGrouping/new?")+/*oldQS +*/ "\">");
out.println("<table width=800 border=0>");//align=center border=0>");
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT SUID, NAME FROM gdbadm.V_ENABLED_SAMPLING_UNITS_2 " +
"WHERE PID="+pid+" ORDER BY NAME");
out.println("<tr><td width=200 >Sampling Units</td></tr>" +
"<tr><td width=200><select style=\"WIDTH: 200px\" name=\"suid\">");
while (rset.next()) {
// no su choosen yet
if(suid==null || "".equalsIgnoreCase(suid)||suid.equalsIgnoreCase("null")) {
out.println("<option selected value=\"" + rset.getString("SUID") + "\">" + rset.getString("NAME"));
suid = rset.getString("SUID");
} else { // suid has a value
if(suid.equalsIgnoreCase(rset.getString("SUID")))
{
// Found the allready choosen su. "Mark" it as selected
out.println("<option selected value=\"" + rset.getString("SUID") + "\">" + rset.getString("NAME"));
}
else
{
out.println("<option value=\"" + rset.getString("SUID") + "\">" + rset.getString("NAME"));
}
}
}
out.println("</select></td></tr>");
out.println("<tr><td width=200 >Name</td></tr>" +
"<tr><td width=200><input type=text maxlength=20 name=\"new_grouping_name\" style=\"WIDTH: 200px\" value=\"\"></td></tr>");
out.println("<tr><td width=200 >Comment</td></tr>" + "<td colspan=3 width=600>"
+"<textarea rows=8 cols=45 name=COMM></textarea>"
+"</td></tr>");
out.println("<tr><td width=200> </td><td width=200> </td><td width=200> </td><td width=200> </td></tr>" +
"<tr><td colspan=4 >" +
"<input type=button value=Back onClick='location.href=\"" +
getServletPath("viewGrouping?") + oldQS + "\";' " +
// getServletPath("viewGrouping?suid=") + suid + "&action=DISPLAY" +"\";' " +
getServletPath("viewGrouping?&RETURNING=YES") + "\";' " +
"width=100 style=\"WIDTH: 100px\"> "+
"<input type=button id=SAVE name=SAVE value=Create style=\"WIDTH: 100px\""+
"onClick='valForm(\"CREATE\")'> ");
out.println("</td></tr>");
out.println("</table>");
out.println("<input type=\"hidden\" ID=\"oper\" NAME=\"oper\" value=\"\">");
out.println("<input type=\"hidden\" NAME=RETURNING value=YES>");
/*
out.println("<input type=\"hidden\" ID=ACTION NAME=ACTION value=\""+req.getParameter("ACTION")+"\">");
out.println("<input type=\"hidden\" ID=STARTINDEX NAME=STARTINDEX value=\""+req.getParameter("STARTINDEX")+"\">");
out.println("<input type=\"hidden\" ID=ROWS NAME=ROWS value=\""+req.getParameter("ROWS")+"\">");
out.println("<input type=\"hidden\" ID=ORDERBY NAME=ORDERBY value=\""+req.getParameter("ORDERBY")+"\">");
*/
out.println("</FORM>");
out.println("</body>\n</html>");
} catch (Exception e)
{
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
}
finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
} catch (SQLException ignored) {}
}
}
private void writeEdit(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
Connection conn = null;
String oper = req.getParameter("oper");
conn = (Connection) session.getValue("conn");
if (oper == null) oper = "";
if (oper.equals("DELETE")) {
if (deleteGrouping(req, res, conn)) {
writeFrame(req, res);
}
} else if (oper.equals("UPDATE")) {
if(updateGrouping(req, res, conn)) {
writeEditPage(req, res);
}
} else
writeEditPage(req, res);
}
private void writeEditPage(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
res.setContentType("text/html");
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
out.println("<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">");
Connection conn = (Connection) session.getValue("conn");
Statement stmt = null;
ResultSet rset = null;
String suid, suname, gsid, name, comm, usr, tc_ts;
try {
stmt = conn.createStatement();
String oldQS = buildQS(req);
String pid = (String) session.getValue("PID");
// Since oper might be included in the old query string, we better remove it.
// If we don't, the application won't be able to retrive the correct value because
// servlets gets the parameters included in the url before the ones posted.
oldQS = removeQSParameter(oldQS,"oper");
suid = req.getParameter("suid");
gsid = req.getParameter("gsid");
String sql = "SELECT SUID, SUNAME, NAME, COMM, USR, " +
"to_char(TS, '" + getDateFormat(session) + "') as TC_TS " +
"FROM gdbadm.V_GROUPINGS_2 WHERE " +
"GSID=" + gsid ;
rset = stmt.executeQuery(sql);
rset.next();
suname = rset.getString("SUNAME");
name = rset.getString("NAME");
comm = rset.getString("COMM");
usr = rset.getString("USR");
tc_ts = rset.getString("TC_TS");
rset.close();
stmt.close();
out.println("<html>");
out.println("<head>");
writeEditScript(out);
out.println("<title>Edit grouping</title>");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("</head>");
out.println("<body>");
out.println("<table width=\"846\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" valign=\"top\">" +
"<tr>" +
"<td width=\"14\" rowspan=\"3\"></td>" +
"<td width=\"736\" colspan=\"2\" height=\"15\">");
out.println("<center>" +
"<b style=\"font-size: 15pt\">Groupings - Edit</b></center>" +
"</font></td></tr>" +
"<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>" +
"</tr></table>");
out.println("<form method=post action=\"" + getServletPath("viewGrouping/edit?") +
oldQS + "&gsid=" + gsid + "\">");
out.println("<table cellspacing=0 cellpadding=0><tr>" +
"<td width=15></td><td>");
out.println("<table border=0 cellpading=0 cellspacing=0>");
out.println("<tr>");
out.println("<td colspan=2 bgcolor=lightgrey><font size=\"+1\">Static data</font></td>");
out.println("</tr>");
out.println("<tr><td>Sampling unit</td><td>" + suname + "</td></tr>");
out.println("<tr><td>Last updated by</td><td>" + usr + "</td></tr>");
out.println("<tr><td>Last updated</td><td>" + tc_ts + "</td></tr>");
out.println("</table>");
out.println("</td></tr><tr><td></td><td>");
// Changable data
out.println("<table border=0 cellpading=0 cellspacing=0>");
out.println("<tr><td colspan=2 bgcolor=lightgrey><font size=\"+1\">Changable data</font></td></tr>");
out.println("<tr><td>Name<br>");
out.println("<input type=text name=n_name width=200 style=\"WIDTH: 200px\" " +
"value=\"" + replaceNull(name, "") + "\" maxlength=20>");
out.println("</td></tr>");
out.println("<tr>");
out.println("<td>Comment<br>");
out.println("<textarea name=n_comm cols=45 rows=7>" +
replaceNull(comm, "") + "</textarea>");
out.println("</td></tr>");
out.println("</table>");
out.println("</td></tr>");
out.println("<tr><td></td><td></td></tr>");
out.println("<tr><td></td><td>");
out.println("<table cellspacing=0 cellpading=0>");
out.println("<tr>");
out.println("<td>");
out.println("<input type=button name=BACK value=Back width=100 " +
"style=\"WIDTH: 100px\" onClick='location.href=\"" +
// getServletPath("viewGrouping?") + "suid=" + suid + "&item=no\"'> ");
// getServletPath("viewGrouping?") + oldQS + "\"'> ");
getServletPath("viewGrouping?&RETURNING=YES") + "\"'> ");
out.println("</td><td>");
out.println("<input type=reset value=Reset width=100 " +
"style=\"WIDTH: 100px\"> ");
out.println("</td><td>");
out.println("<input type=button name=DELETE value=Delete width=100 " +
"style=\"WIDTH: 100px\" onClick='valForm(\"DELETE\")'> ");
out.println("</td><td>");
out.println("<input type=button name=UPDATE value=Update width=100 " +
"style=\"WIDTH: 100px\" onClick='valForm(\"UPDATE\")'> ");
out.println("</td></tr></table>");
// Store some extra information needed by doPost()
out.println("<input type=\"hidden\" NAME=oper value=\"\">");
out.println("<input type=\"hidden\" NAME=RETURNING value=YES>");
out.println("</form>");
out.println("</td></tr></table>");
out.println("</body></html>");
} catch (Exception e)
{
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
} finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
} catch (SQLException ignored) {}
}
}
private void writeEditScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println("function valForm(action) {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" if ('DELETE' == action.toUpperCase()) {");
out.println(" if (confirm('Are you sure you want to delete the grouping?')) {");
out.println(" document.forms[0].oper.value='DELETE';");
out.println(" rc = 0;");
out.println(" }");
out.println(" ");
out.println(" } else if ('UPDATE' == action.toUpperCase()) {");
out.println(" if (confirm('Are you sure you want to update the grouping?')) {");
out.println(" document.forms[0].oper.value='UPDATE';");
out.println(" rc = 0;");
out.println(" }");
out.println(" } else {");
out.println(" document.forms[0].oper.value='';");
out.println(" }");
out.println(" ");
out.println(" if (rc == 0) {");
out.println(" document.forms[0].submit();");
out.println(" return true;");
out.println(" }");
out.println(" return false;");
out.println(" ");
out.println("}");
out.println("//-->");
out.println("</script>");
}
private void writeCopy(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
Connection conn = null;
String oper = req.getParameter("oper");
conn = (Connection) session.getValue("conn");
if (oper == null) oper = "";
if (oper.equals("COPY")) {
if (copyGrouping(req, res)) {
writeCopyPage(req, res);
}
} else
writeCopyPage(req, res);
}
private void writeCopyPage(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
PrintWriter out = res.getWriter();
// set content type and other response header fields first
res.setContentType("text/html");
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
printCpScript(out);
//writeNewScript(out);
try {
conn = (Connection) session.getValue("conn");
stmt = conn.createStatement();
String suname, suid = null ,pid; // gsid=null;
pid= (String) session.getValue("PID");
suid = req.getParameter("suid");
String from_gsid = req.getParameter("from_gsid");
String to_gname = req.getParameter("to_gname");
if(to_gname == null || to_gname.equalsIgnoreCase("null")) {
to_gname ="";
}
String oldQS = buildQS(req);
//String oldQS = req.getQueryString();
// System.err.println("copy/OLDQS="+ oldQS);
// System.err.println("copy/REQ="+ req.getQueryString());
out.println("<html>\n"
+ "<head>\n"
+ "<title>Copy Grouping</title>\n"
+ "</head>\n");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("<body>\n");
out.println("<table width=846 border=0 cellspacing=0 cellpadding=0 valign=top>");
out.println("<tr>");
out.println("<td width=14 rowspan=3></td>");
out.println("<td width=736 colspan=2 height=15>");
out.println("<center>" +
"<b style=\"font-size: 15pt\">Groupings - Copy</b></center>");
out.println("</td></tr>");
out.println("<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>");
out.println("</tr></table>");
out.println("<FORM method=\"get\" action=\"" + getServletPath("viewGrouping/copy?")+ oldQS + "\">");
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT SUID, NAME FROM gdbadm.V_ENABLED_SAMPLING_UNITS_2 WHERE PID="+pid+" ORDER BY NAME ");
out.println("<table><td></td></table>");
out.println("<table><tr><td width= 12></td><td width=100 align=left>Sampling Unit</td></tr>" +
"<tr><td width=12></td><td width=200><select style=\"WIDTH: 200px\" name=\"suid\"onChange='document.forms[0].submit()'>");
while (rset.next())
{
// NO SU COOSEN YET
if( suid==null || suid.equalsIgnoreCase("") || suid.equalsIgnoreCase("null")) {
out.println("<OPTION selected value=\"" + rset.getString("SUID") + "\">" +
rset.getString("NAME")+ "</option>\n");
suid=rset.getString("SUID");
} else {
if (suid != null && suid.equalsIgnoreCase(rset.getString("SUID"))) {
out.println("<OPTION selected value=\"" + rset.getString("SUID") + "\">" +
rset.getString("NAME")+ "</option>\n");
} else {
out.println("<OPTION value=\"" + rset.getString("SUID") + "\">" + rset.getString("NAME")+"</option>\n");
}
}
}
rset.close();
stmt.close();
out.println("</select></td></tr></table>");
out.println("<table><td></td></table>");
out.println("<table><td></td></table>");
// the "bar"
out.println( "<table bgcolor=\"#008B8B\" border=0 cellpadding=0 cellspacing=0 height=15 width=800 >");
out.println("<tr><td bgcolor=oldlace width=12></td><td width=338 bgcolor=\"#008B8B\">"
+"<b>Copy From</b></td>"
+"<td width=100 bgcolor=oldlace></td>"
+"<td width=350><b>Copy To</b></td></tr></table>\n");
out.println( "<table border=0 cellpadding=0 cellspacing=0 height=15 width=800 >");
out.println("<tr><td width=5></td></tr>");
out.println("<tr><td width=5></td></tr>");
out.println("<tr><td width=5></td></tr>");
// from grouping
out.println("<tr><td width=350 align=left>Grouping</td>"
+ "<td width=100>  </td>"
+"<td width=350>Grouping</td></tr>");
out.println("<tr><td width=350>");
out.println("<select width=200 style=\"WIDTH: 200px\" " +
"name=from_gsid>");
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT GSID, NAME FROM gdbadm.V_GROUPINGS_1 WHERE SUID="+suid+" AND SUID="+suid+" ORDER BY NAME");
while (rset.next()) {
// no gsid choosen yet
if(from_gsid==null ||"".equalsIgnoreCase(from_gsid) || from_gsid.equalsIgnoreCase("null")) {
out.println("<option selected value=\"" + rset.getString("GSID") + "\">" + rset.getString("NAME"));
from_gsid = rset.getString("GSID");
} else {
// gsid choosen previously
if(from_gsid.equals(rset.getString("GSID"))) {
out.println("<option selected value=\"" + rset.getString("GSID") + "\">" + rset.getString("NAME"));
from_gsid = rset.getString("GSID");
} else {
out.println("<option value=\"" + rset.getString("GSID") + "\">" + rset.getString("NAME"));
}
}
}
rset.close();
stmt.close();
out.println("</select></td>");
// to gouping
out.println("<td width=100>  </td><td width=350>" +
"<input type=text maxlength=20 name=to_gname value="+to_gname+"></td>");
out.println("</tr>");
out.println("<input type=\"hidden\" ID=oper NAME=oper value=\"\">");
out.println("<input type=\"hidden\" ID=ACTION NAME=ACTION value=\""+req.getParameter("ACTION")+"\">");
out.println("<input type=\"hidden\" ID=STARTINDEX NAME=STARTINDEX value=\""+req.getParameter("STARTINDEX")+"\">");
out.println("<input type=\"hidden\" ID=ROWS NAME=ROWS value=\""+req.getParameter("ROWS")+"\">");
out.println("<input type=\"hidden\" ID=ORDERBY NAME=ORDERBY value=\""+req.getParameter("ORDERBY")+"\">");
out.println("<tr><td width=5></td></tr>");
out.println("<tr><td width=5></td></tr>");
out.println("<tr><td>");
// out.println("<input type=button id=Cancel name=Cancel value=Back style=\"WIDTH: 100px\""
// +"onClick='location.href=\"\"'>");
out.println("<input type=button name=Cancel value=Back width=100 " +
"style=\"WIDTH: 100px\" onClick='location.href=\"" +
getServletPath("viewGrouping?") + removeQSParameter(oldQS,"oper") + "\"'> ");
out.println("<input type=button name=Copy value=Copy " +
"width=100 style=\"WIDTH: 100px\" onClick='valForm(\"COPY\")'> ");
out.println("</td></tr>");
out.println("</table>");
out.println("</FORM>");
out.println("</body>\n</html>");
} catch (Exception e) {
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
} finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
} catch (SQLException ignored) {}
}
}
private void printCpScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println("function valForm(action) {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" if ('COPY' == action.toUpperCase()) {");
out.println(" if (confirm('Are you sure you want to copy the grouping?')) {");
out.println(" document.forms[0].oper.value='COPY';");
out.println(" rc = 0;");
out.println(" }");
out.println(" ");
out.println(" } else {");
out.println(" document.forms[0].oper.value='';");
out.println(" }");
out.println(" ");
out.println(" if (rc == 0) {");
out.println(" document.forms[0].submit();");
out.println(" return true;");
out.println(" }");
out.println(" return false;");
out.println(" ");
out.println("}");
out.println("//-->");
out.println("</script>");
}
private boolean authorized(HttpServletRequest req, HttpServletResponse res) {
HttpSession session = req.getSession(true);
String extPath = req.getPathInfo();
boolean ok = true;
String title = "";
int privileges[] = (int[]) session.getValue("PRIVILEGES");
try {
if (extPath == null || extPath.trim().equals("") ) extPath = "/";
if (extPath.equals("/") ||
extPath.equals("/bottom") ||
extPath.equals("/middle") ||
extPath.equals("/top") ||
extPath.equals("/details") ) {
// We need the privilege GRP_R for all these
title = "Groupings - View & Edit";
if ( privDependentString(privileges, GRP_R, "", null) == null )
ok = false;
} else if (extPath.equals("/edit") ) {
// We need the privilege GRP_W
title = "Groupings - Edit";
if ( privDependentString(privileges, GRP_W, "", null) == null)
ok = false;
} else if (extPath.equals("/new") ) {
// We need the privilege GRP_W
title = "Grouping - New";
if ( privDependentString(privileges, GRP_W, "", null) == null)
ok = false;
} else if (extPath.equals("/copy") ) {
// We need the privilege GRP_W
title = "Groupings - Copy";
if ( privDependentString(privileges, GRP_R, "", null) == null)
ok = false;
}
if (!ok)
writeUnauthorizedPage(res, title);
} catch (Exception e) {
e.printStackTrace(System.err);
ok = false;
}
return ok;
}
private void writeUnauthorizedPage(HttpServletResponse res, String title) {
try {
res.setContentType("text/html");
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
out.println("<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">");
out.println("<html>");
out.println("<head>");
out.println("<title>Unauthorized user</title>");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("</head>");
out.println("<body>");
out.println("<table width=\"846\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" valign=\"top\">" +
"<tr>" +
"<td width=\"14\" rowspan=\"3\"></td>" +
"<td width=\"736\" colspan=\"2\" height=\"15\">");
out.println("<center>" +
"<b style=\"font-size: 15pt\">");
out.println(title);
out.println("</b></center>" +
"</font></td></tr>" +
"<tr><td width=\"736\" colspan=\"2\" height=\"2\" bgcolor=\"#008B8B\"> </td>" +
"</tr></table>");
out.println("<table cellspacing=0 cellpadding=0><tr>" +
"<td width=15></td><td>");
out.println("<p>");
out.println("<b>");
out.println("You are not authorized to view this page.");
out.println("</b>");
out.println("</td></tr>");
out.println("<tr><td></td><td></td></tr><td></td><td>");
out.println("</td></tr></table>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
;
}
}
}