Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r5637d8bff3d19e970c3c9aa92a5895b4897f9cef -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 5637d8bff3d19e970c3c9aa92a5895b4897f9cef) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -869,6 +869,7 @@ scale.manage.view =View scale scale.manage.title =Course scales scale.manage.remove =Remove scale +scale.manage.remove.scale =Error while removing a scale. It is probably used in some outcomes. scale.manage.remove.confirm =Are you sure you want to remove this scale? scale.manage.add.value =Values scale.manage.add.value.info =Enter comma separated values in increasing order of value. For example, an A,B,C,D scale must be entered as D,C,B,A. @@ -880,6 +881,8 @@ outcome.authoring.existing.none =none outcome.export.date =Exported on: outcome.export =Export +outcome.import =Import +outcome.import.error =Error while importing outcomes or scales. Check logs. authoring.enable.confidence.levels=Enable confidence levels #=================== Specific to Team Based Learning (TBL) =========================# authoring.tbl.template.title=Team Based Learning Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -24,6 +24,7 @@ import java.util.Date; import java.util.HashSet; +import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -37,13 +38,15 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.apache.struts.Globals; import org.apache.struts.action.ActionErrors; 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.apache.struts.actions.DispatchAction; +import org.apache.struts.upload.FormFile; import org.apache.tomcat.util.json.JSONArray; import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -460,7 +463,7 @@ response.getWriter().print("OK"); return null; } - + public ActionForward outcomeExport(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserDTO user = getUserDTO(); @@ -535,10 +538,18 @@ return null; } } - getUserManagementService().delete(scale); - if (log.isDebugEnabled()) { - log.debug("Deleted outcome scale " + scaleId); + try { + getUserManagementService().delete(scale); + if (log.isDebugEnabled()) { + log.debug("Deleted outcome scale " + scaleId); + } + } catch (Exception e) { + log.error("Error while removing an outcome scale", e); + ActionMessages errors = new ActionMessages(); + errors.add(Globals.ERROR_KEY, new ActionMessage("scale.manage.remove.scale")); + saveErrors(request, errors); } + return scaleManage(mapping, form, request, response); } @@ -707,11 +718,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 scaleImport(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + UserDTO user = getUserDTO(); + getSecurityService().isSysadmin(user.getUserID(), "import outcome scales", true); + Hashtable fileElements = form.getMultipartRequestHandler().getFileElements(); + + try { + int importCount = getOutcomeService().importScales((FormFile) fileElements.elements().nextElement()); + log.info("Imported " + importCount + " outcome scales"); + } catch (Exception e) { + log.error("Error while importing outcome scales", e); + ActionMessages errors = new ActionMessages(); + errors.add(Globals.ERROR_KEY, new ActionMessage("outcome.import.error")); + saveErrors(request, errors); + } + + return scaleManage(mapping, form, request, response); + } + private UserDTO getUserDTO() { HttpSession ss = SessionManager.getSession(); return (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_central/web/css/outcome.scss =================================================================== diff -u -r5637d8bff3d19e970c3c9aa92a5895b4897f9cef -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_central/web/css/outcome.scss (.../outcome.scss) (revision 5637d8bff3d19e970c3c9aa92a5895b4897f9cef) +++ lams_central/web/css/outcome.scss (.../outcome.scss) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -14,7 +14,7 @@ height: 16px; } -#exportButton { +#exportButton, #importButton { float: left; margin: 20px 0 10px 10px; } @@ -39,3 +39,7 @@ textarea { width: 100%; } + +#importInput { + display: none; +} \ No newline at end of file Index: lams_central/web/includes/javascript/outcome.js =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_central/web/includes/javascript/outcome.js (.../outcome.js) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_central/web/includes/javascript/outcome.js (.../outcome.js) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -1,4 +1,12 @@ -function removeOutcome(outcomeId) { +$(document).ready(function(){ + $('#importInput').change(function(){ + if (this.files.length == 1) { + $('#importForm').submit(); + } + }); +}); + +function removeOutcome(outcomeId) { if (confirm(LABELS.REMOVE_OUTCOME_CONFIRM_LABEL)) { document.location.href = 'outcome.do?method=outcomeRemove&organisationID=' + organisationId + '&outcomeId=' + outcomeId; } Index: lams_central/web/outcome/scaleManage.jsp =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_central/web/outcome/scaleManage.jsp (.../scaleManage.jsp) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_central/web/outcome/scaleManage.jsp (.../scaleManage.jsp) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -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" %> @@ -33,6 +35,14 @@ + + + + + + + +
@@ -90,14 +100,21 @@
- +
">
+
+ +
+
+ + +
Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -1,9 +1,11 @@ package org.lamsfoundation.lams.outcome.service; +import java.io.IOException; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; +import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.outcome.Outcome; import org.lamsfoundation.lams.outcome.OutcomeMapping; import org.lamsfoundation.lams.outcome.OutcomeResult; @@ -37,4 +39,6 @@ LinkedHashMap exportScales(); LinkedHashMap exportOutcomes(); + + int importScales(FormFile fileItem) throws IOException; } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java =================================================================== diff -u -r3e663c2c75e25bd2f8609488f052c0b34a67d5db -r48dc62244b557fd73807f2355b80b63be73154a3 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 3e663c2c75e25bd2f8609488f052c0b34a67d5db) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 48dc62244b557fd73807f2355b80b63be73154a3) @@ -1,5 +1,7 @@ package org.lamsfoundation.lams.outcome.service; +import java.io.IOException; +import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedList; @@ -8,11 +10,19 @@ import javax.servlet.http.HttpSession; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.outcome.Outcome; import org.lamsfoundation.lams.outcome.OutcomeMapping; import org.lamsfoundation.lams.outcome.OutcomeResult; import org.lamsfoundation.lams.outcome.OutcomeScale; +import org.lamsfoundation.lams.outcome.OutcomeScaleItem; import org.lamsfoundation.lams.outcome.dao.IOutcomeDAO; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.FileUtil; @@ -132,6 +142,58 @@ return dataToExport; } + @SuppressWarnings("unchecked") + public int importScales(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 foundScales = outcomeDAO.findByProperty(OutcomeScale.class, "code", code); + if (!foundScales.isEmpty()) { + continue; + } + cell = row.getCell(0); + String name = cell.getStringCellValue(); + cell = row.getCell(2); + String description = cell.getStringCellValue(); + cell = row.getCell(3); + String itemsString = cell.getStringCellValue(); + + OutcomeScale scale = new OutcomeScale(); + scale.setName(name); + scale.setCode(code); + scale.setDescription(description); + if (user == null) { + UserDTO userDTO = OutcomeService.getUserDTO(); + user = (User) outcomeDAO.find(User.class, userDTO.getUserID()); + } + scale.setCreateBy(user); + scale.setCreateDateTime(new Date()); + outcomeDAO.insert(scale); + + List items = OutcomeScale.parseItems(itemsString); + int value = 0; + for (String itemString : items) { + OutcomeScaleItem item = new OutcomeScaleItem(); + item.setName(itemString); + item.setValue(value++); + item.setScale(scale); + outcomeDAO.insert(item); + } + + counter++; + } + return counter; + } + private static UserDTO getUserDTO() { HttpSession ss = SessionManager.getSession(); return (UserDTO) ss.getAttribute(AttributeNames.USER);