Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml,v diff -u -r1.3 -r1.4 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml 30 Sep 2006 10:18:44 -0000 1.3 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/scribeApplicationContext.xml 31 Oct 2006 23:17:29 -0000 1.4 @@ -34,6 +34,7 @@ + @@ -78,6 +79,9 @@ + + + Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java,v diff -u -r1.3 -r1.4 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java 30 Sep 2006 10:18:45 -0000 1.3 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/IScribeHeadingDAO.java 31 Oct 2006 23:17:29 -0000 1.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java,v diff -u -r1.3 -r1.4 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java 30 Sep 2006 10:18:45 -0000 1.3 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/dao/hibernate/ScribeHeadingDAO.java 31 Oct 2006 23:17:29 -0000 1.4 @@ -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/service/IScribeService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java,v diff -u -r1.4 -r1.5 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java 2 Oct 2006 04:54:12 -0000 1.4 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/IScribeService.java 31 Oct 2006 23:17:28 -0000 1.5 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java,v diff -u -r1.12 -r1.13 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 26 Oct 2006 02:29:32 -0000 1.12 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 31 Oct 2006 23:17:29 -0000 1.13 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java,v diff -u -r1.8 -r1.9 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java 31 Oct 2006 04:28:27 -0000 1.8 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/AuthoringAction.java 31 Oct 2006 23:17:29 -0000 1.9 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java,v diff -u -r1.10 -r1.11 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java 24 Oct 2006 06:49:34 -0000 1.10 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningAction.java 31 Oct 2006 23:17:29 -0000 1.11 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/web/pages/authoring/authoring.jsp,v diff -u -r1.4 -r1.5 --- lams_tool_scribe/web/pages/authoring/authoring.jsp 26 Oct 2006 02:36:04 -0000 1.4 +++ lams_tool_scribe/web/pages/authoring/authoring.jsp 31 Oct 2006 23:17:29 -0000 1.5 @@ -45,11 +45,9 @@ <%-- Page tabs --%> - - - - + +