Index: lams_tool_sbmt/build.xml =================================================================== diff -u -r86bb62d3caffa558350cdb31d6d965f8bd936cd6 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/build.xml (.../build.xml) (revision 86bb62d3caffa558350cdb31d6d965f8bd936cd6) +++ lams_tool_sbmt/build.xml (.../build.xml) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -441,7 +441,7 @@ - + Index: lams_tool_sbmt/conf/hibernate/mappings/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml =================================================================== diff -u -r759c8f83bff5a495f44ea5532762395ee626c7c2 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/conf/hibernate/mappings/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml (.../InstructionFiles.hbm.xml) (revision 759c8f83bff5a495f44ea5532762395ee626c7c2) +++ lams_tool_sbmt/conf/hibernate/mappings/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml (.../InstructionFiles.hbm.xml) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -12,8 +12,8 @@ > Index: lams_tool_sbmt/db/sql/create_lams_tool_sbmt.sql =================================================================== diff -u -r4bb149982343d7316540227e02553e26c7797ba5 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/db/sql/create_lams_tool_sbmt.sql (.../create_lams_tool_sbmt.sql) (revision 4bb149982343d7316540227e02553e26c7797ba5) +++ lams_tool_sbmt/db/sql/create_lams_tool_sbmt.sql (.../create_lams_tool_sbmt.sql) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -13,13 +13,13 @@ primary key (content_id) ); create table tl_lasbmt11_instruction_files ( - file_id bigint not null auto_increment, + uid bigint not null auto_increment, uuid bigint, version_id bigint, type varchar(20), name varchar(255), content_id bigint, - primary key (file_id) + primary key (uid) ); create table tl_lasbmt11_report ( report_id bigint not null auto_increment, Index: lams_tool_sbmt/db/sql/table-schema.sql =================================================================== diff -u -r33e300d2262bcd06e34d469d3c628d12118e2cb8 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/db/sql/table-schema.sql (.../table-schema.sql) (revision 33e300d2262bcd06e34d469d3c628d12118e2cb8) +++ lams_tool_sbmt/db/sql/table-schema.sql (.../table-schema.sql) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -23,13 +23,13 @@ primary key (content_id) ); create table tl_lasbmt11_instruction_files ( - file_id bigint not null auto_increment, + uid bigint not null auto_increment, uuid bigint, version_id bigint, type varchar(20), name varchar(255), content_id bigint, - primary key (file_id) + primary key (uid) ); create table tl_lasbmt11_report ( report_id bigint not null auto_increment, Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml =================================================================== diff -u -r759c8f83bff5a495f44ea5532762395ee626c7c2 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml (.../InstructionFiles.hbm.xml) (revision 759c8f83bff5a495f44ea5532762395ee626c7c2) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.hbm.xml (.../InstructionFiles.hbm.xml) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -12,8 +12,8 @@ > Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.java =================================================================== diff -u -r496ea8c9fb835a69057f28bbdfa2f2749b6f297c -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.java (.../InstructionFiles.java) (revision 496ea8c9fb835a69057f28bbdfa2f2749b6f297c) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/InstructionFiles.java (.../InstructionFiles.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -32,24 +32,24 @@ private static final long serialVersionUID = 3555065437595925246L; private static Logger log = Logger.getLogger(InstructionFiles.class); - private Long fileID; + private Long uid; private Long uuID; private Long versionID; private String name; private String type; /** - * @hibernate.id generator-class="identity" type="java.lang.Long" column="file_id" - * @return Returns the fileID. + * @hibernate.id generator-class="identity" type="java.lang.Long" column="uid" + * @return Returns the uid. */ - public Long getFileID() { - return fileID; + public Long getUid() { + return uid; } /** - * @param fileID The fileID to set. + * @param uid The uid to set. */ - public void setFileID(Long fileID) { - this.fileID = fileID; + public void setUid(Long fileID) { + this.uid = fileID; } /** * Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r9310fe30da9974d1f174319efc054e3bde9eed84 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 9310fe30da9974d1f174319efc054e3bde9eed84) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -24,19 +24,16 @@ import java.io.FileNotFoundException; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; -import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts.upload.FormFile; @@ -91,119 +88,19 @@ private static Logger log = Logger.getLogger(SubmitFilesService.class); private ISubmitFilesContentDAO submitFilesContentDAO; - private ISubmitFilesReportDAO submitFilesReportDAO; - private ISubmitFilesSessionDAO submitFilesSessionDAO; - private ISubmissionDetailsDAO submissionDetailsDAO; - private ILearnerDAO learnerDAO; + private IUserDAO userDAO; - private SbmtToolContentHandler toolContentHandler; - private IUserDAO userDAO; private ILamsToolService toolService; private ILearnerService learnerService; private IRepositoryService repositoryService; - /*************************************************************************** - * Property Injection Methods - **************************************************************************/ - /** - * @param submitFilesContentDAO - * The submitFilesContentDAO to set. - */ - public void setSubmitFilesContentDAO( - ISubmitFilesContentDAO submitFilesContentDAO) { - this.submitFilesContentDAO = submitFilesContentDAO; - } - - /** - * @param submitFilesReportDAO - * The submitFilesReportDAO to set. - */ - public void setSubmitFilesReportDAO( - ISubmitFilesReportDAO submitFilesReportDAO) { - this.submitFilesReportDAO = submitFilesReportDAO; - } - - /** - * @param submitFilesSessionDAO - * The submitFilesSessionDAO to set. - */ - public void setSubmitFilesSessionDAO( - ISubmitFilesSessionDAO submitFilesSessionDAO) { - this.submitFilesSessionDAO = submitFilesSessionDAO; - } - - /** - * @param submissionDetailsDAO The submissionDetailsDAO to set. - */ - public void setSubmissionDetailsDAO( - ISubmissionDetailsDAO submissionDetailsDAO) { - this.submissionDetailsDAO = submissionDetailsDAO; - } - - - /** - * @return Returns the toolContentHandler. - */ - public SbmtToolContentHandler getToolContentHandler() { - return toolContentHandler; - } - - /** - * @param toolContentHandler The toolContentHandler to set. - */ - public void setToolContentHandler(SbmtToolContentHandler toolContentHandler) { - this.toolContentHandler = toolContentHandler; - } - - /** - * @param userDAO The userDAO to set. - */ - public void setUserDAO(IUserDAO userDAO) { - this.userDAO = userDAO; - } - - /** - * @return Returns the learnerDAO. - */ - public ILearnerDAO getLearnerDAO() { - return learnerDAO; - } - - /** - * @param learnerDAO The learnerDAO to set. - */ - public void setLearnerDAO(ILearnerDAO learnerDAO) { - this.learnerDAO = learnerDAO; - } - - public Learner getLearner(Long sessionID, Long userID) { - return learnerDAO.getLearner(sessionID,userID); - } - - public ILearnerService getLearnerService() { - return learnerService; - } - - public void setLearnerService(ILearnerService learnerService) { - this.learnerService = learnerService; - } - - public ILamsToolService getToolService() { - return toolService; - } - - public void setToolService(ILamsToolService toolService) { - this.toolService = toolService; - } - - /** * (non-Javadoc) * * @see org.lamsfoundation.lams.tool.ToolContentManager#copyToolContent(java.lang.Long, @@ -536,40 +433,18 @@ * @see org.lamsfoundation.lams.tool.ToolSessionManager# uploadFileToContent(Long,FormFile ) */ public InstructionFiles uploadFileToContent(Long contentID, FormFile uploadFile,String fileType) throws SubmitFilesException{ - InstructionFiles refile = null; if(uploadFile == null || StringUtils.isEmpty(uploadFile.getFileName())) throw new SubmitFilesException("Could not find upload file: " + uploadFile); - SubmitFilesContent content = getSubmitFilesContent(contentID); - if ( content == null || !contentID.equals(content.getContentID())) { - content = new SubmitFilesContent(); - content.setContentID(contentID); - //user firstly upload file without any other input, even the not-null - //field "title". Set title as default title. - content.setTitle(SbmtConstants.DEFAULT_TITLE); - } NodeKey nodeKey = processFile(uploadFile,fileType); - Set fileSet = content.getInstructionFiles(); - if(fileSet == null){ - fileSet = new HashSet(); - content.setInstructionFiles(fileSet); - } InstructionFiles file = new InstructionFiles(); file.setType(fileType); file.setUuID(nodeKey.getUuid()); file.setVersionID(nodeKey.getVersion()); file.setName(uploadFile.getFileName()); - fileSet.add(file); - submitFilesContentDAO.save(content); - refile = new InstructionFiles(); - try { - PropertyUtils.copyProperties(refile,file); - } catch (Exception e) { - throw new SubmitFilesException("Could not get return InstructionFile instance" +e.getMessage()); - } - return refile; + return file; } /** * (non-Javadoc) @@ -821,7 +696,6 @@ content = (SubmitFilesContent) defaultContent.clone(); content.setContentID(contentID); saveSubmitFilesContent(content); - return content; } @@ -832,4 +706,101 @@ learners = new ArrayList(); //return sized 0 list rather than null value return learners; } + + /*************************************************************************** + * Property Injection Methods + **************************************************************************/ + + /** + * @param submitFilesContentDAO + * The submitFilesContentDAO to set. + */ + public void setSubmitFilesContentDAO( + ISubmitFilesContentDAO submitFilesContentDAO) { + this.submitFilesContentDAO = submitFilesContentDAO; + } + + /** + * @param submitFilesReportDAO + * The submitFilesReportDAO to set. + */ + public void setSubmitFilesReportDAO( + ISubmitFilesReportDAO submitFilesReportDAO) { + this.submitFilesReportDAO = submitFilesReportDAO; + } + + /** + * @param submitFilesSessionDAO + * The submitFilesSessionDAO to set. + */ + public void setSubmitFilesSessionDAO( + ISubmitFilesSessionDAO submitFilesSessionDAO) { + this.submitFilesSessionDAO = submitFilesSessionDAO; + } + + /** + * @param submissionDetailsDAO The submissionDetailsDAO to set. + */ + public void setSubmissionDetailsDAO( + ISubmissionDetailsDAO submissionDetailsDAO) { + this.submissionDetailsDAO = submissionDetailsDAO; + } + + + /** + * @return Returns the toolContentHandler. + */ + public SbmtToolContentHandler getToolContentHandler() { + return toolContentHandler; + } + + /** + * @param toolContentHandler The toolContentHandler to set. + */ + public void setToolContentHandler(SbmtToolContentHandler toolContentHandler) { + this.toolContentHandler = toolContentHandler; + } + + /** + * @param userDAO The userDAO to set. + */ + public void setUserDAO(IUserDAO userDAO) { + this.userDAO = userDAO; + } + + /** + * @return Returns the learnerDAO. + */ + public ILearnerDAO getLearnerDAO() { + return learnerDAO; + } + + /** + * @param learnerDAO The learnerDAO to set. + */ + public void setLearnerDAO(ILearnerDAO learnerDAO) { + this.learnerDAO = learnerDAO; + } + + public Learner getLearner(Long sessionID, Long userID) { + return learnerDAO.getLearner(sessionID,userID); + } + + public ILearnerService getLearnerService() { + return learnerService; + } + + public void setLearnerService(ILearnerService learnerService) { + this.learnerService = learnerService; + } + + public ILamsToolService getToolService() { + return toolService; + } + + public void setToolService(ILamsToolService toolService) { + this.toolService = toolService; + } + + } \ No newline at end of file Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java =================================================================== diff -u -r06ec9e5c95aa91c3758457a2797c86557bd9da59 -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision 06ec9e5c95aa91c3758457a2797c86557bd9da59) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -33,4 +33,6 @@ //TODO: hard code, need to read from config file/db public static final String TOOL_URL_BASE = "/lams/tool/lasbmt11/"; + public static final String ATTACHMENT_LIST = "attachmentList"; + public static final String DELETED_ATTACHMENT_LIST = "deletedAttachmentList"; } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java =================================================================== diff -u -rc97960ddf053d2035d4285dc77dde54ffc2df31d -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java (.../AuthoringAction.java) (revision c97960ddf053d2035d4285dc77dde54ffc2df31d) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java (.../AuthoringAction.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -22,8 +22,13 @@ */ package org.lamsfoundation.lams.tool.sbmt.web; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -38,6 +43,7 @@ import org.apache.struts.actions.LookupDispatchAction; import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; +import org.lamsfoundation.lams.tool.sbmt.InstructionFiles; import org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent; import org.lamsfoundation.lams.tool.sbmt.dto.AuthoringDTO; import org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService; @@ -89,7 +95,41 @@ if(content.getContentID().equals(persistContent.getContentID())){ //keep Set type attribute for persist content becuase this update only //include updating simple properties from web page(i.e. text value, list value, etc) - content.setInstructionFiles(persistContent.getInstructionFiles()); + Set attPOSet = persistContent.getInstructionFiles(); + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + Iterator iter = attachmentList.iterator(); + while(iter.hasNext()){ + InstructionFiles newAtt = (InstructionFiles) iter.next(); + //add new attachment, UID is not null + if(newAtt.getUid() == null) + attPOSet.add(newAtt); + } + attachmentList.clear(); + + iter = deleteAttachmentList.iterator(); + while(iter.hasNext()){ + InstructionFiles delAtt = (InstructionFiles) iter.next(); + //delete from repository + submitFilesService.deleteFromRepository(delAtt.getUuID(),delAtt.getVersionID()); + //it is an existed att, then delete it from current attachmentPO + if(delAtt.getUid() != null){ + Iterator attIter = attPOSet.iterator(); + while(attIter.hasNext()){ + InstructionFiles att = (InstructionFiles) attIter.next(); + if(delAtt.getUid().equals(att.getUid())){ + attIter.remove(); + break; + } + } + submitFilesService.deleteInstructionFile(content.getContentID(), delAtt.getUuID(), delAtt + .getVersionID(), delAtt.getType()); + }//end remove from persist value + } + deleteAttachmentList.clear(); + + //copy back + content.setInstructionFiles(attPOSet); content.setToolSession(persistContent.getToolSession()); //copy web page value into persist content, as above, the "Set" type value kept. PropertyUtils.copyProperties(persistContent,content); @@ -150,18 +190,32 @@ SubmitFilesContent content = getContent(form); //Call setUp() as early as possible , so never loss the screen value if any exception happen. setUp(request,content); - submitFilesService = SubmitFilesServiceProxy.getSubmitFilesService(this - .getServlet().getServletContext()); - //send back the upload file list and display them on page - SubmitFilesContent persistContent = submitFilesService.getSubmitFilesContent(content.getContentID()); - content.setInstructionFiles(persistContent.getInstructionFiles()); - //content change, so call setup again. - setUp(request,content); + + //upload to repository + InstructionFiles att = submitFilesService.uploadFileToContent(content.getContentID(), file, type); - submitFilesService.uploadFileToContent(content.getContentID(), file, type); + //handle session value + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + //first check exist attachment and delete old one (if exist) to deletedAttachmentList + Iterator iter = attachmentList.iterator(); + InstructionFiles existAtt; + while(iter.hasNext()){ + existAtt = (InstructionFiles) iter.next(); + if(StringUtils.equals(existAtt.getName(),att.getName())){ + //if there is same name attachment, delete old one + deleteAttachmentList.add(existAtt); + iter.remove(); + break; + } + } + //add to attachmentList + attachmentList.add(att); + //add new uploaded file into DTO becuase content instruction file list comes from persistCotent. //so it is not need refresh content again. //content change, so call setup again. + content.setInstructionFiles(new HashSet(attachmentList)); setUp(request,content); return mapping.getInputForward(); @@ -197,6 +251,10 @@ persistContent.setContentID(contentID); } setUp(request,persistContent); + + //initialize attachmentList + List attachmentList = getAttachmentList(request); + attachmentList.addAll(persistContent.getInstructionFiles()); //set back STRUTS component value DynaActionForm authForm = (DynaActionForm) form; @@ -259,5 +317,33 @@ AuthoringDTO authorDto = new AuthoringDTO(content); request.setAttribute(SbmtConstants.AUTHORING_DTO,authorDto); } - + /** + * @param request + * @return + */ + private List getAttachmentList(HttpServletRequest request) { + return getListFromSession(request,SbmtConstants.ATTACHMENT_LIST); + } + /** + * @param request + * @return + */ + private List getDeletedAttachmentList(HttpServletRequest request) { + return getListFromSession(request,SbmtConstants.DELETED_ATTACHMENT_LIST); + } + /** + * Get java.util.List from HttpSession by given name. + * + * @param request + * @param name + * @return + */ + private List getListFromSession(HttpServletRequest request,String name) { + List list = (List) request.getSession().getAttribute(name); + if(list == null){ + list = new ArrayList(); + request.getSession().setAttribute(name,list); + } + return list; + } } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/DeleteFileAction.java =================================================================== diff -u -rc97960ddf053d2035d4285dc77dde54ffc2df31d -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/DeleteFileAction.java (.../DeleteFileAction.java) (revision c97960ddf053d2035d4285dc77dde54ffc2df31d) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/DeleteFileAction.java (.../DeleteFileAction.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -36,10 +37,6 @@ import org.apache.struts.actions.DispatchAction; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.tool.sbmt.InstructionFiles; -import org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent; -import org.lamsfoundation.lams.tool.sbmt.dto.AuthoringDTO; -import org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService; -import org.lamsfoundation.lams.tool.sbmt.service.SubmitFilesServiceProxy; import org.lamsfoundation.lams.tool.sbmt.util.SbmtConstants; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -76,23 +73,29 @@ Long contentID = new Long(WebUtil.readLongParam(request,AttributeNames.PARAM_TOOL_CONTENT_ID)); Long versionID = new Long(WebUtil.readLongParam(request,"versionID")); Long uuID = new Long(WebUtil.readLongParam(request,"uuID")); - - ISubmitFilesService service = SubmitFilesServiceProxy.getSubmitFilesService(this - .getServlet().getServletContext()); + //handle session value + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + //first check exist attachment and delete old one (if exist) to deletedAttachmentList + Iterator iter = attachmentList.iterator(); + InstructionFiles existAtt; + while(iter.hasNext()){ + existAtt = (InstructionFiles) iter.next(); + if(existAtt.getUuID().equals(uuID) && existAtt.getVersionID().equals(versionID)){ + //if there is same name attachment, delete old one + deleteAttachmentList.add(existAtt); + iter.remove(); + break; + } + } - service.deleteFromRepository(uuID,versionID); - service.deleteInstructionFile(contentID,uuID,versionID,type); - SubmitFilesContent content = service.getSubmitFilesContent(contentID); - AuthoringDTO authorDto = new AuthoringDTO(content); - List list; - if(StringUtils.equals(type,IToolContentHandler.TYPE_OFFLINE)) - list = authorDto.getOfflineFiles(); - else - list = authorDto.getOnlineFiles(); - Iterator iter = list.iterator(); + iter = attachmentList.iterator(); StringBuffer sb = new StringBuffer(); while(iter.hasNext()){ InstructionFiles file = (InstructionFiles) iter.next(); + if(!StringUtils.equals(type,file.getType())) + continue; + sb.append("
  • ").append(file.getName()).append("\r\n"); sb.append(" "); sb.append(this.getResources(request).getMessage("label.view")); @@ -130,5 +133,33 @@ } return null; } - + /** + * @param request + * @return + */ + private List getAttachmentList(HttpServletRequest request) { + return getListFromSession(request,SbmtConstants.ATTACHMENT_LIST); + } + /** + * @param request + * @return + */ + private List getDeletedAttachmentList(HttpServletRequest request) { + return getListFromSession(request,SbmtConstants.DELETED_ATTACHMENT_LIST); + } + /** + * Get java.util.List from HttpSession by given name. + * + * @param request + * @param name + * @return + */ + private List getListFromSession(HttpServletRequest request,String name) { + List list = (List) request.getSession().getAttribute(name); + if(list == null){ + list = new ArrayList(); + request.getSession().setAttribute(name,list); + } + return list; + } } Index: lams_tool_sbmt/web/WEB-INF/struts/validation.xml =================================================================== diff -u -r279fcb721d30c71b3d61cb67351348a41a9709de -r2437f5fc533ea6acaf8a86a9a703a5909b456516 --- lams_tool_sbmt/web/WEB-INF/struts/validation.xml (.../validation.xml) (revision 279fcb721d30c71b3d61cb67351348a41a9709de) +++ lams_tool_sbmt/web/WEB-INF/struts/validation.xml (.../validation.xml) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) @@ -7,9 +7,15 @@
    - + + +
    + + + +