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 --%>
-
-
-
-
+
+