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;
import com.transmem.data.db.Articles;
/**
* Action class for openning a project to see a list of articles.
*
* @version 0.1
* @author Ted Wen
* @date Jan. 2007
*/
public class OpenProjectAction extends BaseAction
{
private Logger log_ = Logger.getLogger(OpenProjectAction.class.getName());
public OpenProjectAction()
{
super();
}
/**
* Open a selected project and list all articles on articles page.
*
*/
public void execute(ServletParams param) throws ServletException, IOException
{
log_.entering("OpenProjectAction","execute");
Session session = param.getSession();
Users usr = session.getUser();
if (usr == null) {
log_.severe("session.getAttribute('user') returned null");
param.sendError(MessageCode.ERR_NOT_LOGIN);
return;
}
Connection conn = null;
try
{
conn = getConnection(param, Databases.CATEGORY_USER);
int project = Integer.parseInt(param.getParameter("project")); //save as Integer.toString()
Articles ar = new Articles(conn);
ArrayList<Articles> articles = ar.queryByProject(project);
session.setArticleList(articles);
session.setSelectedProject(getProjectById(session,project));
setNextPage(PageLinks.ARTICLE_PAGE);
log_.info("OpenProjectAction.execute successful,"+articles.size()+" articles loaded for project "+project);
Roles r = new Roles(conn, usr.getRole());
int numarts = articles.size();
if (numarts >= r.getLevel())
{
log_.info("enough articles in this project");
session.setEnoughArticles();
}
else
{
log_.info("not enough articles in this project");
session.removeEnoughArticles();
}
}
catch (SQLException e)
{
log_.warning("OpenProjectAction.execute: Article.queryArticlesByProject thrown exception: "+e.toString());
//throw or what?
param.sendError(MessageCode.ERR_DB_CONNECT);
}
catch (NumberFormatException x)
{
log_.severe("OpenProjectAction.execute: Error converting getAttribute('project') into int");
param.sendError(MessageCode.ERR_PARAM_FORMAT);
}
finally
{
try { conn.close(); } catch (SQLException e) {}
}
log_.exiting("OpenProjectAction","execute");
}
/**
* Find the project by its ID.
* @param session
* @param pid - selected project id
* @return Projects object found or null
*/
protected Projects getProjectById(Session session, int pid)
{
ArrayList<Projects> projects = session.getProjectList();
for (Projects p : projects)
{
if (p.getProjectID() == pid)
{
return p;
}
}
return null;
}
}