Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rb7008b95e3f3054ee6f3696a0579e34a197201ca -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision b7008b95e3f3054ee6f3696a0579e34a197201ca) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -250,6 +250,7 @@ import.groups.intro = Use this screen to bulk import groups and subgroups using an Excel spreadsheet. import.groups.instructions = When creating a group, make sure the row above it is empty. When creating a subgroup, place it directly under it's parent group. import.groups.download = Download the groups template to create groups and subgroups. +msg.please.wait = Please wait... #======= End labels: Exported 238 labels for en AU ===== Index: lams_admin/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -rb7008b95e3f3054ee6f3696a0579e34a197201ca -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision b7008b95e3f3054ee6f3696a0579e34a197201ca) +++ lams_admin/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -250,5 +250,6 @@ import.groups.intro = Use this screen to bulk import groups and subgroups using an Excel spreadsheet. import.groups.instructions = When creating a group, make sure the row above it is empty. When creating a subgroup, place it directly under it's parent group. import.groups.download = Download the groups template to create groups and subgroups. +msg.please.wait = Please wait... #======= End labels: Exported 238 labels for en AU ===== Index: lams_admin/conf/xdoclet/filter-mappings.xml =================================================================== diff -u -r96832009b4fd69f1c61ab1fb88fb9b72089733e1 -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/conf/xdoclet/filter-mappings.xml (.../filter-mappings.xml) (revision 96832009b4fd69f1c61ab1fb88fb9b72089733e1) +++ lams_admin/conf/xdoclet/filter-mappings.xml (.../filter-mappings.xml) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -8,109 +8,5 @@ HibernateFilter - /cache.do + /* - - HibernateFilter - /cleanup.do - - - HibernateFilter - /config.do - - - HibernateFilter - /disabledmanage.do - - - HibernateFilter - /joblist.do - - - HibernateFilter - /libraryManage.do - - - HibernateFilter - /loginmaintain.do - - - HibernateFilter - /loginsave.do - - - HibernateFilter - /organisation.do - - - HibernateFilter - /orgmanage.do - - - HibernateFilter - /orgsave.do - - - HibernateFilter - /register.do - - - HibernateFilter - /serverlist.do - - - HibernateFilter - /servermaintain.do - - - HibernateFilter - /serversave.do - - - HibernateFilter - /sysadminstart.do - - - HibernateFilter - /toolcontentlist.do - - - HibernateFilter - /user.do - - - HibernateFilter - /usermanage.do - - - HibernateFilter - /userorg.do - - - HibernateFilter - /userorgrole.do - - - HibernateFilter - /userorgrolesave.do - - - HibernateFilter - /userorgsave.do - - - HibernateFilter - /userroles.do - - - HibernateFilter - /userrolessave.do - - - HibernateFilter - /usersave.do - - - HibernateFilter - /usersearch.do - Index: lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java =================================================================== diff -u -rb7008b95e3f3054ee6f3696a0579e34a197201ca -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java (.../IImportService.java) (revision b7008b95e3f3054ee6f3696a0579e34a197201ca) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java (.../IImportService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -42,6 +42,10 @@ public static final String IMPORT_HELP_PAGE = "Import+Users"; public static final String IMPORTV1_HELP_PAGE = "Import+LAMS+1+Users"; public static final String IMPORT_GROUPS_HELP_PAGE = "Import+Groups"; + public static final String STATUS_IMPORT_TOTAL = "importTotal"; + public static final String STATUS_IMPORTED = "imported"; + public static final String IMPORT_FILE = "file"; + public static final String IMPORT_RESULTS = "results"; /** * Returns true if spreadsheet contains user data. @@ -65,7 +69,7 @@ * @param fileItem * @throws IOException */ - public List parseSpreadsheet(FormFile fileItem) throws IOException; + public List parseSpreadsheet(FormFile fileItem, String sessionId) throws IOException; /** * @@ -89,7 +93,7 @@ * @return * @throws IOException */ - public List parseUserSpreadsheet(FormFile file) throws IOException; + public List parseUserSpreadsheet(FormFile file, String sessionId) throws IOException; /** * Returns message results from parsing list of organisation memberships Index: lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java =================================================================== diff -u -rb7008b95e3f3054ee6f3696a0579e34a197201ca -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision b7008b95e3f3054ee6f3696a0579e34a197201ca) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -32,6 +32,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.servlet.http.HttpSession; + import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; @@ -165,9 +167,9 @@ return (StringUtils.equals(string, "* organisation")) ? true : false; } - public List parseSpreadsheet(FormFile fileItem) throws IOException { + public List parseSpreadsheet(FormFile fileItem, String sessionId) throws IOException { if (isUserSpreadsheet(fileItem)) { - return parseUserSpreadsheet(fileItem); + return parseUserSpreadsheet(fileItem, sessionId); } else if (isRolesSpreadsheet(fileItem)) { return parseRolesSpreadsheet(fileItem); } @@ -186,8 +188,6 @@ log.debug("sheet rows: "+startRow+".."+endRow); - UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); - HSSFRow row; Organisation org = null; for (int i = startRow + 1; i < endRow + 1; i++) { @@ -211,28 +211,32 @@ results.add(rowResult); continue; } else { - //try { - org = service.saveOrganisation(org, user.getUserID()); - rowResult.add(org.getOrganisationId().toString()); - rowResult.add(org.getName()); - rowResult.add(org.getParentOrganisation().getOrganisationId().toString()); - rowResult.add(org.getOrganisationType().getOrganisationTypeId().toString()); - writeOrgAuditLog(org); - // if we just added a group, then the rows under it become it's subgroups - if (parentOrg.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.ROOT_TYPE)) { - parentOrg = org; - } - //} catch (Exception e) { - // log.debug(e); - // rowResult.add(messageService.getMessage("error.fail.add")); - //} + org = service.saveOrganisation(org, getCurrentUserId()); + rowResult.add(org.getOrganisationId().toString()); + rowResult.add(org.getName()); + rowResult.add(org.getParentOrganisation().getOrganisationId().toString()); + rowResult.add(org.getOrganisationType().getOrganisationTypeId().toString()); + writeOrgAuditLog(org); + // if we just added a group, then the rows under it become it's subgroups + if (parentOrg.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.ROOT_TYPE)) { + parentOrg = org; + } results.add(rowResult); } } log.debug("found "+results.size()+" orgs in spreadsheet."); return results; } + private Integer getCurrentUserId() { + try { + UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); + return user.getUserID(); + } catch (Exception e) { + log.error(e); + } + return null; + } private Organisation parseGroup(HSSFRow row, int rowIndex) { Organisation org = new Organisation(); @@ -403,12 +407,15 @@ return false; } - public List parseUserSpreadsheet(FormFile fileItem) throws IOException { + public List parseUserSpreadsheet(FormFile fileItem, String sessionId) throws IOException { results = new ArrayList(); HSSFSheet sheet = getSheet(fileItem); int startRow = sheet.getFirstRowNum(); int endRow = sheet.getLastRowNum(); + setupImportStatus(sessionId, endRow-startRow); + UserDTO userDTO = (UserDTO)SessionManager.getSession(sessionId).getAttribute(AttributeNames.USER); + log.debug("sheet rows: "+startRow+".."+endRow); HSSFRow row; @@ -432,8 +439,9 @@ } else { try { service.save(user); - writeAuditLog(user); + writeAuditLog(user, userDTO); log.debug("saved user: "+user.getUserId()); + updateImportStatus(sessionId, results.size()+1); } catch (Exception e) { log.debug(e); rowResult.add(messageService.getMessage("error.fail.add")); @@ -446,6 +454,20 @@ return results; } + // use session vars to update browser with import progress so page + // won't timeout + private void setupImportStatus(String sessionId, int importTotal) { + HttpSession ss = SessionManager.getSession(sessionId); + ss.setAttribute(STATUS_IMPORT_TOTAL, importTotal); + ss.setAttribute(STATUS_IMPORTED, 0); + } + + private void updateImportStatus(String sessionId, int imported) { + HttpSession ss = SessionManager.getSession(sessionId); + ss.removeAttribute(STATUS_IMPORTED); + ss.setAttribute(STATUS_IMPORTED, imported); + } + public List parseRolesSpreadsheet(FormFile fileItem) throws IOException { results = new ArrayList(); HSSFSheet sheet = getSheet(fileItem); @@ -843,12 +865,12 @@ } } - private void writeAuditLog(User user) { + private void writeAuditLog(User user, UserDTO userDTO) { String[] args = new String[2]; args[0] = user.getLogin()+"("+user.getUserId()+")"; args[1] = user.getFullName(); String message = messageService.getMessage("audit.user.create", args); - auditService.log(AdminConstants.MODULE_NAME, message); + auditService.log(userDTO, AdminConstants.MODULE_NAME, message); } private void writeOrgAuditLog(Organisation org) { Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java =================================================================== diff -u -r221823dcaabe5ed0b06b51b873aafdfb0ea7c000 -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java (.../ImportExcelSaveAction.java) (revision 221823dcaabe5ed0b06b51b873aafdfb0ea7c000) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java (.../ImportExcelSaveAction.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -23,7 +23,6 @@ /* $Id$ */ package org.lamsfoundation.lams.admin.web; -import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -36,7 +35,7 @@ import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; import org.lamsfoundation.lams.admin.service.IImportService; -import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.web.session.SessionManager; /** * @author jliew @@ -50,6 +49,7 @@ * @struts:action-forward name="importresult" path=".importresult" * @struts:action-forward name="sysadmin" path="/sysadminstart.do" * @struts:action-forward name="import" path="/importexcel.do" + * @struts:action-forward name="status" path="/import/status.jsp" */ public class ImportExcelSaveAction extends Action { @@ -59,12 +59,9 @@ HttpServletResponse response) throws Exception { if (isCancelled(request)) { - //return mapping.getInputForward(); return mapping.findForward("sysadmin"); } - MessageService messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); - IImportService importService = AdminServiceProxy.getImportService(getServlet().getServletContext()); ImportExcelForm importExcelForm = (ImportExcelForm)form; FormFile file = importExcelForm.getFile(); @@ -73,20 +70,30 @@ return mapping.findForward("import"); } - List results = importService.parseSpreadsheet(file); - String successMessageKey = (importService.isUserSpreadsheet(file) ? "msg.users.created" : "msg.users.added"); + SessionManager.getSession().setAttribute(IImportService.IMPORT_FILE, file); + String sessionId = (String)SessionManager.getSession().getId(); + Thread t = new Thread(new ImportExcelThread(sessionId)); + t.start(); - int successful = 0; - for(int i=0; i <%@ page import="org.lamsfoundation.lams.usermanagement.OrganisationType" %> + + +

