SDServlet.SDSessionServlet (Java2HTML)
package SDServlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*; import oracle.jdbc.driver.*; import javax.sql.*; import oracle.jdbc.pool.OracleDataSource;
import javax.naming.*;
import SRServlet.*;
public class SDSessionServlet extends HttpServlet {
public static String s_servletPath = null;
protected ServletContext m_context; protected Hashtable m_sessionCache; protected Authorization m_myauth;
String m_SURVEY_DATASOURCE = "jdbc/Loneifso817DS";
DataSource m_dataSource = null;
public void init(ServletConfig config) throws ServletException {
super.init(config);
m_context = config.getServletContext(); m_sessionCache = new Hashtable(10);
m_myauth = new Authorization(); }
public void service (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (this.s_servletPath == null) {
String l_servletPath = request.getRequestURI();
StringTokenizer st = new StringTokenizer(l_servletPath,"?");
s_servletPath = st.nextToken();
}
SDSession session = findValidSession (request);
String requestType = request.getParameter ("REQUEST_TYPE");
if (session != null && requestType == null) {
endSession (session);
response.setContentType("text/html");
PrintWriter out = new PrintWriter (response.getOutputStream());
Connection l_connection;
try {
InitialContext ic = new InitialContext();
m_dataSource = (DataSource)ic.lookup(m_SURVEY_DATASOURCE);
l_connection = m_dataSource.getConnection();
l_connection.setAutoCommit(false);
out.println(m_myauth.getLoginPage(l_connection, true));
l_connection.close();
} catch (SQLException se) {
System.out.println("SQL Error while connecting to the database : "+
se.toString());
} catch (NamingException ne) {
System.out.println("Naming exception Error while connecting to the database : "+
ne.toString());
} catch (Exception ne) {
System.out.println("Other Error while connecting to the database : "+
ne.toString());
}
out.close();
} else if (session == null ) {
if (requestType == null || (requestType != null && !requestType.equals("MAIN"))){
response.setContentType("text/html");
PrintWriter out = new PrintWriter (response.getOutputStream());
out.println("<html><body>");
out.println("<head><title>Login </title></head>");
Connection l_connection;
try {
InitialContext ic = new InitialContext();
m_dataSource = (DataSource)ic.lookup(m_SURVEY_DATASOURCE);
l_connection = m_dataSource.getConnection();
out.println(m_myauth.getLoginPage(l_connection, true));
l_connection.close();
} catch (SQLException se) {
System.out.println("SQL Error while connecting to the database : "+
se.toString());
} catch (NamingException ne) {
System.out.println("Naming exception Error while connecting to the database : "+
ne.toString());
} catch (Exception ne) {
System.out.println("Other Error while connecting to the database : "+
ne.toString());
}
out.close();
} else
DoAction (requestType, session, request, response);
} else
DoAction (requestType, session, request, response);
}
private SDSession findValidSession (HttpServletRequest request) {
Cookie c[] = request.getCookies();
SDSession session = null;
for (int i=0;(c!= null) && (i<c.length);i++) {
if (c[i].getName().equals("SDSessionServlet")) {
String userID = String.valueOf (c[i].getValue());
session = (SDSession) m_sessionCache.get(userID);
break;
}
}
return session;
}
private void DoAction (String action, SDSession session, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException{
response.setHeader ("Pragma", "no-cache");
boolean l_repeat = false;
if (action.equals("TOGGLE_USER")) {
String state = request.getParameter("USER_STATE");
if (state != null)
session.setUserFlag(!state.equals("CURRENTUSER"));
l_repeat = true;
action = session.getLastAction();
}
if (action.equals("MAIN")) {
try {
if (session == null) {
String userId = request.getParameter("USERID"); String userType = request.getParameter("USER_TYPE"); session = startNewSession(userId,userType,response);
}
session.setLastAction("MAIN");
SDUtil.returnMainPage(response,session);
} catch (SQLException ex) {
response.setContentType("text/html");
response.getOutputStream().println("<HTML><BODY>Error creating session");
response.getOutputStream().println("<P>"+ex.toString());
response.getOutputStream().println("</HTML></BODY>");
}
}
if ( action.equals ("SURVEY_MAIN") ) {
String nullMessage = null;
session.setLastAction("SURVEY_MAIN");
SDUtil.returnSurveysMain(nullMessage,response,session);
}
if ( action.equals ("QUESTION_MAIN") ) {
String nullMessage = null;
session.setLastAction("QUESTION_MAIN");
SDUtil.returnQuestionMain(nullMessage,response,session);
}
if (action.equals("CHOICEGROUP_MAIN")) {
String nullMessage = null;
session.setLastAction("CHOICEGROUP_MAIN");
SDUtil.returnChoiceGroupMain(nullMessage,response,session);
}
if (action.equals("WIZARD")) {
session.setLastAction("SURVEY_MAIN");
String whichElement = request.getParameter("ELEMENT");
String stepNo = request.getParameter("STEP");
if (stepNo.startsWith("NEW")) { if (whichElement.equals("SURVEY")) {
Survey s = new Survey();
session.pushElement(s);
s.wizardProcessing(1,session,request,response);
}
} else {
if (stepNo.startsWith("FINISH")) { SurveyElement s = (SurveyElement) session.popElement();
s.wizardFinish(session, request, response,false);
session.deleteFromStack();
} else { SurveyElement s = (SurveyElement) session.popElement();
s.wizardProcessing(Integer.parseInt(stepNo),session,request,response);
}
}
}
if (action.equals("CREATE_QSN_FOR_SURVEY")) {
Question q = new Question();
session.setSecondEditedObject(q);
q.setQsnForSurvey();
q.editElementHTML(session,request,response);
}
if (action.equals("EDIT")) {
String whichElement = request.getParameter("ELEMENT");
if (whichElement.equals("SURVEY")) {
session.setLastAction("SURVEY_MAIN");
int elementID = -1;
if (request.getParameter("ELEMENTID") != null
&& !request.getParameter("ELEMENTID").equals("NEW"))
elementID = Integer.parseInt(request.getParameter("ELEMENTID"));
Survey s = null;
s = new Survey(elementID);
session.setEditedObject(s);
s.editElementHTML(session,request,response);
}
if (whichElement.equals("QUESTION")) {
session.setLastAction("QUESTION_MAIN");
int elementID = -1;
if (request.getParameter("ELEMENTID") != null
&& !request.getParameter("ELEMENTID").equals("NEW"))
elementID = Integer.parseInt(request.getParameter("ELEMENTID"));
Question q = null;
if (elementID == -1)
q = new Question();
else
q = new Question(elementID);
session.setEditedObject(q);
q.editElementHTML(session,request,response);
}
if (whichElement.equals("CHOICE")) {
Choices newCh = new Choices();
session.setEditedObject(newCh);
newCh.editElementHTML(session,request,response);
}
if (whichElement.equals("CHOICEGROUP")) {
session.setLastAction("CHOICEGROUP_MAIN");
int elementID = -1;
if (request.getParameter("ELEMENTID") != null
&& !request.getParameter("ELEMENTID").equals("NEW"))
elementID = Integer.parseInt(request.getParameter("ELEMENTID"));
ChoiceGroup cg = null;
if (elementID == -1)
cg = new ChoiceGroup();
else
cg = new ChoiceGroup(elementID);
session.setEditedObject(cg);
cg.editElementHTML(session,request,response);
}
}
if (action.equals("SAVE")) {
SurveyElementEdit s = (SurveyElementEdit) session.getEditedObject();
s.saveEditedChanges(session, request, response);
}
if (action.equals("SAVE_QSN_FOR_SURVEY")) {
SurveyElementEdit s = (SurveyElementEdit) session.getSecondEditedObject();
s.saveEditedChanges(session, request, response);
}
if (action.equals("DELETE")) {
SurveyElementEdit s = (SurveyElementEdit) session.getEditedObject();
s.deleteElement(session, request, response);
}
if (action.equals("MODIFY_SURVEY_CONTENTS")) {
String elementName = session.getEditedObject().getClass().getName();
Survey s = (Survey) session.getEditedObject();
s.maintainQuestionsPage(session, request, response);
}
if (action.equals("SAVE_SURVEY_CONENTS")) {
String elementName = session.getEditedObject().getClass().getName();
Survey s = (Survey) session.getEditedObject();
s.saveSurveyContents(session, request, response);
}
if (action.equals("PREVIEW_SURVEY")) {
Survey s = (Survey) session.popElement();
try {
session.getConnection().setAutoCommit(false);
s.wizardFinish(session, request, response,true);
StringBuffer l_buffer =
SRSessionServlet.getSurveyHTML(session.getConnection(),Long.parseLong(s.m_surveyID));
response.setContentType("text/html");
response.getOutputStream().println(new String(l_buffer));
response.getOutputStream().println(SRSessionServlet.ValidationJavaScript());
session.getConnection().rollback();
session.getConnection().setAutoCommit(true);
} catch (SQLException ex) {
response.setContentType("text/ascii");
response.getOutputStream().println("Error in generating Survey form for preview "+ex.toString());
}
}
if ( action.equals ("PREGENERATION_MAIN") ) {
String nullMessage = null;
session.setLastAction("SURVEY_MAIN");
PreGeneration.preGenerationMain(request, response, session);
}
if ( action.equals ("PREGENERATE_CLOB") ) {
String nullMessage = null;
session.setLastAction("SURVEY_MAIN");
PreGeneration.generateCLOB(request, response, session);
}
if ( action.equals ("REGENERATE_CLOB") ) {
String nullMessage = null;
session.setLastAction("SURVEY_MAIN");
PreGeneration.generateCLOB(request, response, session);
}
if ( action.equals ("TOGGLE_CLOB") ) {
String nullMessage = null;
session.setLastAction("SURVEY_MAIN");
PreGeneration.toggleUsage(request, response, session);
}
else if ( action.equals ("Logout") ) {
if ( session != null ) {
endSession (session);
}
response.setContentType("text/html");
PrintWriter out = new PrintWriter (response.getOutputStream());
Connection l_connection;
try {
InitialContext ic = new InitialContext();
m_dataSource = (DataSource)ic.lookup(m_SURVEY_DATASOURCE);
l_connection = m_dataSource.getConnection();
out.println(m_myauth.getLoginPage(l_connection, true));
l_connection.close();
out.close();
} catch (SQLException se) {
System.out.println("SQL Error while connecting to the database : "+
se.toString());
} catch (NamingException ne) {
System.out.println("Naming exception Error while connecting to the database : "+
ne.toString());
} catch (Exception ne) {
System.out.println("Other Error while connecting to the database : "+
ne.toString());
}
}
}
protected SDSession startNewSession (String userId, String userType, HttpServletResponse response )
throws IOException, SQLException {
SDSession session = null;
Connection dbConnection = null;
try {
InitialContext ic = new InitialContext();
m_dataSource = (DataSource)ic.lookup(m_SURVEY_DATASOURCE);
dbConnection = m_dataSource.getConnection();
dbConnection.setAutoCommit(false);
} catch (SQLException se) {
System.out.println("SQL Error while connecting to the database : "+
se.toString());
} catch (NamingException ne) {
System.out.println("Naming exception Error while connecting to the database : "+
ne.toString());
} catch (Exception ne) {
System.out.println("Other Error while connecting to the database : "+
ne.toString());
}
if (userType.equals("NEWUSER")) {
Statement l_stmt = dbConnection.createStatement();
l_stmt.execute("insert into survey_users values ('"+userId+"', SYSDATE)");
l_stmt.close();
}
session = new SDSession (userId, dbConnection);
Cookie c = new Cookie("SDSessionServlet", String.valueOf (session.getUserId()));
m_sessionCache.put (c.getValue(), session);
c.setPath ("/");
response.addCookie(c);
return session;
}
protected void endSession (SDSession session) {
try {
session.getConnection().close();
synchronized (m_sessionCache) {
m_sessionCache.remove (session.getUserId());
}
} catch (SQLException ex) {
}
}
public String getServletInfo() {
return "SDSessionServlet Information";
}
}
|