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.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.nemesis.forum.Forum;
import org.nemesis.forum.ForumFactory;
import org.nemesis.forum.ProfileManager;
import org.nemesis.forum.util.SecurityTools;
import org.nemesis.forum.webapp.admin.Config;
import org.nemesis.forum.webapp.admin.bean.ForumBean;
public class ListForumAction extends BaseAction {
static protected Log log = LogFactory.getLog(ListForumAction.class);
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//check logon
checkUser(request);
//check permission
checkPermission(request, OperationConstants.LIST_FORUM);
ActionMessages messages = new ActionMessages();
try {
int maxIndexPages = Config.forumListPagerMaxIndexPages;
int maxPageItems = Config.forumListPagerMaxPageItems;
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));
ProfileManager manager = forumFactory.getProfileManager();
Iterator forumIterator = null;
if (request.getParameter("query") != null) {
// ::TODO::search, not very nice
String query = request.getParameter("query");
forumIterator =forumFactory.forumsModeration();
List tempListe = new ArrayList();
Forum forumTemp = null;
int c = 0;
while (forumIterator.hasNext()) {
forumTemp = (Forum) forumIterator.next();
if (forumTemp.getName().toLowerCase().indexOf(query.toLowerCase()) > -1
|| forumTemp.getDescription().toLowerCase().indexOf(query.toLowerCase()) > -1
) {
//match
if(c >= start && c<(start+maxPageItems)){
tempListe.add(forumTemp);
}
c++;
}
}
forumIterator = tempListe.iterator();
request.setAttribute("nbItems", new Integer(c));
request.setAttribute("query", query);
} else {
forumIterator = forumFactory.forumsModeration();
List tempListe = new ArrayList();
Forum forumTemp = null;
int c = 0;
while (forumIterator.hasNext()) {
forumTemp = (Forum) forumIterator.next();
//match
if(c >= start && c<(start+maxPageItems)){
tempListe.add(forumTemp);
}
c++;
}
forumIterator = tempListe.iterator();
request.setAttribute("nbItems", new Integer(c));
}
//populate
String temp = null;
ForumBean ub = null;
Forum forum = null;
while (forumIterator.hasNext()) {
forum = (Forum) forumIterator.next();
ub = new ForumBean();
ub.setId(forum.getID());
ub.setName(forum.getName());
ub.setDescription(forum.getDescription());
ub.setMessages(forum.getMessageCount());
ub.setThreads(forum.getThreadCount());
ub.setModerationType(forum.getModerationType());
ub.setAdmin(SecurityTools.isSystemAdmin(getAuthToken(request)) || SecurityTools.isForumAdmin(getAuthToken(request),forum));
//not necessary
/*for(Enumeration enum =user.propertyNames(); enum.hasMoreElements();){
temp=(String)enum.nextElement();
ub.setValue(temp,user.getProperty(temp));
}*/
v.add(ub);
}
request.setAttribute("forums", v);
request.setAttribute("isSystemAdmin",new Boolean(SecurityTools.isSystemAdmin(getAuthToken(request))));
request.setAttribute("isForumAdmin",new Boolean(SecurityTools.isForumAdmin(getAuthToken(request))));
} catch (Exception e) {
String eid = this.getClass().getName() + "_" + System.currentTimeMillis();
log.error("eid:" + eid + "\nsessionID" + request.getSession().getId(), e);
messages.add("general", new ActionMessage("error.general", "error id:" + eid));
}
if (!messages.isEmpty()) {
saveMessages(request, messages);
}
return mapping.findForward("view");
}
}