: @@ -12,6 +20,13 @@

 

+ + +
+

@@ -71,8 +86,10 @@

-   +  

- \ No newline at end of file + + +
\ No newline at end of file Index: lams_admin/web/import/importStatus.jsp =================================================================== diff -u --- lams_admin/web/import/importStatus.jsp (revision 0) +++ lams_admin/web/import/importStatus.jsp (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -0,0 +1,15 @@ +<%@ include file="/taglibs.jsp"%> +<%@ page import="org.lamsfoundation.lams.web.session.SessionManager" %> +<%@ page import="org.lamsfoundation.lams.admin.service.IImportService" %> + +<% + Integer importTotal = (Integer)SessionManager.getSession().getAttribute(IImportService.STATUS_IMPORT_TOTAL); + Integer imported = (Integer)SessionManager.getSession().getAttribute(IImportService.STATUS_IMPORTED); + String progress = ""; + try { + float percent = imported.floatValue()/importTotal.floatValue() * 100; + progress = (new Float(percent)).toString(); + progress = (progress.length() >= 5 ? progress.substring(0,5) : progress); + } catch (Exception e) {} + if (progress.length()>0) out.println(progress+" % completed..."); +%> \ No newline at end of file Index: lams_admin/web/import/importexcel.jsp =================================================================== diff -u -r9139fadf8c6f7687ffbf50e249474be95c84db07 -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_admin/web/import/importexcel.jsp (.../importexcel.jsp) (revision 9139fadf8c6f7687ffbf50e249474be95c84db07) +++ lams_admin/web/import/importexcel.jsp (.../importexcel.jsp) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -1,6 +1,12 @@ <%@ include file="/taglibs.jsp"%> <%@ page import="org.lamsfoundation.lams.admin.service.IImportService" %> + +

: @@ -38,7 +44,7 @@

-   +  

Index: lams_admin/web/import/status.jsp =================================================================== diff -u --- lams_admin/web/import/status.jsp (revision 0) +++ lams_admin/web/import/status.jsp (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -0,0 +1,55 @@ +<%@ include file="/taglibs.jsp"%> +<%@ page import="org.lamsfoundation.lams.web.session.SessionManager" %> +<%@ page import="org.lamsfoundation.lams.admin.service.IImportService" %> + + + + + + + + + + + + +
+
+

+ + : +

+ + + +

 

+ +
+

+

loading...

+<% + Integer importTotal = (Integer)SessionManager.getSession().getAttribute(IImportService.STATUS_IMPORT_TOTAL); + Integer imported = (Integer)SessionManager.getSession().getAttribute(IImportService.STATUS_IMPORTED); + String progress = ""; + try { + float percent = imported.floatValue()/importTotal.floatValue() * 100; + progress = (new Float(percent)).toString(); + progress = (progress.length() >= 5 ? progress.substring(0,5) : progress); + } catch (Exception e) {} + if (progress.length()>0) out.println(progress+" % completed..."); +%> +
+ +
+
+ + +
\ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java (.../AuditService.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java (.../AuditService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -72,15 +72,23 @@ if ( ss != null ) { UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); if ( user != null ) { - return user.getLogin()+"("+user.getUserID()+"): "; + return getUserString(user); } } return "User unknown (session does not contain user details): "; } + + private String getUserString(UserDTO userDTO) { + return userDTO.getLogin()+"("+userDTO.getUserID()+"): "; + } public void log(String moduleName, String message) { logger.info(getUserString()+moduleName+": "+message); } + + public void log(UserDTO userDTO, String moduleName, String message) { + logger.info(getUserString(userDTO)+moduleName+": "+message); + } public void logChange(String moduleName, Long originalUserId, String originalUserLogin, String originalText, String newText) { Index: lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r96393fcda711611ec39dbc961ab6431b1f16bb4e --- lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java (.../IAuditService.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java (.../IAuditService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) @@ -24,6 +24,8 @@ package org.lamsfoundation.lams.util.audit; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; + /** Public interface for a service that writes audit records */ public interface IAuditService { @@ -33,6 +35,15 @@ * @param message message to be logged */ public void log(String moduleName, String message); + + /** + * Same as above, but logs message using given userDTO instead of current session DTO. + * Useful when importing users in a separate thread which isn't linked to main session. + * @param userDTO + * @param moduleName + * @param message + */ + public void log(UserDTO userDTO, String moduleName, String message); /** * Log a data change. The username, date, moduleName and change details are recorded in the audit log.