Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r39b3310a4aa2fad6567aeaa89a08dc9ae0084196 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java =================================================================== diff -u -r48dc62244b557fd73807f2355b80b63be73154a3 -r39b3310a4aa2fad6567aeaa89a08dc9ae0084196 --- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) +++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision 39b3310a4aa2fad6567aeaa89a08dc9ae0084196) @@ -485,11 +485,31 @@ // Code to generate file and write file contents to response ServletOutputStream out = response.getOutputStream(); - ExcelUtil.createExcel(out, dataToExport, getMessageService().getMessage("outcome.export.date"), true); + ExcelUtil.createExcelXLS(out, dataToExport, getMessageService().getMessage("outcome.export.date"), true); return null; } + @SuppressWarnings("rawtypes") + public ActionForward outcomeImport(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + UserDTO user = getUserDTO(); + getSecurityService().isSysadmin(user.getUserID(), "import outcomes", true); + Hashtable fileElements = form.getMultipartRequestHandler().getFileElements(); + + try { + int importCount = getOutcomeService().importOutcomes((FormFile) fileElements.elements().nextElement()); + log.info("Imported " + importCount + " outcomes"); + } catch (Exception e) { + log.error("Error while importing outcomes", e); + ActionMessages errors = new ActionMessages(); + errors.add(Globals.ERROR_KEY, new ActionMessage("outcome.import.error")); + saveErrors(request, errors); + } + + return outcomeManage(mapping, form, request, response); + } + public ActionForward scaleManage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Integer userId = getUserDTO().getUserID(); Index: lams_central/web/outcome/outcomeManage.jsp =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r39b3310a4aa2fad6567aeaa89a08dc9ae0084196 --- lams_central/web/outcome/outcomeManage.jsp (.../outcomeManage.jsp) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_central/web/outcome/outcomeManage.jsp (.../outcomeManage.jsp) (revision 39b3310a4aa2fad6567aeaa89a08dc9ae0084196) @@ -2,6 +2,8 @@ <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-fmt" prefix="fmt"%> <%@ taglib uri="tags-core" prefix="c"%> +<%@ taglib uri="tags-logic" prefix="logic" %> +<%@ taglib uri="tags-html" prefix="html" %> @@ -34,6 +36,14 @@ + + + + + + + +
@@ -91,14 +101,24 @@
- -
"> - - -
+ + +
"> + + +
+
+ +
+ +
+
+ + +
Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java =================================================================== diff -u -r48dc62244b557fd73807f2355b80b63be73154a3 -r39b3310a4aa2fad6567aeaa89a08dc9ae0084196 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 39b3310a4aa2fad6567aeaa89a08dc9ae0084196) @@ -41,4 +41,6 @@ LinkedHashMap exportOutcomes(); int importScales(FormFile fileItem) throws IOException; + + int importOutcomes(FormFile fileItem) throws IOException; } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java =================================================================== diff -u -r48dc62244b557fd73807f2355b80b63be73154a3 -r39b3310a4aa2fad6567aeaa89a08dc9ae0084196 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 39b3310a4aa2fad6567aeaa89a08dc9ae0084196) @@ -10,6 +10,7 @@ import javax.servlet.http.HttpSession; +import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -34,6 +35,8 @@ private IOutcomeDAO outcomeDAO; private MessageService messageService; + private static Logger log = Logger.getLogger(OutcomeService.class); + public String getContentFolderId(Integer organisationId) { String contentFolderId = outcomeDAO.getContentFolderID(organisationId); return contentFolderId == null ? FileUtil.generateUniqueContentFolderID() : contentFolderId; @@ -158,6 +161,9 @@ String code = cell.getStringCellValue(); List foundScales = outcomeDAO.findByProperty(OutcomeScale.class, "code", code); if (!foundScales.isEmpty()) { + if (log.isDebugEnabled()) { + log.debug("Skipping an outcome scale with existing code: " + code); + } continue; } cell = row.getCell(0); @@ -194,6 +200,60 @@ return counter; } + @SuppressWarnings("unchecked") + public int importOutcomes(FormFile fileItem) throws IOException { + POIFSFileSystem fs = new POIFSFileSystem(fileItem.getInputStream()); + HSSFWorkbook wb = new HSSFWorkbook(fs); + HSSFSheet sheet = wb.getSheetAt(0); + int startRow = sheet.getFirstRowNum(); + int endRow = sheet.getLastRowNum(); + User user = null; + int counter = 0; + + for (int i = startRow + 5; i < (endRow + 1); i++) { + HSSFRow row = sheet.getRow(i); + HSSFCell cell = row.getCell(1); + String code = cell.getStringCellValue(); + List foundOutcomes = outcomeDAO.findByProperty(Outcome.class, "code", code); + if (!foundOutcomes.isEmpty()) { + if (log.isDebugEnabled()) { + log.debug("Skipping an outcome with existing code: " + code); + } + continue; + } + cell = row.getCell(3); + String scaleCode = cell.getStringCellValue(); + List foundScales = outcomeDAO.findByProperty(OutcomeScale.class, "code", scaleCode); + OutcomeScale scale = foundScales.isEmpty() ? null : foundScales.get(0); + if (scale == null) { + if (log.isDebugEnabled()) { + log.debug("Skipping an outcome with missing scale with code: " + scaleCode); + } + continue; + } + cell = row.getCell(0); + String name = cell.getStringCellValue(); + cell = row.getCell(2); + String description = cell.getStringCellValue(); + + Outcome outcome = new Outcome(); + outcome.setName(name); + outcome.setCode(code); + outcome.setDescription(description); + outcome.setScale(scale); + if (user == null) { + UserDTO userDTO = OutcomeService.getUserDTO(); + user = (User) outcomeDAO.find(User.class, userDTO.getUserID()); + } + outcome.setCreateBy(user); + outcome.setCreateDateTime(new Date()); + outcomeDAO.insert(outcome); + + counter++; + } + return counter; + } + private static UserDTO getUserDTO() { HttpSession ss = SessionManager.getSession(); return (UserDTO) ss.getAttribute(AttributeNames.USER);