Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitFilesContentDAO.java =================================================================== diff -u -reebdf6c7a06bd126cf6331883dd60e4ca72ac5c9 -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitFilesContentDAO.java (.../ISubmitFilesContentDAO.java) (revision eebdf6c7a06bd126cf6331883dd60e4ca72ac5c9) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitFilesContentDAO.java (.../ISubmitFilesContentDAO.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -29,7 +29,7 @@ * * @param content */ - public void save(SubmitFilesContent content); + public void saveOrUpdate(SubmitFilesContent content); public void deleteInstructionFile(Long contentID, Long uuid, Long versionID, String type); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitFilesContentDAO.java =================================================================== diff -u -r6e5832d17263bc6c6f7683733e91e22f97eab569 -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitFilesContentDAO.java (.../SubmitFilesContentDAO.java) (revision 6e5832d17263bc6c6f7683733e91e22f97eab569) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitFilesContentDAO.java (.../SubmitFilesContentDAO.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -49,9 +49,9 @@ /* (non-Javadoc) * @see org.lamsfoundation.lams.tool.sbmt.dao.ISubmitFilesContentDAO#save(org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent) */ - public void save(SubmitFilesContent content) { + public void saveOrUpdate(SubmitFilesContent content) { this.getSession().setFlushMode(FlushMode.COMMIT); - this.getHibernateTemplate().save(content); + this.getHibernateTemplate().saveOrUpdate(content); this.getHibernateTemplate().flush(); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -r837aa6d15c08f6d4b1cd80b7b4cc3d56e494c9ed -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 837aa6d15c08f6d4b1cd80b7b4cc3d56e494c9ed) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -39,22 +39,7 @@ */ public interface ISubmitFilesService { - /** - * This method adds a new content record to the database. - * - */ - public void addSubmitFilesContent(SubmitFilesContent content); - - /** - * Updates the record in the database - * - * @param submitFilesContent - * The SubmitFilesContent to be updated - */ - public void updateSubmitFilesContent(SubmitFilesContent submitFilesContent); - - /** * Returns the SubmitFilesContent object corresponding to the * given contentID. If could not find out corresponding * SubmitFilesContent by given contentID, return a not-null @@ -201,4 +186,10 @@ */ //public List getSubmitFilesSessionsByContentID(Long contentID); public List getSubmitFilesSessionByContentID(Long contentID); + /** + * Save or update tool content into database. + * @param persistContent + * The SubmitFilesContent to be updated + */ + public void saveOrUpdateContent(SubmitFilesContent persistContent); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -rc851c6113c43610c970bbd7c939018f1e4d38c76 -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision c851c6113c43610c970bbd7c939018f1e4d38c76) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -136,7 +136,7 @@ content = duplicateDefaultToolContent(toolContentId); } content.setRunOffline(true); - submitFilesContentDAO.save(content); + submitFilesContentDAO.saveOrUpdate(content); } catch (DataAccessException e) { @@ -175,7 +175,7 @@ content = duplicateDefaultToolContent(toolContentId); } content.setDefineLater(true); - submitFilesContentDAO.save(content); + submitFilesContentDAO.saveOrUpdate(content); } catch (DataAccessException e) { @@ -210,26 +210,15 @@ } } - /** - * (non-Javadoc) - * - * @see org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService#addSubmitFilesContent(SubmitFilesContent) - */ - public void addSubmitFilesContent(SubmitFilesContent content) { - submitFilesContentDAO.save(content); - } /* * (non-Javadoc) * * @see org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService#updateSubmitFilesContent(org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent) */ - public void updateSubmitFilesContent(SubmitFilesContent submitFilesContent) { - submitFilesContentDAO.update(submitFilesContent); + public void saveOrUpdateContent(SubmitFilesContent submitFilesContent) { + submitFilesContentDAO.saveOrUpdate(submitFilesContent); } - public void saveSubmitFilesContent(SubmitFilesContent submitFilesContent) { - submitFilesContentDAO.save(submitFilesContent); - } /* * (non-Javadoc) @@ -694,7 +683,7 @@ content = SubmitFilesContent.newInstance(defaultContent,contentID,sbmtToolContentHandler); content.setContentID(contentID); - saveSubmitFilesContent(content); +// saveSubmitFilesContent(content); return content; } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java =================================================================== diff -u -r2437f5fc533ea6acaf8a86a9a703a5909b456516 -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java (.../AuthoringAction.java) (revision 2437f5fc533ea6acaf8a86a9a703a5909b456516) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/AuthoringAction.java (.../AuthoringAction.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -92,50 +92,57 @@ .getServlet().getServletContext()); try { SubmitFilesContent persistContent = submitFilesService.getSubmitFilesContent(content.getContentID()); - 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) - 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(); + + if(persistContent == null || content.getContentID() == null + || !content.getContentID().equals(persistContent.getContentID())){ + //new content + persistContent = content; + } - 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; - } + //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) + Set attPOSet = persistContent.getInstructionFiles(); + if(attPOSet == null) + attPOSet = new HashSet(); + 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); - submitFilesService.updateSubmitFilesContent(persistContent); - }else - submitFilesService.addSubmitFilesContent(content); + } + 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); + + submitFilesService.saveOrUpdateContent(persistContent); } catch (Exception e) { log.error(e); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java =================================================================== diff -u -r18af423790dd09bf86e8ba5f623cec545a28c694 -r75505d34c45a3c8b688d43860e1dd8d0a25d6bc4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java (.../MonitoringAction.java) (revision 18af423790dd09bf86e8ba5f623cec545a28c694) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java (.../MonitoringAction.java) (revision 75505d34c45a3c8b688d43860e1dd8d0a25d6bc4) @@ -428,7 +428,7 @@ SubmitFilesContent content = submitFilesService.getSubmitFilesContent(contentID); content.setTitle(title); content.setInstruction(instructions); - submitFilesService.updateSubmitFilesContent(content); + submitFilesService.saveOrUpdateContent(content); return mapping.findForward("success"); }