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.Projects;
import com.transmem.data.db.Articles;
import com.transmem.data.db.Users;
import com.transmem.data.db.Roles;
/**
* Action class for removing a selected article.
*
* @version 0.1
* @author Ted Wen
* @date Jan. 2007
*/
public class DeleteArticleAction extends BaseAction
{
private Logger log_ = Logger.getLogger(DeleteArticleAction.class.getName());
public DeleteArticleAction()
{
super();
}
public void execute(ServletParams param) throws ServletException, IOException
{
log_.entering("DeleteArticleAction","execute");
Session session = param.getSession();
Users usr = session.getUser();
if (usr == null) {
param.sendError(MessageCode.ERR_NOT_LOGIN);
return;
}
String said = param.getParameter("article");
if (said == null || said.length()<1) {
log_.severe("parameter article is null or empty");
param.sendError(MessageCode.ERR_NULL_PARAM);
return;
}
int aid = 0;
try
{
aid = Integer.parseInt(said);
}
catch (NumberFormatException e)
{
log_.severe("parameter article is not number: "+said);
param.sendError(MessageCode.ERR_PARAM_FORMAT);
return;
}
Projects project = session.getSelectedProject();
if (project == null)
{
param.sendError(MessageCode.ERR_NO_PROJECT);
return;
}
Connection conn = null;
try
{
conn = getConnection(param,Databases.CATEGORY_USER,true);
conn.setAutoCommit(false);
Articles article = new Articles(conn);
try
{
article.delete(aid);
//update number of articles in project
project.clearUpdates();
project.setArticles(project.getArticles()-1);
project.update(conn);
conn.commit();
}
catch (SQLException e)
{
log_.severe("DeleteArticleAction.execute(): failed to delete article "+aid);
param.sendError(MessageCode.ERR_DELETE_ARTICLE);
return;
}
int pid = project.getProjectID();
ArrayList<Articles> articles = article.queryByProject(pid);
session.setArticleList(articles);
Roles roles = new Roles(conn, usr.getRole());
if (articles.size() < roles.getLevel())
{
session.removeEnoughArticles();
}
setNextPage(PageLinks.ARTICLE_PAGE);
log_.info("DeleteArticleAction.execute(),article "+aid+" deleted and reload "+articles.size()+" articles");
}
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) {}
}
}
}