Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -r20aa6cbca9fc96d341080e6ad39f82593443f792 -r5c1bac8c09133d94e7134da9b42e6652a51c15bd --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 5c1bac8c09133d94e7134da9b42e6652a51c15bd) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.tool.sbmt.service; +import java.io.File; import java.util.List; import java.util.Locale; import java.util.SortedMap; @@ -87,12 +88,12 @@ * * @throws SubmitFilesException */ - public void uploadFileToSession(Long sessionID, MultipartFile file, String fileDescription, Integer userID) + public void uploadFileToSession(Long sessionID, File file, String fileDescription, Integer userID) throws SubmitFilesException; /** * Get a the details for a single file uploaded by a learner - * + * * @param detailId * @return SubmissionDetails */ @@ -154,14 +155,14 @@ /** * Mark the original file uploaded by a learner as deleted. Does not delete the file * from the content repository. - * + * * @param detailID */ public void removeLearnerFile(Long detailID, UserDTO monitor); /** * Mark a deleted original file as not deleted. Undoes what removeLearnerFile(). - * + * * @param detailID */ public void restoreLearnerFile(Long detailID, UserDTO monitor); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r8203b1d6f3379d0a79b9ee9554d5ae5812b3cad8 -r5c1bac8c09133d94e7134da9b42e6652a51c15bd --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 8203b1d6f3379d0a79b9ee9554d5ae5812b3cad8) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 5c1bac8c09133d94e7134da9b42e6652a51c15bd) @@ -23,6 +23,8 @@ package org.lamsfoundation.lams.tool.sbmt.service; +import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.NumberFormat; @@ -551,10 +553,10 @@ } @Override - public void uploadFileToSession(Long sessionID, MultipartFile file, String fileDescription, Integer userID) + public void uploadFileToSession(Long sessionID, File file, String fileDescription, Integer userID) throws SubmitFilesException { - if ((file == null) || StringUtils.isEmpty(file.getOriginalFilename())) { + if ((file == null) || StringUtils.isEmpty(file.getName())) { throw new SubmitFilesException("Could not find upload file: " + file); } @@ -567,7 +569,7 @@ SubmissionDetails details = new SubmissionDetails(); details.setFileDescription(fileDescription); - details.setFilePath(file.getOriginalFilename()); + details.setFilePath(file.getName()); details.setDateOfSubmission(new Date()); SubmitUser learner = submitUserDAO.getLearner(sessionID, userID); @@ -596,6 +598,19 @@ * @throws RepositoryCheckedException * @throws InvalidParameterException */ + private NodeKey processFile(File file) { + NodeKey node = null; + if ((file != null) && !StringUtils.isEmpty(file.getName())) { + String fileName = file.getName(); + try { + node = sbmtToolContentHandler.uploadFile(new FileInputStream(file), fileName, null); + } catch (RepositoryCheckedException | IOException e) { + throw new SubmitFilesException(e.getMessage()); + } + } + return node; + } + private NodeKey processFile(MultipartFile file) { NodeKey node = null; if ((file != null) && !StringUtils.isEmpty(file.getOriginalFilename())) { @@ -1058,7 +1073,7 @@ @Override public SubmitUser getUserByUid(Long learnerID) { - return (SubmitUser) submitUserDAO.find(SubmitUser.class, learnerID); + return submitUserDAO.find(SubmitUser.class, learnerID); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java =================================================================== diff -u -rf7937adfea85b6a6976eaa98df8c68db93f9f060 -r5c1bac8c09133d94e7134da9b42e6652a51c15bd --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java (.../LearningController.java) (revision f7937adfea85b6a6976eaa98df8c68db93f9f060) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java (.../LearningController.java) (revision 5c1bac8c09133d94e7134da9b42e6652a51c15bd) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.tool.sbmt.web.controller; +import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Iterator; @@ -72,7 +73,6 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.multipart.MultipartFile; /** * @author Manpreet Minhas @@ -254,6 +254,8 @@ || content.isUseSelectLeaderToolOuput() && isUserLeader; sessionMap.put(SbmtConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight); + learnerForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); + return "learner/sbmtlearner"; } @@ -297,6 +299,8 @@ SubmitFilesSession session = submitFilesService.getSessionById(sessionID); sessionMap.put(SbmtConstants.ATTR_IS_MARKS_RELEASED, session.isMarksReleased()); + learnerForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); + return "learner/sbmtlearner"; } @@ -314,7 +318,16 @@ Long sessionID = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); request.setAttribute(AttributeNames.ATTR_IS_LAST_ACTIVITY, submitFilesService.isLastActivity(sessionID)); - if (validateUploadForm(learnerForm, request)) { + File[] files = null; + File uploadDir = FileUtil.getTmpFileUploadDir(learnerForm.getTmpFileUploadId()); + if (uploadDir.canRead()) { + files = uploadDir.listFiles(); + if (files.length == 0) { + files = null; + } + } + + if (validateUploadForm(learnerForm, files, request)) { // get session from shared session. HttpSession ss = SessionManager.getSession(); // get back login user DTO @@ -328,6 +341,8 @@ ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); setLearnerDTO(request, sessionMap, learner, filesUploaded, mode); + learnerForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); + return "learner/sbmtlearner"; } @@ -337,19 +352,22 @@ UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); Integer userID = user.getUserID(); - MultipartFile file = learnerForm.getFile(); String fileDescription = learnerForm.getDescription(); // reset fields and display a new form for next new file upload learnerForm.setDescription(""); try { - submitFilesService.uploadFileToSession(sessionID, file, fileDescription, userID); + for (File file : files) { + submitFilesService.uploadFileToSession(sessionID, file, fileDescription, userID); + } } catch (SubmitFilesException e) { MultiValueMap errorMap = new LinkedMultiValueMap<>(); logger.error("Error while uploading file", e); errorMap.add("GLOBAL", messageService.getMessage("error.upload", new Object[] { e.getMessage() })); request.setAttribute("errorMap", errorMap); return "learner/sbmtlearner"; + } finally { + FileUtil.deleteTmpFileUploadDir(learnerForm.getTmpFileUploadId()); } SubmitUser learner = getCurrentLearner(sessionID, submitFilesService); @@ -407,31 +425,34 @@ // ********************************************************************************************** // validate uploaded form - private boolean validateUploadForm(LearnerForm learnerForm, HttpServletRequest request) { + private boolean validateUploadForm(LearnerForm learnerForm, File[] files, HttpServletRequest request) { MultiValueMap errorMap = new LinkedMultiValueMap<>(); - if (learnerForm.getFile() == null || StringUtils.isBlank(learnerForm.getFile().getName())) { - errorMap.add("GLOBAL", messageService.getMessage("learner.form.filepath.displayname")); - } if (StringUtils.isBlank(learnerForm.getDescription())) { errorMap.add("GLOBAL", messageService.getMessage("label.learner.fileDescription")); } else if (learnerForm.getDescription().length() > LearnerForm.DESCRIPTION_LENGTH) { errorMap.add("GLOBAL", messageService.getMessage("errors.maxdescsize")); } - boolean fileSizeValid = FileValidatorUtil.validateFileSize(learnerForm.getFile().getSize(), false); - if (!fileSizeValid) { - errorMap.add("GLOBAL", messageService.getMessage("errors.maxfilesize", - new Object[] { Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE) })); - } + if (files == null) { + errorMap.add("GLOBAL", messageService.getMessage("learner.form.filepath.displayname")); + } else { + for (File file : files) { + boolean fileSizeValid = FileValidatorUtil.validateFileSize(file.length(), false); + if (!fileSizeValid) { + errorMap.add("GLOBAL", messageService.getMessage("errors.maxfilesize", + new Object[] { Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE) })); + } - if (learnerForm.getFile() != null) { - logger.debug("Learner submit file : " + learnerForm.getFile().getName()); - } + if (FileUtil.isExecutableFile(file.getName())) { + logger.debug("File is executatable : " + file.getName()); + errorMap.add("GLOBAL", messageService.getMessage("error.attachment.executable")); + } - if (learnerForm.getFile() != null && FileUtil.isExecutableFile(learnerForm.getFile().getName())) { - logger.debug("File is executatable : " + learnerForm.getFile().getName()); - errorMap.add("GLOBAL", messageService.getMessage("error.attachment.executable")); + if (!errorMap.isEmpty()) { + break; + } + } } if (!errorMap.isEmpty()) { Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/LearnerForm.java =================================================================== diff -u -r7694dd245cc58c5b7beb2348aaefb2762c47dc8d -r5c1bac8c09133d94e7134da9b42e6652a51c15bd --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/LearnerForm.java (.../LearnerForm.java) (revision 7694dd245cc58c5b7beb2348aaefb2762c47dc8d) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/LearnerForm.java (.../LearnerForm.java) (revision 5c1bac8c09133d94e7134da9b42e6652a51c15bd) @@ -1,7 +1,5 @@ package org.lamsfoundation.lams.tool.sbmt.web.form; -import org.springframework.web.multipart.MultipartFile; - /** * Learner Form. */ @@ -10,7 +8,7 @@ public static int DESCRIPTION_LENGTH = 5000; private String description; - private MultipartFile file; + private String tmpFileUploadId; private String sessionMapID; @@ -22,12 +20,12 @@ this.description = description; } - public MultipartFile getFile() { - return file; + public String getTmpFileUploadId() { + return tmpFileUploadId; } - public void setFile(MultipartFile file) { - this.file = file; + public void setTmpFileUploadId(String tmpFileUploadId) { + this.tmpFileUploadId = tmpFileUploadId; } public String getSessionMapID() { Index: lams_tool_sbmt/web/learner/sbmtlearner.jsp =================================================================== diff -u -re34c7b767eb34caebbfa0c9bdfb50d771d3b9d95 -r5c1bac8c09133d94e7134da9b42e6652a51c15bd --- lams_tool_sbmt/web/learner/sbmtlearner.jsp (.../sbmtlearner.jsp) (revision e34c7b767eb34caebbfa0c9bdfb50d771d3b9d95) +++ lams_tool_sbmt/web/learner/sbmtlearner.jsp (.../sbmtlearner.jsp) (revision 5c1bac8c09133d94e7134da9b42e6652a51c15bd) @@ -2,25 +2,133 @@ <%@include file="/common/taglibs.jsp"%> <%@ page import="org.lamsfoundation.lams.util.Configuration" %> <%@ page import="org.lamsfoundation.lams.util.ConfigurationKeys" %> -<%@ page import="org.lamsfoundation.lams.util.FileValidatorUtil" %> <%=Configuration.get(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE)%> -<%=FileValidatorUtil.formatSize(Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE))%> <%=Configuration.get(ConfigurationKeys.EXE_EXTENSIONS)%> + <fmt:message key="tool.display.name" /> <%@ include file="/common/header.jsp"%> - + + + + + + + + + + + + + + +