Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java =================================================================== diff -u -rcf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c -r484640af4db34eeea896eb26485c1b0d5eaea9d2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java (.../QaAppConstants.java) (revision cf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java (.../QaAppConstants.java) (revision 484640af4db34eeea896eb26485c1b0d5eaea9d2) @@ -109,6 +109,10 @@ public static final String THE_ONLINE_FILE ="theOnlineFile"; public static final String THE_OFFLINE_FILENAME ="theOfflineFileName"; public static final String THE_ONLINE_FILENAME ="theOnlineFileName"; + public static final String SUBMIT_OFFLINE_FILE ="submitOfflineFile"; + public static final String SUBMIT_ONLINE_FILE ="submitOnlineFile"; + public static final String LIST_UPLOADED_OFFLINE_FILES ="listUploadedOfflineFiles"; + public static final String LIST_UPLOADED_ONLINE_FILES ="listUploadedOnlineFiles"; /** Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java =================================================================== diff -u -rcf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c -r484640af4db34eeea896eb26485c1b0d5eaea9d2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java (.../QaUtils.java) (revision cf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java (.../QaUtils.java) (revision 484640af4db34eeea896eb26485c1b0d5eaea9d2) @@ -6,15 +6,22 @@ */ package org.lamsfoundation.lams.tool.qa; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; import java.security.Principal; import java.text.DateFormat; import java.util.Date; +import java.util.LinkedList; +import java.util.Map; import java.util.Random; import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; +import org.apache.struts.upload.FormFile; +import org.lamsfoundation.lams.contentrepository.NodeKey; import org.lamsfoundation.lams.tool.qa.service.IQaService; import org.lamsfoundation.lams.tool.qa.web.QaAuthoringForm; import org.lamsfoundation.lams.usermanagement.User; @@ -398,5 +405,99 @@ qaService.configureContentRepository(); logger.debug("configureContentRepository ran successfully"); } - + + public static void addFileToContentRepository(HttpServletRequest request, QaAuthoringForm qaAuthoringForm, boolean isOfflineFile) + { + logger.debug("attempt addFileToContentRepository"); + IQaService qaService =QaUtils.getToolService(request); + + LinkedList listUploadedOfflineFiles = (LinkedList) request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILES); + logger.debug("listUploadedOfflineFiles: " + listUploadedOfflineFiles); + LinkedList listUploadedOnlineFiles = (LinkedList) request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILES); + logger.debug("listUploadedOnlineFiles: " + listUploadedOnlineFiles); + + + if (isOfflineFile) + { + /** read uploaded file informtion - offline file*/ + logger.debug("retrieve theOfflineFile."); + FormFile theOfflineFile = qaAuthoringForm.getTheOfflineFile(); + logger.debug("retrieved theOfflineFile: " + theOfflineFile); + + String offlineFileName=""; + NodeKey nodeKey=null; + String offlineFileUuid=""; + try + { + InputStream offlineFileInputStream = theOfflineFile.getInputStream(); + logger.debug("retrieved offlineFileInputStream: " + offlineFileInputStream); + offlineFileName=theOfflineFile.getFileName(); + logger.debug("retrieved offlineFileName: " + offlineFileName); + nodeKey=qaService.uploadFileToRepository(offlineFileInputStream, offlineFileName); + logger.debug("repository returned nodeKey: " + nodeKey); + logger.debug("repository returned offlineFileUuid nodeKey uuid: " + nodeKey.getUuid()); + offlineFileUuid=nodeKey.getUuid().toString(); + logger.debug("offline file added to contentRepository"); + listUploadedOfflineFiles.add(offlineFileUuid + "~" + offlineFileName); + logger.debug("listUploadedOfflineFiles updated: " + listUploadedOfflineFiles); + request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILES,listUploadedOfflineFiles); + } + catch(FileNotFoundException e) + { + logger.debug("exception occured, offline file not found : " + e.getMessage()); + //possibly give warning to user in request scope + } + catch(IOException e) + { + logger.debug("exception occured in offline file transfer: " + e.getMessage()); + //possibly give warning to user in request scope + } + catch(QaApplicationException e) + { + logger.debug("exception occured in accessing the repository server: " + e.getMessage()); + //possibly give warning to user in request scope + } + } + else + { + /** read uploaded file information - online file*/ + logger.debug("retrieve theOnlineFile"); + FormFile theOnlineFile = qaAuthoringForm.getTheOnlineFile(); + logger.debug("retrieved theOnlineFile: " + theOnlineFile); + + String onlineFileName=""; + NodeKey nodeKey=null; + String onlineFileUuid=""; + try + { + InputStream onlineFileInputStream = theOnlineFile.getInputStream(); + logger.debug("retrieved onlineFileInputStream: " + onlineFileInputStream); + onlineFileName=theOnlineFile.getFileName(); + logger.debug("retrieved onlineFileName: " + onlineFileName); + nodeKey=qaService.uploadFileToRepository(onlineFileInputStream, onlineFileName); + logger.debug("repository returned nodeKey: " + nodeKey); + logger.debug("repository returned onlineFileUuid nodeKey uuid: " + nodeKey.getUuid()); + onlineFileUuid=nodeKey.getUuid().toString(); + logger.debug("online file added to contentRepository"); + listUploadedOnlineFiles.add(onlineFileUuid + "~" + onlineFileName); + logger.debug("listUploadedOnlineFiles updated: " + listUploadedOnlineFiles); + request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILES,listUploadedOnlineFiles); + } + catch(FileNotFoundException e) + { + logger.debug("exception occured, online file not found : " + e.getMessage()); + //possibly give warning to user in request scope + } + catch(IOException e) + { + logger.debug("exception occured in online file transfer: " + e.getMessage()); + //possibly give warning to user in request scope + } + catch(QaApplicationException e) + { + logger.debug("exception occured in accessing the repository server: " + e.getMessage()); + //possibly give warning to user in request scope + } + } + } } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/AuthoringUtil.java =================================================================== diff -u -ra4b9dfe6935887930d266eedb191089ea52914cc -r484640af4db34eeea896eb26485c1b0d5eaea9d2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/AuthoringUtil.java (.../AuthoringUtil.java) (revision a4b9dfe6935887930d266eedb191089ea52914cc) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/AuthoringUtil.java (.../AuthoringUtil.java) (revision 484640af4db34eeea896eb26485c1b0d5eaea9d2) @@ -11,6 +11,7 @@ import java.io.InputStream; import java.util.Date; import java.util.Iterator; +import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; import java.util.TreeSet; @@ -354,76 +355,6 @@ logger.debug("createContent richTextInstructions from session: " + richTextInstructions); if (richTextInstructions == null) richTextInstructions=""; - /** read uploaded file informtion - offline file*/ - logger.debug("retrieve theOfflineFile."); - FormFile theOfflineFile = qaAuthoringForm.getTheOfflineFile(); - logger.debug("retrieved theOfflineFile: " + theOfflineFile); - - String offlineFileName=""; - NodeKey nodeKey=null; - String offlineFileUuid=""; - try - { - InputStream offlineFileInputStream = theOfflineFile.getInputStream(); - logger.debug("retrieved offlineFileInputStream: " + offlineFileInputStream); - offlineFileName=theOfflineFile.getFileName(); - logger.debug("retrieved offlineFileName: " + offlineFileName); - nodeKey=qaService.uploadFileToRepository(offlineFileInputStream, offlineFileName); - logger.debug("repository returned nodeKey: " + nodeKey); - logger.debug("repository returned offlineFileUuid nodeKey uuid: " + nodeKey.getUuid()); - offlineFileUuid=nodeKey.getUuid().toString(); - } - catch(FileNotFoundException e) - { - logger.debug("exception occured, offline file not found : " + e.getMessage()); - //possibly give warning to user in request scope - } - catch(IOException e) - { - logger.debug("exception occured in offline file transfer: " + e.getMessage()); - //possibly give warning to user in request scope - } - catch(QaApplicationException e) - { - logger.debug("exception occured in accessing the repository server: " + e.getMessage()); - //possibly give warning to user in request scope - } - - /** read uploaded file informtion - online file*/ - logger.debug("retrieve theOnlineFile"); - FormFile theOnlineFile = qaAuthoringForm.getTheOnlineFile(); - logger.debug("retrieved theOnlineFile: " + theOnlineFile); - - String onlineFileName=""; - nodeKey=null; - String onlineFileUuid=""; - try - { - InputStream onlineFileInputStream = theOnlineFile.getInputStream(); - logger.debug("retrieved onlineFileInputStream: " + onlineFileInputStream); - onlineFileName=theOnlineFile.getFileName(); - logger.debug("retrieved onlineFileName: " + onlineFileName); - nodeKey=qaService.uploadFileToRepository(onlineFileInputStream, onlineFileName); - logger.debug("repository returned nodeKey: " + nodeKey); - logger.debug("repository returned onlineFileUuid nodeKey uuid: " + nodeKey.getUuid()); - onlineFileUuid=nodeKey.getUuid().toString(); - } - catch(FileNotFoundException e) - { - logger.debug("exception occured, online file not found : " + e.getMessage()); - //possibly give warning to user in request scope - } - catch(IOException e) - { - logger.debug("exception occured in online file transfer: " + e.getMessage()); - //possibly give warning to user in request scope - } - catch(QaApplicationException e) - { - logger.debug("exception occured in accessing the repository server: " + e.getMessage()); - //possibly give warning to user in request scope - } - /**obtain user object from the session*/ User toolUser=(User)request.getSession().getAttribute(TOOL_USER); @@ -458,14 +389,61 @@ qaService.createQa(qa); logger.debug("qa created with content id: " + toolContentId); - logger.debug("start persisting offline file information to db..."); - qaService.persistFile(offlineFileUuid,false, offlineFileName,qa); - logger.debug("successfully persisted offline file info"); + LinkedList listUploadedOfflineFiles = (LinkedList) request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILES); + logger.debug("final listUploadedOfflineFiles: " + listUploadedOfflineFiles); + LinkedList listUploadedOnlineFiles = (LinkedList) request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILES); + logger.debug("final listUploadedOnlineFiles: " + listUploadedOnlineFiles); - logger.debug("start persisting online file information to db..."); - qaService.persistFile(onlineFileUuid,true, onlineFileName,qa); - logger.debug("successfully persisted online file info"); + try{ + logger.debug("start persisting offline file information to db..."); + Iterator offlineFilesIterator=listUploadedOfflineFiles.iterator(); + while (offlineFilesIterator.hasNext()) + { + String uuidAndFileName=(String) offlineFilesIterator.next(); + logger.debug("iterated uuidAndFileName: " + uuidAndFileName); + if ((uuidAndFileName != null) && (uuidAndFileName.indexOf('~') > 0)) + { + int separator=uuidAndFileName.indexOf('~'); + logger.debug("separator: " + separator); + String uuid=uuidAndFileName.substring(0,separator); + String fileName=uuidAndFileName.substring(separator+1); + logger.debug("using uuid: " + uuid); + logger.debug("using fileName: " + fileName); + qaService.persistFile(uuid,false, fileName,qa); + } + } + logger.debug("all offline files data has been persisted"); + } + catch(Exception e) + { + logger.debug("error persisting offline files data: " + listUploadedOfflineFiles); + } + try{ + logger.debug("start persisting online file information to db..."); + Iterator onlineFilesIterator=listUploadedOnlineFiles.iterator(); + while (onlineFilesIterator.hasNext()) + { + String uuidAndFileName=(String) onlineFilesIterator.next(); + logger.debug("iterated uuidAndFileName: " + uuidAndFileName); + if ((uuidAndFileName != null) && (uuidAndFileName.indexOf('~') > 0)) + { + int separator=uuidAndFileName.indexOf('~'); + logger.debug("separator: " + separator); + String uuid=uuidAndFileName.substring(0,separator); + String fileName=uuidAndFileName.substring(separator+1); + logger.debug("using uuid: " + uuid); + logger.debug("using fileName: " + fileName); + qaService.persistFile(uuid,true, fileName,qa); + } + } + logger.debug("all online files data has been persisted"); + } + catch(Exception e) + { + logger.debug("error persisting offline files data: " + listUploadedOnlineFiles); + } + return qa; } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QAction.java =================================================================== diff -u -rcf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c -r484640af4db34eeea896eb26485c1b0d5eaea9d2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QAction.java (.../QAction.java) (revision cf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QAction.java (.../QAction.java) (revision 484640af4db34eeea896eb26485c1b0d5eaea9d2) @@ -227,6 +227,7 @@ QaAuthoringForm qaAuthoringForm = (QaAuthoringForm) form; + /** * the status of define later is determined from the property inspector and * by now, we know whether it is on or off @@ -276,13 +277,19 @@ { userAction=SUBMIT_ALL_CONTENT; } + else if (qaAuthoringForm.getSubmitOfflineFile() != null) + { + userAction=SUBMIT_OFFLINE_FILE; + } + else if (qaAuthoringForm.getSubmitOnlineFile() != null) + { + userAction=SUBMIT_ONLINE_FILE; + } logger.debug("user action is: " + userAction); QaUtils.persistRichText(request); - //logger.debug("before calling persistUploadFileInformation"); - //QaUtils.persistUploadFileInformation(request); - /** add a new question to Map */ + /** add a new question to Map */ if (userAction.equalsIgnoreCase(ADD_NEW_QUESTION)) { request.getSession().setAttribute(EDITACTIVITY_EDITMODE, new Boolean(true)); @@ -300,6 +307,20 @@ qaAuthoringForm.resetUserAction(); return (mapping.findForward(LOAD_STARTER)); } + else if (userAction.equalsIgnoreCase(SUBMIT_OFFLINE_FILE)) + { + logger.debug("will submit offline file: " + userAction); + QaUtils.addFileToContentRepository(request, qaAuthoringForm, true); + logger.debug("offline file added to repository successfully."); + qaAuthoringForm.resetUserAction(); + } + else if (userAction.equalsIgnoreCase(SUBMIT_ONLINE_FILE)) + { + logger.debug("will submit online file: " + userAction); + QaUtils.addFileToContentRepository(request, qaAuthoringForm, false); + logger.debug("online file added to repository successfully."); + qaAuthoringForm.resetUserAction(); + } else if (userAction.equalsIgnoreCase(SUBMIT_TAB_DONE)) { logger.debug("user is done with this tab."); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java =================================================================== diff -u -rcf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c -r484640af4db34eeea896eb26485c1b0d5eaea9d2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java (.../QaStarterAction.java) (revision cf64c7ef2a5b0d6dd1edc1b20f742e1b4523559c) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java (.../QaStarterAction.java) (revision 484640af4db34eeea896eb26485c1b0d5eaea9d2) @@ -68,6 +68,7 @@ package org.lamsfoundation.lams.tool.qa.web; import java.io.IOException; import java.util.Iterator; +import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; @@ -101,17 +102,22 @@ * A Map data structure is used to present the UI. * It is fetched by subsequent Action classes to manipulate its content and gets parsed in the presentation layer for display. */ - protected Map mapQuestionContent= new TreeMap(new QaComparator()); - public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, QaApplicationException { + + Map mapQuestionContent= new TreeMap(new QaComparator()); + LinkedList listUploadedOfflineFiles= new LinkedList(); + LinkedList listUploadedOnlineFiles= new LinkedList(); QaAuthoringForm qaAuthoringForm = (QaAuthoringForm) form; qaAuthoringForm.resetRadioBoxes(); request.getSession().setAttribute(IS_DEFINE_LATER,"false"); request.getSession().setAttribute(DISABLE_TOOL,""); - + request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILES,listUploadedOfflineFiles); + request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILES,listUploadedOnlineFiles); + + /** * retrive the service */