Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/LdapConfigAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/LdapConfigAction.java,v diff -u -r1.1.2.2 -r1.1.2.3 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/LdapConfigAction.java 28 Sep 2007 01:35:21 -0000 1.1.2.2 +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/LdapConfigAction.java 28 Sep 2007 08:01:13 -0000 1.1.2.3 @@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -38,10 +39,12 @@ import org.lamsfoundation.lams.usermanagement.AuthenticationMethod; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.BulkUpdateResultDTO; +import org.lamsfoundation.lams.usermanagement.service.ILdapService; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.usermanagement.service.LdapService; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; /** * @author jliew @@ -87,8 +90,10 @@ HttpServletResponse response) throws Exception { String action = WebUtil.readStrParam(request, "action", true); - if (action != null && StringUtils.equals(action, "sync")) { - return sync(mapping, form, request, response); + if (action != null) { + if (StringUtils.equals(action, "sync")) return sync(mapping, form, request, response); + if (StringUtils.equals(action, "waiting")) return waiting(mapping, form, request, response); + if (StringUtils.equals(action, "results")) return results(mapping, form, request, response); } int numLdapUsers = getNumLdapUsers(); @@ -102,13 +107,33 @@ HttpServletRequest request, HttpServletResponse response) throws Exception { - log.info("=== Beginning LDAP user sync ==="); - long start = System.currentTimeMillis(); - BulkUpdateResultDTO dto = getLdapService().bulkUpdate(); - long end = System.currentTimeMillis(); - log.info("=== Finished LDAP user sync ==="); - log.info("Bulk update took " + (end-start)/1000 + " seconds."); + String sessionId = (String)SessionManager.getSession().getId(); + Thread t = new Thread(new LdapSyncThread(sessionId)); + t.start(); + request.setAttribute("wait", getMessageService().getMessage("msg.ldap.synchronise.wait")); + + return mapping.findForward("ldap"); + } + + public ActionForward waiting(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + + request.setAttribute("wait", getMessageService().getMessage("msg.ldap.synchronise.wait")); + + return mapping.findForward("ldap"); + } + + public ActionForward results(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + + HttpSession ss = SessionManager.getSession(); + BulkUpdateResultDTO dto = (BulkUpdateResultDTO)ss.getAttribute(ILdapService.SYNC_RESULTS); + int numLdapUsers = getNumLdapUsers(); request.setAttribute("numLdapUsersMsg", getNumLdapUsersMsg(numLdapUsers)); @@ -119,6 +144,9 @@ request.setAttribute("messages", dto.getMessages()); request.setAttribute("done", getMessageService().getMessage("msg.done")); + // remove session variable that flags bulk update as done + ss.removeAttribute(ILdapService.SYNC_RESULTS); + return mapping.findForward("ldap"); } @@ -164,4 +192,22 @@ args[0] = String.valueOf(disabled); return getMessageService().getMessage("msg.num.disabled.users", args); } + + private class LdapSyncThread implements Runnable { + private String sessionId; + + public LdapSyncThread(String sessionId) { + this.sessionId = sessionId; + } + + public void run() { + log.info("=== Beginning LDAP user sync ==="); + long start = System.currentTimeMillis(); + BulkUpdateResultDTO dto = getLdapService().bulkUpdate(); + long end = System.currentTimeMillis(); + log.info("=== Finished LDAP user sync ==="); + log.info("Bulk update took " + (end-start)/1000 + " seconds."); + SessionManager.getSession(sessionId).setAttribute(ILdapService.SYNC_RESULTS, dto); + } + } } Index: lams_admin/web/ldap.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_admin/web/ldap.jsp,v diff -u -r1.2.2.2 -r1.2.2.3 --- lams_admin/web/ldap.jsp 28 Sep 2007 01:35:21 -0000 1.2.2.2 +++ lams_admin/web/ldap.jsp 28 Sep 2007 08:01:13 -0000 1.2.2.3 @@ -1,8 +1,10 @@ <%@ include file="/taglibs.jsp"%> +<%@ page import="org.lamsfoundation.lams.web.session.SessionManager" %> +<%@ page import="org.lamsfoundation.lams.usermanagement.service.ILdapService" %> @@ -35,12 +37,22 @@ />
- ++