package com.transmem.action; import java.util.logging.Logger; import javax.servlet.ServletException; 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.data.db.Roles; import com.transmem.data.db.Projects; /** * Action class for redirection to either page projects.jsp or articles.jsp. * * @version 0.1 * @author Ted Wen * @date May. 2007 */ public class LinkAction extends BaseAction { private Logger log_ = Logger.getLogger(LinkAction.class.getName()); public LinkAction() { super(); } public void execute(ServletParams param) throws ServletException, IOException { log_.entering("TranslateAction","execute"); Session session = param.getSession(); Users usr = session.getUser(); if (usr == null) { param.sendError(MessageCode.ERR_NOT_LOGIN); return; } String page = param.getParameter("arg1"); if (page == null) { log_.warning("param.getParameter('arg1') returned null"); param.sendError(MessageCode.ERR_INVALID_LINKPAGE); return; } if (page.equals("projects")) { if (session.getProjectList()==null) { loadProjects(usr, session, param); if (session.getProjectList()==null) { log_.warning("Jump to projects page before projects loaded"); param.sendError(MessageCode.ERR_INVALID_LINKPAGE); return; } } setNextPage(PageLinks.PROJECT_PAGE); } else if (page.equals("articles")) { if (session.getArticleList()==null) { log_.warning("Jump to articles page before articles loaded"); param.sendError(MessageCode.ERR_INVALID_LINKPAGE); return; } setNextPage(PageLinks.ARTICLE_PAGE); } else { log_.warning("Not supported link page: "+page); param.sendError(MessageCode.ERR_INVALID_LINKPAGE); return; } } protected void loadProjects(Users usr, Session session, ServletParams param) throws ServletException, IOException { log_.info("enter loadProjects"); Connection conn = null; try { conn = getConnection(param,Databases.CATEGORY_USER); 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"); Roles r = new Roles(conn, usr.getRole()); usr.setConnection(conn); int numprjs = usr.countProjects(usr.getUserID()); if (numprjs >= r.getLevel()) { session.setEnoughProjects(); } else { session.removeEnoughProjects(); } } catch (SQLException x) { log_.severe("SQLException when getConnection(USER)"+x); param.sendError(MessageCode.ERR_DB_CONNECT); } finally { if (conn != null) try { conn.close(); } catch (SQLException e) {} } } }