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.ForumFactory;
import org.nemesis.forum.ProfileManager;
import org.nemesis.forum.User;
import org.nemesis.forum.webapp.admin.Config;
import org.nemesis.forum.webapp.admin.bean.UserBean;
public class ListUserAction extends BaseAction {
static protected Log log = LogFactory.getLog(ListUserAction.class);
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//check logon
checkUser(request);
//check permission
checkPermission(request, OperationConstants.LIST_USER);
ActionMessages messages = new ActionMessages();
try {
int maxIndexPages = Config.userListPagerMaxIndexPages;
int maxPageItems = Config.userListPagerMaxPageItems;
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 userIterator = null;
if (request.getParameter("query") != null) {
//::TODO::search, not very nice
String query = request.getParameter("query");
userIterator = manager.users();
List tempListe = new ArrayList();
User userTemp = null;
int c = 0;
while (userIterator.hasNext()) {
userTemp = (User) userIterator.next();
if (userTemp.getName().toLowerCase().indexOf(query.toLowerCase()) > -1
|| userTemp.getUsername().toLowerCase().indexOf(query.toLowerCase()) > -1
|| userTemp.getEmail().toLowerCase().indexOf(query.toLowerCase()) > -1) {
//match
if(c >= start && c<(start+maxPageItems)){
tempListe.add(userTemp);
}
c++;
}
}
userIterator = tempListe.iterator();
request.setAttribute("nbItems", new Integer(c));
request.setAttribute("query", query);
} else {
userIterator = manager.users(start, maxPageItems);
request.setAttribute("nbItems", new Integer(manager.getUserCount()));
}
//populate
String temp = null;
UserBean ub = null;
User user = null;
while (userIterator.hasNext()) {
user = (User) userIterator.next();
ub = new UserBean();
ub.setId(user.getID());
ub.setName(user.getName());
ub.setUserName(user.getUsername());
ub.setNameVisible(user.isNameVisible());
ub.setEmail(user.getEmail());
ub.setEmailVisible(user.isEmailVisible());
//not necessary
/*for(Enumeration enum =user.propertyNames(); enum.hasMoreElements();){
temp=(String)enum.nextElement();
ub.setValue(temp,user.getProperty(temp));
}*/
ub.setGoupCount(user.getGroupCount());
ub.setGroupAdminCount(user.getGroupAdministratorCount());
v.add(ub);
}
request.setAttribute("users", v);
} 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");
}
}