/*
* viewRType.java
*
* Created on den 4 december 2003, 09:38
*/
package se.arexis.agdb.servlet;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import se.arexis.agdb.db.*;
import se.arexis.agdb.util.*;
/**
*
* @author wali
* @version
*/
public class viewRType 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.
* Two pages are displayed, one where the user can create
* a new category, writeNewCTGPage, and one where he can
* change the name and comment to the category, writeEditCTGPage.
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(true);
String extPath = req.getPathInfo();
System.err.println("QS="+req.getQueryString());
System.err.println("path="+extPath);
if (extPath == null || extPath.equals("") || extPath.equals("/") || extPath.equals("/new")) {
writeNewRTypePage(req, res);
} else if (extPath.equals("/edit")) {
writeEditRTypePage(req, res);
} else if (extPath.equals("/writeNew")) {
writeNew(req, res);
}else if (extPath.equals("/createRType")) {
createRType(req, res);
}
}
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.equals("UPDATE")) {
if (updateRType(req, res, conn))
writeEditRTypePage(req, res);
}
else if (oper.equals("DELETE")) {
if(deleteRType(req, res, conn))
writeEditRTypePage(req, res);
} else {
writeEditRTypePage(req, res);
}
}
/** Displays the "New Category" page. When the "Save" button is clicked, the
* form executes its action and the program is navigated to the createCtg function.
* Some checks are made in the writeScript function, see below.
* The page consists of two tables, one upper which contains "Category - new"
* and one that contains the textfields and buttons.
* The hidden operator, oper, is not really used in this method, but the writeScript
* is used for both writeNewCTGPage and writeEditCTGPage and must therefore be declared.
*/
private void writeNewRTypePage(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
HttpSession session = req.getSession(true);
Connection conn = (Connection) session.getValue("conn");
Statement stmt = null;
ResultSet rset = null;
res.setContentType("text/html");
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
String fgid, oper, newQS, suid, pid;
pid = "NULL";
int currentPrivs[];
currentPrivs = (int [])session.getAttribute("PRIVILEGES");
/* When the client makes a GET request to the server a HTML form is created and the
hidden fields contain the name submitted for that GET request plus hidden fields
containing each of the names submitted by each previous GET request.*/
try {
conn = (Connection) session.getValue("conn");
out.println("<html>");
out.println("<head>");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("<base target=\"content\">");
writeScript(out);
out.println("<title>New Result Type</title>");
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\">Result Type - New</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("viewRType/createRType") + "\">");
out.println("<br><br>");
out.println("<table border=0>");
//Name
out.println("<tr><td>");
out.println("Result Type Name:");
out.println("</label><br></font><input type=text name=RT_name>");
out.println("</td>");
//some distance between the text fields
out.println("<td> </td>");
//Comment
out.println("<td>");
out.println("Comment:");
out.println("</label><br></font><input type=text name=RT_comm>");
out.println("</td></tr>");
//the back button
out.println("<tr><td>");
out.println("<input type=button value=Back width=100 " +
"style=\"WIDTH: 100px\" onClick='document.location.href=\"" +
getServletPath("viewRes?&RETURNING=YES") + "\"'>");
out.println(" ");
out.println("<input type=button value=Save width=100 " +
"style=\"WIDTH: 100px\" onClick='valForm()'>");
out.println("</td></tr></table>");
out.println("<input type=hidden name=oper value=\"\">");
out.println("<input type=hidden name=RETURNING value=YES>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
try {
if (stmt != null) stmt.close();
if (rset != null) rset.close();
} catch (SQLException ignored) {}
}
}
/** Displayes the Edit Category page and when the "save changes" is clicked,
* the writeNew function is called (by getServletPath...) which calls the
* UpdateCTG (because the oper=UPDATE) followed by the writeNewCTGPage.
*/
private void writeEditRTypePage(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
HttpSession session = req.getSession(true);
Connection conn = (Connection) session.getValue("conn");
Statement stmt = null;
ResultSet rset = null;
res.setContentType("text/html");
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
String oper, RT_name, tname, tcomm; //item
RT_name = null;
tname = "*";
tcomm = "*";
int currentPrivs[];
currentPrivs = (int [])session.getAttribute("PRIVILEGES");
/* When the client makes a GET request to the server a HTML form is created and the
hidden fields contain the name submitted for that GET request plus hidden fields
containing each of the names submitted by each previous GET request.*/
try {
conn = (Connection) session.getValue("conn");
oper = req.getParameter("oper");
System.err.println("OPER: " + oper);
RT_name = req.getParameter("NAME");
out.println("<html>");
out.println("<head>");
HTMLWriter.css(out,getURL("style/axDefault.css"));
out.println("<base target=\"content\">");
writeEditScript(out);
out.println("<title>Edit RType</title>");
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\">Result Type - 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("viewRType/writeNew") + "\">");
out.println("<br><br>");
out.println("<table border=0>");
out.println("<td><font face=arial,geneva,helvetica size=1>Choose the result type that you want to edit: ");
out.println("</td>");
out.println("<tr><td>Result Type name<br>");
out.println("<SELECT name=NAME WIDTH=150 height=25 " +
"style=\"HEIGHT: 25px; WIDTH: 150px\" " +
"onChange='selChanged()'>");
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT RTID, NAME, COMM FROM RTYPE" +
" ORDER BY NAME");
out.println("<OPTION value=no_value>*</option>");
while (rset.next()) {
if (RT_name != null && RT_name.equalsIgnoreCase(rset.getString("RTID")))
out.println("<OPTION selected value=\"" + rset.getString("RTID") + "\">" +
rset.getString("NAME"));
else
out.println("<OPTION value=\"" + rset.getString("RTID") + "\">" +
rset.getString("NAME"));
}
out.println("</td></tr>");
out.println("</select> </table>");
rset.close();
stmt.close();
if(RT_name!=null)
if(!RT_name.equalsIgnoreCase("no_value")){
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT NAME, COMM FROM RTYPE WHERE " +
"RTID=" + RT_name + " ");
if (rset.next()) {
tname = rset.getString("NAME");
tcomm = rset.getString("COMM");
System.err.println("tname: ++++" + tname);
System.err.println("tcomm: ++++" + tcomm);
}
}
if (tcomm == null) tcomm = new String("");
String RTcomm = retrieveSymbol(tcomm);
if(RTcomm==null)
RTcomm="*";
out.println("<table><tr><td>");
out.println("Edit Result Type name:");
out.println("</label><br></font><input type=text name=RT_name value='" + tname + "'");
out.println("</td>");
out.println("<td> </td>");
out.println("<td COLSPAN=1>Edit Comment<br>");
out.println("<textarea rows=1 cols=30 name=RT_comm value=>"+RTcomm+"</textarea>");
out.println("</td></tr>");
out.println("</td></tr><br><br><br></table>");
out.println("<tr><td>");
out.println("<table border=0 cellpading=0 cellspacing=0 width=300>");
out.println("<tr><td width=200> </td><td width=200> </td><td width=200> </td><td width=200> </td></tr>" +
"<tr><td colspan=4 align=center>" +
"<input type=button style=\"WIDTH: 100px\" value=\"Back\" onClick='location.href=\""
+getServletPath("viewRes?&RETURNING=YES") + "\"'> "+
"<input type=reset value=Reset style=\"WIDTH: 100px\"> "+
"<input type=button id=DELETE name=DELETE value=Delete style=\"WIDTH: 100px\" onClick='valForm(\"DELETE\")'> "+
"<input type=button id=UPDATE name=UPDATE value=Update style=\"WIDTH: 100px\" onClick='valForm(\"UPDATE\")'> ");
out.println("</td></tr>");
out.println("</table></td></tr>");//end of button table
out.println("<input type=hidden name=oper value=\"\">");
out.println("<input type=hidden name=RETURNING value=YES>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
try {
if (stmt != null) stmt.close();
if (rset != null) rset.close();
} catch (SQLException ignored) {}
}
}
private void writeEditScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println(" ");
out.println("function selChanged() {");
out.println(" document.forms[0].submit();");
out.println("}");
out.println("function valForm(action) {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" if ('DELETE' == action.toUpperCase()) {");
out.println(" if ( (\"\" + document.forms[0].RT_name.value) == '*' || (\"\" + document.forms[0].RT_name.value) == \"\") {");
out.println(" alert('You must give a Result Type name!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" else if (confirm('Are you sure you want to delete the Result Type?')) {");
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 ( (\"\" + document.forms[0].RT_name.value) == '*' || (\"\" + document.forms[0].RT_name.value) == \"\") {");
out.println(" alert('You must give a Result Type name!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" else if ( (\"\" + document.forms[0].RT_comm.value) != \"\") {");
out.println(" if (document.forms[0].RT_comm.value.length > 256) {");
out.println(" alert('The comment must be less than 256 characters!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" }");
out.println(" else if ( (\"\" + document.forms[0].RT_name.value) != \"\") {");
out.println(" if (document.forms[0].RT_name.value.length > 38) {");
out.println(" alert('The Result type name must be less than 38 characters!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" }");
out.println(" if (rc == 1) {");
out.println(" if (confirm('Are you sure you want to update the Result Type?')) {");
out.println(" document.forms[0].oper.value='UPDATE';");
out.println(" rc = 0;");
out.println(" }");
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>");
}
/** valForm makes some checks on the comment and name parameters.
* selChanged submits the form.
*/
private void writeScript(PrintWriter out) {
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println(" ");
out.println("function selChanged() {");
out.println(" document.forms[0].submit();");
out.println("}");
out.println("function valForm() {");
out.println(" ");
out.println(" var rc = 1;");
out.println(" if ( (\"\" + document.forms[0].RT_name.value) == \"\") {");
out.println(" alert('You must give a Result Type name!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" if (document.forms[0].RT_name.value.length > 38) {");
out.println(" alert('The Result Type name must be less than 38 characters!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" if ( (\"\" + document.forms[0].RT_comm.value) != \"\") {");
out.println(" if (document.forms[0].RT_comm.value.length > 256) {");
out.println(" alert('The comment must be less than 256 characters!');");
out.println(" rc = 0;");
out.println(" }");
out.println(" }");
out.println(" ");
out.println(" ");
out.println(" if (rc) {");
out.println(" if (confirm('Are you sure that you want to save this Result Type?')) {");
out.println(" document.forms[0].oper.value = 'UPDATE'");
out.println(" document.forms[0].submit();");
out.println(" }");
out.println(" }");
out.println(" ");
out.println(" ");
out.println("}");
out.println("//-->");
out.println("</script>");
}
private boolean createRType(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
System.err.println("ViewRType_CREATE_RType");
boolean isOk = true;
String errMessage = null;
Connection connection = null;
HttpSession session = request.getSession(true);
connection = (Connection) session.getValue("conn");
try {
connection.setAutoCommit(false);
int id;
int RTid;
String name = null, comm = null;
id = Integer.parseInt((String) session.getValue("UserID"));
name = request.getParameter("RT_name");
comm = request.getParameter("RT_comm");
DbRType dbRType = new DbRType();
dbRType.CreateRType(connection, name, comm, id);
errMessage = dbRType.getErrorMessage();
} catch (SQLException sqle){
try{
if(sqle.getMessage()=="Comment")
writeErrorPage(request, response, "RType.New",
Errors.keyValue("RType.New.Comment.Error.Msg"), "viewRType/new" );
if(sqle.getMessage()=="RT_name")
writeErrorPage(request, response, "RType.New",
Errors.keyValue("RType.New.Name.Error.Msg"), "viewRType/new" );
isOk = false;
sqle.printStackTrace(System.err);
} catch (IOException ioe) {
ioe.printStackTrace(System.err);
}
}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,
"RType.New", errMessage,
"viewRes", isOk);
// if commit/rollback ok and database operation ok, write the frame
if (isOk)
writeNewRTypePage(request, response);
return isOk;
}
/**
* Calls the updateCTG in the DbCtg servlet. Reads the parametervalues from the screen.
*/
private boolean updateRType(HttpServletRequest request,
HttpServletResponse response,
Connection connection)
{
System.err.println("ViewRType_Update_RType");
boolean isOk = true;
String errMessage = null;
HttpSession session = request.getSession(true);
int id;
int RTid;
String name = null, comm = null;
try{
connection.setAutoCommit(false);
id = Integer.parseInt((String) session.getValue("UserID"));
RTid = Integer.parseInt((String) request.getParameter("NAME"));
name = request.getParameter("RT_name");
comm = request.getParameter("RT_comm");
DbRType dbRType = new DbRType();
dbRType.UpdateRType(connection, RTid, name, comm, id);
errMessage = dbRType.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,
"Rtype.New.Update", errMessage,
"viewRes", isOk);
return isOk;
}
private boolean deleteRType(HttpServletRequest request,
HttpServletResponse response,
Connection connection) throws IOException
{
String errMessage = null;
boolean isOk = true;
PrintWriter out = response.getWriter();
try
{
int RTid;
connection.setAutoCommit(false);
RTid = Integer.parseInt((String) request.getParameter("NAME"));
DbRType dbRType = new DbRType();
dbRType.DeleteRType(connection, RTid);
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
isOk = false;
e.printStackTrace(System.err);
HTMLWriter.writeErrorPage(out,"A result uses the result type, only \"empty\" result types can be deleted." , e.getMessage());
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
commitOrRollback(connection, request, response,
"Category.Edit.Delete", errMessage, "viewCTG",
isOk);
return isOk;
}
}