Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties =================================================================== diff -u -rb7285ac977222460053f4293718569503f17fe1e -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties (.../McResources.properties) (revision b7285ac977222460053f4293718569503f17fe1e) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties (.../McResources.properties) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -120,6 +120,7 @@ error.weights.total.invalid =Please correct this: The total weight must equal 100. error.file.notPersisted =An error occurred: The file is not viewable yet. Please save all the content first and check back. error.learningUser.notAvailable =Tool Activity Error! Can't continue. Tool Activity expects a user id. +error.fileName.empty =Please correct this: Under "Instructions", the file(name) to upload can not be empty. submit.successful =The content has been created successfully. Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUploadedFileDAO.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUploadedFileDAO.java (.../IMcUploadedFileDAO.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUploadedFileDAO.java (.../IMcUploadedFileDAO.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -166,8 +166,21 @@ * @return List */ + + public void removeOffLineFile(String filename, Long mcContentId); + + public void removeOnLineFile(String filename, Long mcContentId); + + public boolean isOffLineFilePersisted(String filename); + + public boolean isOnLineFilePersisted(String filename); + public boolean isUuidPersisted(String uuid); + public List getOnlineFilesMetaData(Long mcContentId); + + public List getOfflineFilesMetaData(Long mcContentId); + public void cleanUploadedFilesMetaData(); public void flush(); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUploadedFileDAO.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUploadedFileDAO.java (.../McUploadedFileDAO.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUploadedFileDAO.java (.../McUploadedFileDAO.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -47,7 +47,7 @@ private static final String GET_ONLINE_FILES_UUID = "select mcUploadedFile.uuid from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=1"; private static final String GET_ONLINE_FILES_NAME ="select mcUploadedFile.filename from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=1 order by mcUploadedFile.uuid"; - private static final String GET_OFFLINE_FILES_UUID = "select mcUploadedFile.uuid from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=0"; + private static final String GET_OFFLINE_FILES_UUID = "select mcUploadedFile.uuid from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=0"; private static final String GET_OFFLINE_FILES_NAME ="select mcUploadedFile.filename from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=0 order by mcUploadedFile.uuid"; private static final String GET_FILES_UUID ="select mcUploadedFile.uuid from McUploadedFile mcUploadedFile where mcUploadedFile.filename=:filename"; @@ -57,8 +57,16 @@ private static final String FIND_ALL_UPLOADED_FILE_DATA = "from mcUploadedFile in class McUploadedFile"; private static final String IS_UUID_PERSISTED ="select mcUploadedFile.uuid from McUploadedFile mcUploadedFile where mcUploadedFile.uuid=:uuid"; - + private static final String GET_ONLINE_FILES_METADATA = "from mcUploadedFile in class McUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=1"; + + private static final String GET_OFFLINE_FILES_METADATA = "from mcUploadedFile in class McUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.fileOnline=0"; + + private static final String IS_OFFLINE_FILENAME_PERSISTED ="select mcUploadedFile from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.filename=:filename and mcUploadedFile.fileOnline=0"; + + private static final String IS_ONLINE_FILENAME_PERSISTED ="select mcUploadedFile from McUploadedFile mcUploadedFile where mcUploadedFile.mcContentId = :mcContentId and mcUploadedFile.filename=:filename and mcUploadedFile.fileOnline=1"; + + public McUploadedFile getUploadedFileById(long submissionId) { return (McUploadedFile) this.getHibernateTemplate() @@ -104,12 +112,34 @@ } - public void cleanUploadedFilesMetaData() + public void removeOffLineFile(String filename, Long mcContentId) { HibernateTemplate templ = this.getHibernateTemplate(); - List list = getSession().createQuery(FIND_ALL_UPLOADED_FILE_DATA) + List list = getSession().createQuery(IS_OFFLINE_FILENAME_PERSISTED) + .setString("filename", filename) + .setLong("mcContentId", mcContentId.longValue()) .list(); + + if(list != null && list.size() > 0){ + Iterator listIterator=list.iterator(); + while (listIterator.hasNext()) + { + McUploadedFile mcFile=(McUploadedFile)listIterator.next(); + this.getSession().setFlushMode(FlushMode.AUTO); + templ.delete(mcFile); + templ.flush(); + } + } + } + public void removeOnLineFile(String filename, Long mcContentId) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(IS_ONLINE_FILENAME_PERSISTED) + .setString("filename", filename) + .setLong("mcContentId", mcContentId.longValue()) + .list(); + if(list != null && list.size() > 0){ Iterator listIterator=list.iterator(); while (listIterator.hasNext()) @@ -120,9 +150,60 @@ templ.flush(); } } + } + + public boolean isOffLineFilePersisted(String filename) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(IS_OFFLINE_FILENAME_PERSISTED) + .setString("filename", filename) + .list(); + + if (list != null && list.size() > 0) + { + return true; + } + return false; } + + + public boolean isOnLineFilePersisted(String filename) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(IS_ONLINE_FILENAME_PERSISTED) + .setString("filename", filename) + .list(); + + if (list != null && list.size() > 0) + { + return true; + } + return false; + } + + public List getOnlineFilesMetaData(Long mcContentId) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(GET_ONLINE_FILES_METADATA) + .setLong("mcContentId", mcContentId.longValue()) + .list(); + + return list; + } + + public List getOfflineFilesMetaData(Long mcContentId) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(GET_OFFLINE_FILES_METADATA) + .setLong("mcContentId", mcContentId.longValue()) + .list(); + + return list; + } + + public boolean isUuidPersisted(String uuid) { HibernateTemplate templ = this.getHibernateTemplate(); @@ -137,6 +218,26 @@ return false; } + + public void cleanUploadedFilesMetaData() + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(FIND_ALL_UPLOADED_FILE_DATA) + .list(); + + if(list != null && list.size() > 0){ + Iterator listIterator=list.iterator(); + while (listIterator.hasNext()) + { + McUploadedFile mcFile=(McUploadedFile)listIterator.next(); + this.getSession().setFlushMode(FlushMode.AUTO); + templ.delete(mcFile); + templ.flush(); + } + } + } + + public String getFileUuid(String filename) { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -227,6 +227,18 @@ public NodeKey uploadFile(InputStream istream, String filename, String contentType, String fileType) throws RepositoryCheckedException; + public void removeOffLineFile(String filename, Long mcContentId) throws McApplicationException; + + public void removeOnLineFile(String filename, Long mcContentId) throws McApplicationException; + + public boolean isOffLineFilePersisted(String filename) throws McApplicationException; + + public boolean isOnLineFilePersisted(String filename) throws McApplicationException; + public boolean isUuidPersisted(String uuid) throws McApplicationException; + + public List getOnlineFilesMetaData(Long mcContentId) throws McApplicationException; + + public List getOfflineFilesMetaData(Long mcContentId) throws McApplicationException; } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -1752,8 +1752,63 @@ } + public void removeOffLineFile(String filename, Long mcContentId) throws McApplicationException + { + try + { + mcUploadedFileDAO.removeOffLineFile(filename, mcContentId); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is removing offline filename" + + e.getMessage(), + e); + } + } + + public void removeOnLineFile(String filename, Long mcContentId) throws McApplicationException + { + try + { + mcUploadedFileDAO.removeOnLineFile(filename, mcContentId); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is removing online filename" + + e.getMessage(), + e); + } + } + public boolean isOffLineFilePersisted(String filename) throws McApplicationException + { + try + { + return mcUploadedFileDAO.isOffLineFilePersisted(filename); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is checking if offline filename is persisted: " + + e.getMessage(), + e); + } + } + + public boolean isOnLineFilePersisted(String filename) throws McApplicationException + { + try + { + return mcUploadedFileDAO.isOnLineFilePersisted(filename); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is checking if online filename is persisted: " + + e.getMessage(), + e); + } + } + public String getFileUuid(String filename) throws McApplicationException { try @@ -1769,6 +1824,17 @@ } + public List getOnlineFilesMetaData(Long mcContentId) throws McApplicationException + { + return mcUploadedFileDAO.getOnlineFilesMetaData(mcContentId); + } + + + public List getOfflineFilesMetaData(Long mcContentId) throws McApplicationException + { + return mcUploadedFileDAO.getOfflineFilesMetaData(mcContentId); + } + public boolean isUuidPersisted(String uuid) throws McApplicationException { return mcUploadedFileDAO.isUuidPersisted(uuid); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/AuthoringUtil.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/AuthoringUtil.java (.../AuthoringUtil.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/AuthoringUtil.java (.../AuthoringUtil.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -9,6 +9,7 @@ import java.util.Date; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -29,6 +30,7 @@ import org.lamsfoundation.lams.tool.mc.McContent; import org.lamsfoundation.lams.tool.mc.McOptsContent; import org.lamsfoundation.lams.tool.mc.McQueContent; +import org.lamsfoundation.lams.tool.mc.McUploadedFile; import org.lamsfoundation.lams.tool.mc.McUtils; import org.lamsfoundation.lams.tool.mc.service.IMcService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -1562,11 +1564,14 @@ FormFile theOfflineFile = mcAuthoringForm.getTheOfflineFile(); logger.debug("retrieved theOfflineFile: " + theOfflineFile); - try { stream = theOfflineFile.getInputStream(); fileName=theOfflineFile.getFileName(); + if (fileName.length() == 0) + { + return null; + } logger.debug("retrieved fileName: " + fileName); fileProperty="OFFLINE"; @@ -1580,11 +1585,20 @@ logger.debug("io exception occured in accessing the repository server for the offline file : " + e.getMessage()); } - List listUploadedOfflineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILENAMES); - logger.debug("listUploadedOfflineFileNames:" + listUploadedOfflineFileNames); - listUploadedOfflineFileNames.add(fileName); - logger.debug("listUploadedOfflineFileNames after add :" + listUploadedOfflineFileNames); - request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILENAMES,listUploadedOfflineFileNames); + if (fileName.length() > 0) + { + List listUploadedOfflineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILENAMES); + logger.debug("listUploadedOfflineFileNames:" + listUploadedOfflineFileNames); + int index=findFileNameIndex(listUploadedOfflineFileNames, fileName); + logger.debug("index:" + index); + if (index == 0) + { + listUploadedOfflineFileNames.add(fileName); + logger.debug("listUploadedOfflineFileNames after add :" + listUploadedOfflineFileNames); + request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILENAMES,listUploadedOfflineFileNames); + } + } + } else { @@ -1595,6 +1609,12 @@ { stream = theOnlineFile.getInputStream(); fileName=theOnlineFile.getFileName(); + + if (fileName.length() == 0) + { + return null; + } + logger.debug("retrieved fileName: " + fileName); fileProperty="ONLINE"; @@ -1607,11 +1627,20 @@ { logger.debug("io exception occured in accessing the repository server for the online file : " + e.getMessage()); } - List listUploadedOnlineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILENAMES); - logger.debug("listUploadedOnlineFileNames:" + listUploadedOnlineFileNames); - listUploadedOnlineFileNames.add(fileName); - logger.debug("listUploadedOnlineFileNames after add :" + listUploadedOnlineFileNames); - request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILENAMES,listUploadedOnlineFileNames); + + if (fileName.length() > 0) + { + List listUploadedOnlineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILENAMES); + logger.debug("listUploadedOnlineFileNames:" + listUploadedOnlineFileNames); + int index=findFileNameIndex(listUploadedOnlineFileNames, fileName); + logger.debug("index:" + index); + if (index == 0) + { + listUploadedOnlineFileNames.add(fileName); + logger.debug("listUploadedOnlineFileNames after add :" + listUploadedOnlineFileNames); + request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILENAMES,listUploadedOnlineFileNames); + } + } } IMcService mcService =McUtils.getToolService(request); @@ -1634,7 +1663,53 @@ return mcAttachmentDTO; } + + public static List populateMetaDataAsAttachments(List listOfflineFilesMetaData) + { + List listAttachments=new LinkedList(); + + Iterator itList = listOfflineFilesMetaData.iterator(); + while (itList.hasNext()) + { + McUploadedFile mcUploadedFile=(McUploadedFile)itList.next(); + logger.debug("mcUploadedFile:" + mcUploadedFile); + logger.debug("mcUploadedFile details, uid" + mcUploadedFile.getUid().toString()); + logger.debug("mcUploadedFile details, uuid" + mcUploadedFile.getUuid()); + logger.debug("mcUploadedFile details, filename" + mcUploadedFile.getFilename()); + logger.debug("mcUploadedFile details, isOfflineFile" + !mcUploadedFile.isFileOnline()); + + McAttachmentDTO mcAttachmentDTO= new McAttachmentDTO(); + mcAttachmentDTO.setUid(mcUploadedFile.getUid().toString()); + mcAttachmentDTO.setUuid(mcUploadedFile.getUuid()); + mcAttachmentDTO.setFilename(mcUploadedFile.getFilename()); + mcAttachmentDTO.setOfflineFile(!mcUploadedFile.isFileOnline()); + + listAttachments.add(mcAttachmentDTO); + logger.debug("listAttachments after add" + listAttachments); + } + logger.debug("final listAttachments after populating all: " + listAttachments); + return listAttachments; + } + + + public static List populateMetaDataAsFilenames(List listFilesMetaData) + { + List listFilenames=new LinkedList(); + + Iterator itList = listFilesMetaData.iterator(); + while (itList.hasNext()) + { + McAttachmentDTO mcAttachmentDTO=(McAttachmentDTO)itList.next(); + logger.debug("current filename" + mcAttachmentDTO.getFilename()); + listFilenames.add(mcAttachmentDTO.getFilename()); + logger.debug("listFilenames after add" + listFilenames); + } + logger.debug("final listFilenames after populating all: " + listFilenames); + return listFilenames; + } + + public static void removeFileItem(HttpServletRequest request, String filename, String offlineFile) { logger.debug("offlineFile:" + offlineFile); @@ -1643,9 +1718,10 @@ logger.debug("will remove an offline file"); List listUploadedOfflineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILENAMES); logger.debug("listUploadedOfflineFileNames:" + listUploadedOfflineFileNames); - int index=findFileNameIndex(listUploadedOfflineFileNames, filename); - logger.debug("returned index:" + index); - listUploadedOfflineFileNames.remove(index); + + listUploadedOfflineFileNames.remove(filename); + logger.debug("removed offline filename:" + filename); + logger.debug("listUploadedOfflineFileNames after remove :" + listUploadedOfflineFileNames); request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILENAMES,listUploadedOfflineFileNames); } @@ -1654,9 +1730,10 @@ logger.debug("will remove an online file"); List listUploadedOnlineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILENAMES); logger.debug("listUploadedOnlineFileNames:" + listUploadedOnlineFileNames); - int index=findFileNameIndex(listUploadedOnlineFileNames, filename); - logger.debug("returned index:" + index); - listUploadedOnlineFileNames.remove(index); + + listUploadedOnlineFileNames.remove(filename); + logger.debug("removed online filename:" + filename); + logger.debug("listUploadedOnlineFileNames after remove :" + listUploadedOnlineFileNames); request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILENAMES,listUploadedOnlineFileNames); } @@ -1665,12 +1742,12 @@ public static int findFileNameIndex(List listUploadedFileNames, String filename) { - Iterator itListUploadedOfflineFileNames = listUploadedFileNames.iterator(); + Iterator itListUploadedFileNames = listUploadedFileNames.iterator(); int mainIndex=0; - while (itListUploadedOfflineFileNames.hasNext()) + while (itListUploadedFileNames.hasNext()) { mainIndex++; - String currentFilename=(String) itListUploadedOfflineFileNames.next(); + String currentFilename=(String) itListUploadedFileNames.next(); logger.debug("currentFilename :" + currentFilename); if (currentFilename.equals(filename)) { @@ -1724,8 +1801,94 @@ } + public static void removeRedundantOfflineFileItems(HttpServletRequest request, McContent mcContent) + { + IMcService mcService =McUtils.getToolService(request); + + List allOfflineFilenames=mcService.retrieveMcUploadedOfflineFilesName(mcContent.getUid()); + logger.debug("allOfflineFilenames:" + allOfflineFilenames); + + List listUploadedOfflineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_OFFLINE_FILENAMES); + logger.debug("listUploadedOfflineFileNames:" + listUploadedOfflineFileNames); + + boolean matchFound=false; + Iterator itAllOfflineFiles = allOfflineFilenames.iterator(); + while (itAllOfflineFiles.hasNext()) + { + String filename =(String)itAllOfflineFiles.next(); + logger.debug("filename: " + filename); + + matchFound=false; + Iterator itFiles = listUploadedOfflineFileNames.iterator(); + while (itFiles.hasNext()) + { + matchFound=false; + String currentFilename =(String)itFiles.next(); + logger.debug("currentFilename: " + currentFilename); + + if (filename.equals(currentFilename)) + { + logger.debug("filename match found : " + currentFilename); + matchFound=true; + break; + } + } + + logger.debug("matchFound : " + matchFound); + if (matchFound == false) + { + logger.debug("matchFound is false for filename: " + filename); + mcService.removeOffLineFile(filename, mcContent.getUid()); + logger.debug("filename removed: " + filename); + } + } + } + public static void removeRedundantOnlineFileItems(HttpServletRequest request, McContent mcContent) + { + IMcService mcService =McUtils.getToolService(request); + + List allOnlineFilenames=mcService.retrieveMcUploadedOnlineFilesName(mcContent.getUid()); + logger.debug("allOnlineFilenames:" + allOnlineFilenames); + + List listUploadedOnlineFileNames=(List)request.getSession().getAttribute(LIST_UPLOADED_ONLINE_FILENAMES); + logger.debug("listUploadedOnlineFileNames:" + listUploadedOnlineFileNames); + + boolean matchFound=false; + Iterator itAllOnlineFiles = allOnlineFilenames.iterator(); + while (itAllOnlineFiles.hasNext()) + { + String filename =(String)itAllOnlineFiles.next(); + logger.debug("filename: " + filename); + + matchFound=false; + Iterator itFiles = listUploadedOnlineFileNames.iterator(); + while (itFiles.hasNext()) + { + matchFound=false; + String currentFilename =(String)itFiles.next(); + logger.debug("currentFilename: " + currentFilename); + + if (filename.equals(currentFilename)) + { + logger.debug("filename match found : " + currentFilename); + matchFound=true; + break; + } + } + + logger.debug("matchFound : " + matchFound); + if (matchFound == false) + { + logger.debug("matchFound is false for filename: " + filename); + mcService.removeOnLineFile(filename, mcContent.getUid()); + logger.debug("filename removed: " + filename); + } + } + } + + public void simulatePropertyInspector_RunOffline(HttpServletRequest request) { IMcService mcService =McUtils.getToolService(request); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java (.../McAction.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java (.../McAction.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -1429,6 +1429,15 @@ logger.debug("start persisting online files metadata"); AuthoringUtil.persistFilesMetaData(request, false, mcContent); + /* making sure only the filenames in the session cache are persisted and the others in the db are removed*/ + logger.debug("start removing redundant offline files metadata"); + AuthoringUtil.removeRedundantOfflineFileItems(request, mcContent); + + logger.debug("start removing redundant online files metadata"); + AuthoringUtil.removeRedundantOnlineFileItems(request, mcContent); + + logger.debug("done removing redundant files"); + //logger.debug("will do addUploadedFilesMetaData"); //McUtils.addUploadedFilesMetaData(request,mcContent); //logger.debug("done addUploadedFilesMetaData"); @@ -1499,7 +1508,7 @@ request.getSession().setAttribute(EDIT_OPTIONS_MODE, new Integer(2)); logger.debug("setting EDIT_OPTIONS_MODE :" + 2); - return (mapping.findForward(ALL_INSTRUCTIONS)); + return (mapping.findForward(LOAD_QUESTIONS)); } InputStream fileInputStream=mcService.downloadFile(new Long(uuid), null); @@ -1577,9 +1586,13 @@ logger.debug("offlineFile:" + offlineFile); logger.debug("start removing file:" + filename + " it is an:" + offlineFile); - AuthoringUtil.removeFileItem(request, filename, offlineFile); - logger.debug("done removing offline file"); + if (!filename.equals("")) + { + AuthoringUtil.removeFileItem(request, filename, offlineFile); + logger.debug("done removing offline file"); + } + mcAuthoringForm.resetUserAction(); request.getSession().setAttribute(EDIT_OPTIONS_MODE, new Integer(0)); logger.debug("setting EDIT_OPTIONS_MODE :" + 0); @@ -1685,6 +1698,21 @@ logger.debug("will uploadFile for offline file:"); McAttachmentDTO mcAttachmentDTO=AuthoringUtil.uploadFile(request, mcAuthoringForm, true); logger.debug("returned mcAttachmentDTO:" + mcAttachmentDTO); + + if (mcAttachmentDTO == null) + { + ActionMessages errors= new ActionMessages(); + errors= new ActionMessages(); + errors.add(Globals.ERROR_KEY,new ActionMessage("error.fileName.empty")); + saveErrors(request,errors); + mcAuthoringForm.resetUserAction(); + persistError(request,"error.fileName.empty"); + + request.getSession().setAttribute(EDIT_OPTIONS_MODE, new Integer(0)); + logger.debug("setting EDIT_OPTIONS_MODE :" + 0); + return (mapping.findForward(LOAD_QUESTIONS)); + } + List listOfflineFilesMetaData =(List)request.getSession().getAttribute(LIST_OFFLINEFILES_METADATA); logger.debug("listOfflineFilesMetaData:" + listOfflineFilesMetaData); @@ -1731,6 +1759,20 @@ logger.debug("will uploadFile for online file:"); McAttachmentDTO mcAttachmentDTO=AuthoringUtil.uploadFile(request, mcAuthoringForm, false); logger.debug("returned mcAttachmentDTO:" + mcAttachmentDTO); + + if (mcAttachmentDTO == null) + { + ActionMessages errors= new ActionMessages(); + errors= new ActionMessages(); + errors.add(Globals.ERROR_KEY,new ActionMessage("error.fileName.empty")); + saveErrors(request,errors); + mcAuthoringForm.resetUserAction(); + persistError(request,"error.fileName.empty"); + + request.getSession().setAttribute(EDIT_OPTIONS_MODE, new Integer(0)); + logger.debug("setting EDIT_OPTIONS_MODE :" + 0); + return (mapping.findForward(LOAD_QUESTIONS)); + } List listOnlineFilesMetaData =(List)request.getSession().getAttribute(LIST_ONLINEFILES_METADATA); logger.debug("listOnlineFilesMetaData:" + listOnlineFilesMetaData); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java (.../McStarterAction.java) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java (.../McStarterAction.java) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -442,6 +442,27 @@ logger.debug("starter initialized the existing Questions Map: " + request.getSession().getAttribute(MAP_QUESTIONS_CONTENT)); AuthoringUtil.refreshMaps(request, toolContentId); + /*process offline files metadata*/ + List listOfflineFilesMetaData=mcService.getOfflineFilesMetaData(mcContent.getUid()); + logger.debug("existing listOfflineFilesMetaData, to be structured as McAttachmentDTO: " + listOfflineFilesMetaData); + listOfflineFilesMetaData=AuthoringUtil.populateMetaDataAsAttachments(listOfflineFilesMetaData); + logger.debug("populated listOfflineFilesMetaData: " + listOfflineFilesMetaData); + request.getSession().setAttribute(LIST_OFFLINEFILES_METADATA, listOfflineFilesMetaData); + + List listUploadedOfflineFileNames=AuthoringUtil.populateMetaDataAsFilenames(listOfflineFilesMetaData); + logger.debug("returned from db listUploadedOfflineFileNames: " + listUploadedOfflineFileNames); + request.getSession().setAttribute(LIST_UPLOADED_OFFLINE_FILENAMES, listUploadedOfflineFileNames); + + /*process online files metadata*/ + List listOnlineFilesMetaData=mcService.getOnlineFilesMetaData(mcContent.getUid()); + logger.debug("existing listOnlineFilesMetaData, to be structured as McAttachmentDTO: " + listOnlineFilesMetaData); + listOnlineFilesMetaData=AuthoringUtil.populateMetaDataAsAttachments(listOnlineFilesMetaData); + logger.debug("populated listOnlineFilesMetaData: " + listOnlineFilesMetaData); + request.getSession().setAttribute(LIST_ONLINEFILES_METADATA, listOnlineFilesMetaData); + + List listUploadedOnlineFileNames=AuthoringUtil.populateMetaDataAsFilenames(listOnlineFilesMetaData); + logger.debug("returned from db listUploadedOnlineFileNames: " + listUploadedOnlineFileNames); + request.getSession().setAttribute(LIST_UPLOADED_ONLINE_FILENAMES, listUploadedOnlineFileNames); } @@ -595,6 +616,8 @@ request.getSession().setAttribute(LIST_OFFLINEFILES_METADATA, listOfflineFilesMetaData); request.getSession().setAttribute(LIST_ONLINEFILES_METADATA, listOnlineFilesMetaData); + + Map mapQuestionsContent= new TreeMap(new McComparator()); Map mapOptionsContent= new TreeMap(new McComparator()); Map mapDefaultOptionsContent= new TreeMap(new McComparator()); Index: lams_tool_lamc/web/InstructionsContent.jsp =================================================================== diff -u -ra94de5ff6e0fa1bf65e068d94c81ccdd232c06df -rf6991bff0a6a158b9432f338079cc3fc650dd389 --- lams_tool_lamc/web/InstructionsContent.jsp (.../InstructionsContent.jsp) (revision a94de5ff6e0fa1bf65e068d94c81ccdd232c06df) +++ lams_tool_lamc/web/InstructionsContent.jsp (.../InstructionsContent.jsp) (revision f6991bff0a6a158b9432f338079cc3fc650dd389) @@ -62,7 +62,7 @@ ','viewFileItem');"> - ','deleteFileItem', '1');"> + ','deleteFileItem', '1');"> @@ -103,10 +103,10 @@ - ','viewFileItem');"> + ','viewFileItem');"> - ','deleteFileItem', '0');"> + ','deleteFileItem', '0');"> @@ -115,6 +115,7 @@ +