Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java =================================================================== diff -u -r84283f3449a27ed45130e07c53d2cefc451ba537 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java (.../IScribeHeadingDAO.java) (revision 84283f3449a27ed45130e07c53d2cefc451ba537) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java (.../IScribeHeadingDAO.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -32,5 +32,11 @@ * methods to be implemented by the Hibernate or other implementation. */ public interface IScribeHeadingDAO extends IBaseDAO { - + + /** + * Delete relative ScribeReportEntries for given ScribeHeading. + * @param headingUid + * @return + */ + boolean deleteReport(Long headingUid); } \ No newline at end of file Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java =================================================================== diff -u -r84283f3449a27ed45130e07c53d2cefc451ba537 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java (.../ScribeHeadingDAO.java) (revision 84283f3449a27ed45130e07c53d2cefc451ba537) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java (.../ScribeHeadingDAO.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -24,9 +24,26 @@ package org.lamsfoundation.lams.tool.scribe.dao.hibernate; +import java.util.List; + import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.tool.scribe.dao.IScribeHeadingDAO; +import org.lamsfoundation.lams.tool.scribe.model.ScribeReportEntry; public class ScribeHeadingDAO extends BaseDAO implements IScribeHeadingDAO { + + private static final String SQL_DELETE_REPORT="from " + ScribeReportEntry.class.getName() + " as r where r.scribeHeading.uid=?"; + public boolean deleteReport(Long headingUid) { + List reports = this.getHibernateTemplate().find(SQL_DELETE_REPORT,new Object[]{headingUid}); + if(reports.isEmpty()) + return false; + + for (ScribeReportEntry report: reports) { + getHibernateTemplate().delete(report); + } + + return true; + } + } Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml =================================================================== diff -u -r84283f3449a27ed45130e07c53d2cefc451ba537 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml (.../scribeApplicationContext.xml) (revision 84283f3449a27ed45130e07c53d2cefc451ba537) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml (.../scribeApplicationContext.xml) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -34,6 +34,7 @@ + @@ -78,6 +79,9 @@ + + + Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java =================================================================== diff -u -r7d8d96ba15203a9f3f8898c4a0fc4a4406b9475b -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java (.../IScribeService.java) (revision 7d8d96ba15203a9f3f8898c4a0fc4a4406b9475b) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java (.../IScribeService.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -149,4 +149,16 @@ public NotebookEntry getEntry(Long id, Integer idType, String signature, Integer userID); + + /** + * Delete heading's report by given heading UID. + * @param uid + */ + public void deleteHeadingReport(Long uid); + + /** + * Clone heading from scribe content. + * @param toolSessionId + */ + public void createReportEntry(Long toolSessionId); } \ No newline at end of file Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== diff -u -rb17a502694c0d20ed29b6d8c1fb4ebcc5fdc83c6 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision b17a502694c0d20ed29b6d8c1fb4ebcc5fdc83c6) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -63,6 +63,7 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.scribe.dao.IScribeAttachmentDAO; import org.lamsfoundation.lams.tool.scribe.dao.IScribeDAO; +import org.lamsfoundation.lams.tool.scribe.dao.IScribeHeadingDAO; import org.lamsfoundation.lams.tool.scribe.dao.IScribeSessionDAO; import org.lamsfoundation.lams.tool.scribe.dao.IScribeUserDAO; import org.lamsfoundation.lams.tool.scribe.model.Scribe; @@ -80,6 +81,7 @@ import org.lamsfoundation.lams.util.audit.IAuditService; import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; +import org.springframework.orm.ObjectOptimisticLockingFailureException; /** * An implementation of the IScribeService interface. @@ -96,6 +98,8 @@ private IScribeDAO scribeDAO = null; private IScribeSessionDAO scribeSessionDAO = null; + + private IScribeHeadingDAO scribeHeadingDAO = null; private IScribeUserDAO scribeUserDAO = null; @@ -136,18 +140,6 @@ Scribe scribe = scribeDAO.getByContentId(toolContentId); session.setScribe(scribe); - // creating scribeReports for each heading and add to session. - Set reports = new HashSet(); - for (Iterator iter = scribe.getScribeHeadings().iterator(); iter.hasNext();) { - ScribeHeading heading = (ScribeHeading) iter.next(); - - ScribeReportEntry report = new ScribeReportEntry(); - report.setScribeHeading(heading); - - reports.add(report); - } - - session.setScribeReportEntries(reports); session.setForceComplete(false); session.setReportSubmitted(false); scribeSessionDAO.saveOrUpdate(session); @@ -307,6 +299,37 @@ } /* ********** IScribeService Methods ************************************** */ + + public void createReportEntry(Long toolSessionId){ + // creating scribeReports for each heading and add to session. + ScribeSession session = scribeSessionDAO.getBySessionId(toolSessionId); + + //these heading report already copied from content, the skipit. + Set entries = session.getScribeReportEntries(); + if(entries != null && entries.size() > 0) + return; + + Scribe scribe = session.getScribe(); + Set reports = session.getScribeReportEntries(); + if(reports == null){ + reports = new HashSet(); + session.setScribeReportEntries(reports); + } + for (Iterator iter = scribe.getScribeHeadings().iterator(); iter.hasNext();) { + ScribeHeading heading = (ScribeHeading) iter.next(); + + ScribeReportEntry report = new ScribeReportEntry(); + report.setScribeHeading(heading); + + reports.add(report); + } + scribeSessionDAO.update(session); + + } + public void deleteHeadingReport(Long uid) { + scribeHeadingDAO.deleteReport(uid); + + } public Long getDefaultContentIdBySignature(String toolSignature) { Long toolContentId = null; toolContentId = new Long(toolService @@ -661,4 +684,8 @@ scribe.setReflectInstructions(description); } //========================================================================================= + + public void setScribeHeadingDAO(IScribeHeadingDAO scribeHeadingDAO) { + this.scribeHeadingDAO = scribeHeadingDAO; + } } \ No newline at end of file Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java =================================================================== diff -u -r4a456f961a5badc17cee47c4401fad61a5144013 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision 4a456f961a5badc17cee47c4401fad61a5144013) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -198,11 +198,44 @@ // update headings. List updatedHeadings = getHeadingList(map); Set currentHeadings = scribe.getScribeHeadings(); - currentHeadings.clear(); for (ScribeHeading heading : updatedHeadings) { - heading.setUid(null); - currentHeadings.add(heading); + //it is update + if(heading.getUid() != null){ + Iterator iter = currentHeadings.iterator(); + while(iter.hasNext()){ + ScribeHeading currHeading = (ScribeHeading) iter.next(); + if(heading.getUid().equals(currHeading.getUid())){ + //update fields + currHeading.setHeadingText(heading.getHeadingText()); + currHeading.setDisplayOrder(heading.getDisplayOrder()); + break; + } + }// go to next heading from page + }else{ + currentHeadings.add(heading); + } } + //remove deleted heading. + Iterator iter = currentHeadings.iterator(); + while(iter.hasNext()){ + ScribeHeading currHeading = (ScribeHeading) iter.next(); + //skip new added heading + if(currHeading.getUid() == null) + continue; + boolean find =false; + for (ScribeHeading heading : updatedHeadings) { + if(currHeading.getUid().equals(heading.getUid())){ + find = true; + break; + } + } + if(!find){ + //delete current heading's report first + scribeService.deleteHeadingReport(currHeading.getUid()); + iter.remove(); + } + } + // set the update date scribe.setUpdateDate(new Date()); Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java =================================================================== diff -u -rc4e396e4c1ef24c04d7f25d8c2a8be2b62e35d53 -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java (.../LearningAction.java) (revision c4e396e4c1ef24c04d7f25d8c2a8be2b62e35d53) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java (.../LearningAction.java) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -102,6 +102,13 @@ scribeService = ScribeServiceProxy.getScribeService(this .getServlet().getServletContext()); } + //try to clone scribe heading from content. This method will execute + //for every new learner enter, but the heading only copied once. + try{ + scribeService.createReportEntry(toolSessionID); + } catch (ObjectOptimisticLockingFailureException e) { + log.debug("Multiple learner get into scribe simultaneously. Cloning report entry skipped"); + } // Retrieve the session and content. ScribeSession scribeSession = scribeService Index: lams_tool_scribe/web/pages/authoring/authoring.jsp =================================================================== diff -u -r6f21f23b5ae790598b2b954a47b7693aa27e245a -r51cd744e821c2602f453bedcd22f89887f92d468 --- lams_tool_scribe/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 6f21f23b5ae790598b2b954a47b7693aa27e245a) +++ lams_tool_scribe/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 51cd744e821c2602f453bedcd22f89887f92d468) @@ -45,11 +45,9 @@ <%-- Page tabs --%> - - - - + +