Index: lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java =================================================================== diff -u -r96393fcda711611ec39dbc961ab6431b1f16bb4e -r37f6755a9242e00ef1216aa86dc147efaeb02f75 --- lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java (.../IImportService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/service/IImportService.java (.../IImportService.java) (revision 37f6755a9242e00ef1216aa86dc147efaeb02f75) @@ -46,6 +46,7 @@ public static final String STATUS_IMPORTED = "imported"; public static final String IMPORT_FILE = "file"; public static final String IMPORT_RESULTS = "results"; + public static final int THRESHOLD = 500; /** * Returns true if spreadsheet contains user data. @@ -88,6 +89,14 @@ public List parseV1UsersFile(FormFile fileItem, boolean includeIntegrated) throws IOException; /** + * Returns number of rows found in spreadsheet. + * @param fileItem + * @return + * @throws IOException + */ + public int getNumRows(FormFile fileItem) throws IOException; + + /** * Returns message results from parsing list of users in spreadsheet. * @param file * @return Index: lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java =================================================================== diff -u -r96393fcda711611ec39dbc961ab6431b1f16bb4e -r37f6755a9242e00ef1216aa86dc147efaeb02f75 --- lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision 37f6755a9242e00ef1216aa86dc147efaeb02f75) @@ -407,6 +407,13 @@ return false; } + public int getNumRows(FormFile fileItem) throws IOException { + HSSFSheet sheet = getSheet(fileItem); + int startRow = sheet.getFirstRowNum(); + int endRow = sheet.getLastRowNum(); + return endRow - startRow; + } + public List parseUserSpreadsheet(FormFile fileItem, String sessionId) throws IOException { results = new ArrayList(); HSSFSheet sheet = getSheet(fileItem); @@ -435,19 +442,20 @@ if (hasError) { log.debug("hasError: "+hasError); results.add(rowResult); + updateImportStatus(sessionId, results.size()); continue; } else { try { service.save(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")); } log.debug("rowResult size: "+rowResult.size()); results.add(rowResult); + updateImportStatus(sessionId, results.size()); } } log.debug("found "+results.size()+" users in spreadsheet."); Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java =================================================================== diff -u -r96393fcda711611ec39dbc961ab6431b1f16bb4e -r37f6755a9242e00ef1216aa86dc147efaeb02f75 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java (.../ImportExcelSaveAction.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/ImportExcelSaveAction.java (.../ImportExcelSaveAction.java) (revision 37f6755a9242e00ef1216aa86dc147efaeb02f75) @@ -50,6 +50,7 @@ * @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" + * @struts:action-forward name="results" path="/importuserresult.do" */ public class ImportExcelSaveAction extends Action { @@ -62,6 +63,7 @@ return mapping.findForward("sysadmin"); } + IImportService importService = AdminServiceProxy.getImportService(getServlet().getServletContext()); ImportExcelForm importExcelForm = (ImportExcelForm)form; FormFile file = importExcelForm.getFile(); @@ -70,12 +72,18 @@ return mapping.findForward("import"); } - SessionManager.getSession().setAttribute(IImportService.IMPORT_FILE, file); String sessionId = (String)SessionManager.getSession().getId(); - Thread t = new Thread(new ImportExcelThread(sessionId)); - t.start(); - - return mapping.findForward("status"); + SessionManager.getSession().setAttribute(IImportService.IMPORT_FILE, file); + // use a new thread only if number of users is > threshold + if (importService.getNumRows(file) < IImportService.THRESHOLD) { + List results = importService.parseSpreadsheet(file, sessionId); + SessionManager.getSession(sessionId).setAttribute(IImportService.IMPORT_RESULTS, results); + return mapping.findForward("results"); + } else { + Thread t = new Thread(new ImportExcelThread(sessionId)); + t.start(); + return mapping.findForward("status"); + } }