package com.transmem.action;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Connection;
import java.util.ArrayList;
import com.transmem.data.db.Databases;
import com.transmem.data.db.Users;
import com.transmem.utils.Security;
/**
* Action class for user registration.
* Note: the error strings are defined as codes that JSP pages can interprete
* into a language-specific string according to user locale. It can be done
* with a resource bundle.
*
* @version 0.1
* @author Ted Wen
* @date Jan. 2007
*/
public class RegisterAction extends BaseAction
{
private Logger log_ = Logger.getLogger(RegisterAction.class.getName());
public static final String REGISTER_ERROR_NOUSERNAME = "RE_NONAME";
public static final String REGISTER_ERROR_NOPASSWORD = "RE_NOPASS";
public static final String REGISTER_ERROR_NOEMAIL = "RE_NOEMAIL";
public static final String REGISTER_ERROR_NOQUESTION = "RE_NOQUESTION";
public static final String REGISTER_ERROR_NOANSWER = "RE_NOANSWER";
public static final String REGISTER_ERROR_SAVEFAILURE = "RE_SAVEFAILURE";
public RegisterAction()
{
super();
}
public void execute(ServletParams param) throws ServletException, IOException
{
log_.entering("RegisterAction","execute");
//check for submitted register
Session session = param.getSession();
//check whether from the home page, TODO: use image to login?
String subreg = param.getParameter("subreg");
log_.info("param.getParameter('subreg') returned "+subreg);
if (subreg != null && subreg.equals("20020208"))
{
Connection conn = null;
try
{
conn = getConnection(param,Databases.CATEGORY_USER,true);
}
catch (SQLException ex)
{
log_.severe("error getConnection(USER)."+ex);
param.sendError(MessageCode.ERR_DB_CONNECT);
return;
}
Users usr = new Users(conn);
boolean nextPageSet = false;
session.setTempUser(usr);
String usrname = param.getParameter("username");
if (usrname == null || usrname.equals(""))
{
log_.warning("param.getParameter('username') returned null or empty");
session.setAttribute("tuser_error", REGISTER_ERROR_NOUSERNAME);
}
else
{
usr.setUsername(usrname);
String passwd = param.getParameter("password");
if (passwd == null || passwd.equals(""))
{
log_.warning("param.getParameter('password') returned null or empty");
session.setAttribute("tuser_error", REGISTER_ERROR_NOPASSWORD);
}
else
{
String passmd5 = Security.md5(passwd);
usr.setPassword(passmd5);
String email = param.getParameter("email");
if (email == null || email.equals(""))
{
log_.warning("param.getParameter('email') returned null or empty");
session.setAttribute("tuser_error", REGISTER_ERROR_NOEMAIL);
}
else
{
usr.setEmail(email);
String question = param.getParameter("question");
if (question == null || question.equals(""))
{
log_.warning("param.getParameter('question') returned null or empty");
session.setAttribute("tuser_error", REGISTER_ERROR_NOQUESTION);
}
else
{
usr.setQuestion(question);
String answer = param.getParameter("answer");
if (answer == null || answer.equals(""))
{
log_.warning("param.getParameter('answer') returned null or empty");
session.setAttribute("tuser_error", REGISTER_ERROR_NOANSWER);
}
else
{
usr.setAnswer(answer);
//TODO: add other options to save
String realname = param.getParameter("realname");
if (realname == null || realname.equals("")) realname = usr.getUsername();
usr.setRealname(realname);
String sex = param.getParameter("sex");
usr.setSex(sex);
String mobile = param.getParameter("mobile");
if (mobile != null && mobile.length()>0) usr.setMobile(mobile);
String idtype = param.getParameter("idtype");
if (idtype != null) usr.setIdType(idtype);
String idnumber = param.getParameter("idnumber");
if (idnumber != null && idnumber.length()>0) usr.setIdNumber(idnumber);
String member = param.getParameter("member");
if (member != null) usr.setMembership(member);
try
{
usr.setUserID(getSequenceInt(conn,"S_Users"));
usr.insert();
session.removeAttribute("tuser_error");
session.removeAttribute("subreg");
session.removeTempUser();
session.removeTempUser();
session.setUser(usr);
setNextPage(PageLinks.PERSONAL_PAGE);
// Increment online user count
ServletContext ctx = session.getServletContext();
Integer uc = (Integer)ctx.getAttribute("UserCount");
if (uc == null)
{
uc = new Integer(1);
}
else
{
int usercount = uc.intValue() + 1;
uc = new Integer(usercount);
}
ctx.setAttribute("UserCount", uc); //assuming ServletContext is thread-safe
log_.info("UserCount = "+uc);
//load projects for this user and store in session heap
/* Projects prjs = new Projects(conn);
ArrayList<Projects> projects = prjs.queryProjectsByMember(usr.getUserID());
session.setProjectList(projects);
log_.info(projects.size()+" projects loaded and saved in session");
*/
nextPageSet = true;
}
catch (SQLException e)
{
log_.severe("Insert Users failed, SQLException:"+e);
session.setAttribute("tuser_error", REGISTER_ERROR_SAVEFAILURE);
}
finally
{
if (conn != null)
try { conn.close(); } catch (SQLException x) {}
}
} // answer
} //question
} //email
} //passwd
} //username
if (!nextPageSet)
{
//TODO: show error message here
setNextPage(PageLinks.REGISTER_PAGE);
}
}
else
{
log_.severe("param.getParameter('subreg') not return correct value");
setNextPage(PageLinks.REGISTER_PAGE);
}
log_.exiting("RegisterAction","execute");
}
}