package org.nemesis.forum.webapp.admin.action;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.nemesis.forum.Forum;
import org.nemesis.forum.ForumFactory;
import org.nemesis.forum.ForumThread;
import org.nemesis.forum.Message;
import org.nemesis.forum.User;
import org.nemesis.forum.exception.UnauthorizedException;
import org.nemesis.forum.webapp.admin.Config;
import org.nemesis.forum.webapp.admin.bean.ForumBean;
import org.nemesis.forum.webapp.admin.bean.MessageBean;
import org.nemesis.forum.webapp.admin.bean.ThreadBean;
import org.nemesis.forum.webapp.admin.bean.UserBean;
public class ListForumContentAction extends BaseAction {
static protected Log log = LogFactory.getLog(ListForumContentAction.class);
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//check logon
checkUser(request);
ActionErrors errors = new ActionErrors();
try {
int maxIndexPages=Config.forumThreadsListPagerMaxIndexPages;
int maxPageItems=Config.forumThreadsListPagerMaxPageItems;
request.setAttribute("maxIndexPages",new Integer(maxIndexPages));
request.setAttribute("maxPageItems",new Integer(maxPageItems));
int start=0;
try {
start = Integer.parseInt(request.getParameter("pager.offset"));
} catch (Exception e) {
/*ignore*/
}
List v = new Vector();
ForumFactory forumFactory = ForumFactory.getInstance(getAuthToken(request));
Forum forum = forumFactory.getForum(Integer.parseInt(request.getParameter("id")));
//check permission
checkPermission(request, OperationConstants.LIST_FORUM_CONTENT, forum);
ForumBean fb = new ForumBean();
fb.setId(forum.getID());
fb.setName(forum.getName());
fb.setNotApprovedMessages(forum.getMessageCount(false));
fb.setNotApprovedThreads(forum.getThreadCount(false));
fb.setThreads(forum.getThreadCount());
fb.setMessages(forum.getMessageCount());
request.setAttribute("fb", fb);
request.setAttribute("nbItems",new Integer(forum.getThreadCount()));
List tbs = new ArrayList();
Iterator threadIterator = forum.threads(start,maxPageItems); //start,range
ThreadBean tb = null;
while (threadIterator.hasNext()) {
ForumThread currentThread = (ForumThread) threadIterator.next();
tb = new ThreadBean();
tb.setId(currentThread.getID());
tb.setForumID(forum.getID());
tb.setCreationDate(currentThread.getCreationDate());
tb.setModifiedDate(currentThread.getModifiedDate());
tb.setApproved(currentThread.isApproved());
tb.setNotApprovedMessages(currentThread.getMessageCount(false));
tb.setReplies(currentThread.getMessageCount() - 1);
tb.setTopic(currentThread.getName());
Message rootMessage = currentThread.getRootMessage();
MessageBean mb = new MessageBean();
mb.setAnonymous(rootMessage.isAnonymous());
UserBean ub = new UserBean();
if(!rootMessage.isAnonymous()){
User rootMessageUser = rootMessage.getUser();
ub.setId(rootMessageUser.getID());
ub.setUserName(rootMessageUser.getUsername());
ub.setName(rootMessageUser.getName());
ub.setEmail(rootMessageUser.getEmail());
}else{
//:NOTE: we suppose in front application : name & email message property for anonymous user
ub.setUserName(rootMessage.getProperty("name"));
ub.setEmail(rootMessage.getProperty("email"));
}
mb.setAuthor(ub);
tb.setRootMessage(mb);
tbs.add(tb);
}
request.setAttribute("tbs", tbs);
request.setAttribute("formatDatePattern", getResources(request).getMessage(getLocale(request),"dateformat"));
} catch (UnauthorizedException ue) {
errors.add("general", new ActionError("listForumContent.unauthorized"));
} catch (Exception e) {
String eid = this.getClass().getName() + "_" + System.currentTimeMillis();
log.error("eid:" + eid + "\nsessionID" + request.getSession().getId(), e);
errors.add("general", new ActionMessage("error.general", "error id:" + eid));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
return mapping.findForward("cancel");
}
return mapping.findForward("view");
}
}