Index: lams_tool_mindmap/conf/language/lams/ApplicationResources.properties
===================================================================
diff -u -r15d649f3833b2e6e5c89df3fdf8e12b4bde2b342 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 15d649f3833b2e6e5c89df3fdf8e12b4bde2b342)
+++ lams_tool_mindmap/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -106,8 +106,18 @@
label.authoring.advance.gallery.walk.info2 = When enabled, after you start Gallery Walk in the lesson, the document created for each team is shared to all other teams. Teams then, can give each others feedback and rate each others' work.
label.authoring.advance.gallery.walk.instructions = Instructions for Gallery Walk (ie: Please review other groups' work and make sure you add your review/comments)
label.authoring.advance.gallery.walk.read.only.tooltip = Students will not be able to neither comment on nor rate other teams' work.
+monitoring.summary.gallery.walk.start = Start Gallery Walk
+monitoring.summary.gallery.walk.start.confirm = Are you sure you want to finish collaboration phase and start Gallery Walk?
+monitoring.summary.gallery.walk.finish = Finish Gallery Walk
+monitoring.summary.gallery.walk.finish.confirm = Are you sure you want to finish Gallery Walk?
+monitoring.summary.gallery.walk.learner.edit = Let learners modify answers
+monitoring.summary.gallery.walk.learner.edit.confirm = Are you sure you want allows students to modify their answers while inside Gallery Walk?
label.gallery.walk.your.group = (Your group)
label.gallery.walk.ratings.header = Ratings
+label.rating = Rating
+label.pad.rating.title = Other groups' rating
+label.average.rating = Average rating {0}/{1} votes
+label.your.rating = Your rating {0}, average rating {1}/{2} votes
label.gallery.walk.wait.start = As part of this activity, the teacher has planned for you to view and maybe comment on the work of other teams. The activity of seeing and commenting on others' work is called Gallery Walk. Please wait for the teacher to start the Gallery Walk. If this is taking too long, please contact the teacher for assistance.
label.gallery.walk.wait.start.preview = Continue to Gallery Walk. Since you are in preview mode, you can do it immediately. Regular learners get this message would need to wait for a teacher to start Gallery Walk on monitoring screen.
label.gallery.walk.wait.finish.preview = Continue to Gallery Walk summary. Since you are in preview mode, you can do it immediately. Regular learners get this message would need to wait for a teacher to finish Gallery Walk on monitoring screen.
Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/mindmapApplicationContext.xml
===================================================================
diff -u -r01c2a55767c613282c319ed8b38a0c78712e3661 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/mindmapApplicationContext.xml (.../mindmapApplicationContext.xml) (revision 01c2a55767c613282c319ed8b38a0c78712e3661)
+++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/mindmapApplicationContext.xml (.../mindmapApplicationContext.xml) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -43,6 +43,8 @@
+
+
Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/IMindmapService.java
===================================================================
diff -u -rf6e7035df9568b17d8f83273fc025fec8f624680 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/IMindmapService.java (.../IMindmapService.java) (revision f6e7035df9568b17d8f83273fc025fec8f624680)
+++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/IMindmapService.java (.../IMindmapService.java) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -23,6 +23,7 @@
package org.lamsfoundation.lams.tool.mindmap.service;
+import java.io.IOException;
import java.util.List;
import org.lamsfoundation.lams.notebook.model.NotebookEntry;
@@ -43,95 +44,101 @@
*/
public interface IMindmapService extends ICommonToolService {
- public Mindmap copyDefaultContent(Long newContentID);
+ Mindmap copyDefaultContent(Long newContentID);
- public Mindmap getDefaultContent();
+ Mindmap getDefaultContent();
- public Long getDefaultContentIdBySignature(String toolSignature);
+ Long getDefaultContentIdBySignature(String toolSignature);
- public Mindmap getMindmapByContentId(Long toolContentID);
+ Mindmap getMindmapByContentId(Long toolContentID);
- public Mindmap getMindmapByUid(Long Uid);
+ Mindmap getMindmapByUid(Long Uid);
- public void saveOrUpdateMindmap(Mindmap mindmap);
+ void saveOrUpdateMindmap(Mindmap mindmap);
- public MindmapSession getSessionBySessionId(Long toolSessionId);
+ MindmapSession getSessionBySessionId(Long toolSessionId);
- public void saveOrUpdateMindmapSession(MindmapSession mindmapSession);
+ void saveOrUpdateMindmapSession(MindmapSession mindmapSession);
- public MindmapUser getUserByUserIdAndSessionId(Long userId, Long toolSessionId);
+ MindmapUser getUserByUserIdAndSessionId(Long userId, Long toolSessionId);
- public MindmapUser getUserByLoginAndSessionId(String login, long toolSessionId);
+ MindmapUser getUserByLoginAndSessionId(String login, long toolSessionId);
- public MindmapUser getUserByUID(Long uid);
+ MindmapUser getUserByUID(Long uid);
- public void saveOrUpdateMindmapUser(MindmapUser mindmapUser);
+ void saveOrUpdateMindmapUser(MindmapUser mindmapUser);
- public MindmapUser createMindmapUser(UserDTO user, MindmapSession mindmapSession);
+ MindmapUser createMindmapUser(UserDTO user, MindmapSession mindmapSession);
Long createNotebookEntry(Long id, Integer idType, String signature, Integer userID, String entry);
NotebookEntry getEntry(Long uid);
void updateEntry(Long uid, String entry);
- public void updateEntry(NotebookEntry notebookEntry);
+ void updateEntry(NotebookEntry notebookEntry);
- public void setMindmapMessageService(MessageService mindmapMessageService);
+ void setMindmapMessageService(MessageService mindmapMessageService);
- public MessageService getMindmapMessageService();
+ MessageService getMindmapMessageService();
- public void deleteNodeByUniqueMindmapUser(Long uniqueId, Long mindmapId, Long userId, Long sessionId);
+ void deleteNodeByUniqueMindmapUser(Long uniqueId, Long mindmapId, Long userId, Long sessionId);
- public void deleteNodes(String nodesToDeleteCondition);
+ void deleteNodes(String nodesToDeleteCondition);
- public String getNodesToDeleteCondition();
+ String getNodesToDeleteCondition();
- public void setNodesToDeleteCondition(String nodesToDeleteCondition);
+ void setNodesToDeleteCondition(String nodesToDeleteCondition);
- public void saveOrUpdateMindmapNode(MindmapNode mindmapNode);
+ void saveOrUpdateMindmapNode(MindmapNode mindmapNode);
- public List getAuthorRootNodeByMindmapId(Long mindmapId);
+ List getAuthorRootNodeByMindmapId(Long mindmapId);
- public List getAuthorRootNodeBySessionId(Long sessionId);
+ List getAuthorRootNodeBySessionId(Long sessionId);
- public List getAuthorRootNodeByMindmapSession(Long mindmapId, Long toolSessionId);
+ List getAuthorRootNodeByMindmapSession(Long mindmapId, Long toolSessionId);
- public List getRootNodeByMindmapIdAndUserId(Long mindmapId, Long userId);
+ List getRootNodeByMindmapIdAndUserId(Long mindmapId, Long userId);
- public List getRootNodeByMindmapIdAndSessionId(Long mindmapId, Long sessionId);
+ List getRootNodeByMindmapIdAndSessionId(Long mindmapId, Long sessionId);
- public List getMindmapNodeByParentId(Long parentId, Long mindmapId);
+ List getMindmapNodeByParentId(Long parentId, Long mindmapId);
- public List getMindmapNodeByParentIdMindmapIdSessionId(Long parentId, Long mindmapId, Long sessionId);
+ List getMindmapNodeByParentIdMindmapIdSessionId(Long parentId, Long mindmapId, Long sessionId);
- public List getMindmapNodeByUniqueId(Long uniqueId, Long mindmapId);
+ List getMindmapNodeByUniqueId(Long uniqueId, Long mindmapId);
- public MindmapNode getMindmapNodeByUniqueIdSessionId(Long uniqueId, Long mindmapId, Long sessionId);
+ MindmapNode getMindmapNodeByUniqueIdSessionId(Long uniqueId, Long mindmapId, Long sessionId);
- public List getMindmapNodeByUniqueIdMindmapIdUserId(Long uniqueId, Long mindmapId, Long userId);
+ List getMindmapNodeByUniqueIdMindmapIdUserId(Long uniqueId, Long mindmapId, Long userId);
- public MindmapNode saveMindmapNode(MindmapNode currentMindmapNode, MindmapNode parentMindmapNode, Long uniqueId,
+ MindmapNode saveMindmapNode(MindmapNode currentMindmapNode, MindmapNode parentMindmapNode, Long uniqueId,
String text, String color, MindmapUser mindmapUser, Mindmap mindmap, MindmapSession session);
- public NodeModel getMindmapXMLFromDatabase(Long rootNodeId, Long mindmapId, NodeModel rootNodeModel,
+ NodeModel getMindmapXMLFromDatabase(Long rootNodeId, Long mindmapId, NodeModel rootNodeModel,
MindmapUser mindmapUser, boolean isMonitor, boolean isAuthor, boolean isUserLocked);
- public void getChildMindmapNodes(List branches, MindmapNode rootMindmapNode, MindmapUser mindmapUser,
+ void getChildMindmapNodes(List branches, MindmapNode rootMindmapNode, MindmapUser mindmapUser,
Mindmap mindmap, MindmapSession mindmapSession);
- public void saveOrUpdateMindmapRequest(MindmapRequest mindmapRequest);
+ void saveOrUpdateMindmapRequest(MindmapRequest mindmapRequest);
- public Long getNodeLastUniqueIdByMindmapUidSessionId(Long mindmapUid, Long sessionId);
+ Long getNodeLastUniqueIdByMindmapUidSessionId(Long mindmapUid, Long sessionId);
- public List getLastRequestsAfterGlobalId(Long globalId, Long mindmapId, Long sessionId);
+ List getLastRequestsAfterGlobalId(Long globalId, Long mindmapId, Long sessionId);
- public MindmapRequest getRequestByUniqueId(Long uniqueId, Long userId, Long mindmapId, Long globalId);
+ MindmapRequest getRequestByUniqueId(Long uniqueId, Long userId, Long mindmapId, Long globalId);
- public Long getLastGlobalIdByMindmapId(Long mindmapId, Long sessionId);
+ Long getLastGlobalIdByMindmapId(Long mindmapId, Long sessionId);
// Outputs
- public int getNumNodes(Long learnerId, Long toolSessionId);
+ int getNumNodes(Long learnerId, Long toolSessionId);
- public XStream getXStream();
+ XStream getXStream();
+
+ void startGalleryWalk(long toolContentId) throws IOException;
+
+ void finishGalleryWalk(long toolContentId) throws IOException;
+
+ void enableGalleryWalkLearnerEdit(long toolContentId) throws IOException;
}
\ No newline at end of file
Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java
===================================================================
diff -u -rf6e7035df9568b17d8f83273fc025fec8f624680 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision f6e7035df9568b17d8f83273fc025fec8f624680)
+++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -23,23 +23,30 @@
package org.lamsfoundation.lams.tool.mindmap.service;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import java.util.SortedMap;
+import java.util.stream.Collectors;
import org.apache.log4j.Logger;
import org.lamsfoundation.lams.confidencelevel.ConfidenceLevelDTO;
import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler;
+import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException;
import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService;
import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException;
import org.lamsfoundation.lams.logevent.service.ILogEventService;
import org.lamsfoundation.lams.notebook.model.NotebookEntry;
import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants;
import org.lamsfoundation.lams.notebook.service.ICoreNotebookService;
+import org.lamsfoundation.lams.rating.model.RatingCriteria;
+import org.lamsfoundation.lams.rating.model.ToolActivityRatingCriteria;
+import org.lamsfoundation.lams.rating.service.IRatingService;
import org.lamsfoundation.lams.rest.RestTags;
import org.lamsfoundation.lams.rest.ToolRestManager;
import org.lamsfoundation.lams.tool.ToolCompletionStatus;
@@ -74,6 +81,7 @@
import org.lamsfoundation.lams.util.JsonUtil;
import org.lamsfoundation.lams.util.MessageService;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.StaxDriver;
@@ -100,6 +108,8 @@
private ILogEventService logEventService = null;
private IExportToolContentService exportContentService;
private ICoreNotebookService coreNotebookService;
+ private ILearnerService learnerService;
+ private IRatingService ratingService;
private MindmapOutputFactory mindmapOutputFactory;
private String nodesToDeleteCondition = null; // string to accumulate nodes to delete
private MessageService mindmapMessageService;
@@ -805,6 +815,14 @@
this.toolService = toolService;
}
+ public void setRatingService(IRatingService ratingService) {
+ this.ratingService = ratingService;
+ }
+
+ public void setLearnerService(ILearnerService learnerService) {
+ this.learnerService = learnerService;
+ }
+
public IMindmapUserDAO getMindmapUserDAO() {
return mindmapUserDAO;
}
@@ -1037,4 +1055,100 @@
public XStream getXStream() {
return xstream;
}
+
+ private List createGalleryWalkRatingCriterion(long toolContentId) {
+ List criteria = ratingService.getCriteriasByToolContentId(toolContentId);
+
+ if (criteria.size() >= 2) {
+ criteria = ratingService.getCriteriasByToolContentId(toolContentId);
+ // Mindmap currently supports only one place for ratings.
+ // It is rating other groups' boards on results page.
+ // Criterion gets automatically created and there must be only one.
+ try {
+ for (int criterionIndex = 1; criterionIndex < criteria.size(); criterionIndex++) {
+ RatingCriteria criterion = criteria.get(criterionIndex);
+ Long criterionId = criterion.getRatingCriteriaId();
+ mindmapDAO.delete(criterion);
+ logger.warn("Removed a duplicate criterion ID " + criterionId + " for Mindmap tool content ID "
+ + toolContentId);
+ }
+ } catch (Exception e) {
+ logger.warn("Ignoring error while deleting a duplicate criterion for Mindmap tool content ID "
+ + toolContentId + ": " + e.getMessage());
+ }
+ return criteria;
+ }
+
+ if (criteria.isEmpty()) {
+ ToolActivityRatingCriteria criterion = (ToolActivityRatingCriteria) RatingCriteria
+ .getRatingCriteriaInstance(RatingCriteria.TOOL_ACTIVITY_CRITERIA_TYPE);
+ criterion.setTitle(mindmapMessageService.getMessage("label.pad.rating.title"));
+ criterion.setOrderId(1);
+ criterion.setRatingStyle(RatingCriteria.RATING_STYLE_STAR);
+ criterion.setCommentsEnabled(true);
+ criterion.setToolContentId(toolContentId);
+
+ mindmapDAO.insert(criterion);
+ criteria.add(criterion);
+ }
+ return criteria;
+ }
+
+ @Override
+ public void startGalleryWalk(long toolContentId) throws IOException {
+ Mindmap mindmap = getMindmapByContentId(toolContentId);
+ if (!mindmap.isGalleryWalkEnabled()) {
+ throw new IllegalArgumentException(
+ "Can not start Gallery Walk as it is not enabled for Mindmap with tool content ID "
+ + toolContentId);
+ }
+ if (mindmap.isGalleryWalkFinished()) {
+ throw new IllegalArgumentException(
+ "Can not start Gallery Walk as it is already finished for Mindmap with tool content ID "
+ + toolContentId);
+ }
+ mindmap.setGalleryWalkStarted(true);
+ mindmapDAO.update(mindmap);
+
+ sendGalleryWalkRefreshRequest(mindmap);
+ }
+
+ @Override
+ public void finishGalleryWalk(long toolContentId) throws IOException {
+ Mindmap mindmap = getMindmapByContentId(toolContentId);
+ if (!mindmap.isGalleryWalkEnabled()) {
+ throw new IllegalArgumentException(
+ "Can not finish Gallery Walk as it is not enabled for Mindmap with tool content ID "
+ + toolContentId);
+ }
+ mindmap.setGalleryWalkFinished(true);
+ mindmapDAO.update(mindmap);
+
+ sendGalleryWalkRefreshRequest(mindmap);
+ }
+
+ @Override
+ public void enableGalleryWalkLearnerEdit(long toolContentId) throws IOException {
+ Mindmap mindmap = getMindmapByContentId(toolContentId);
+ if (!mindmap.isGalleryWalkEnabled()) {
+ throw new IllegalArgumentException(
+ "Can not allow learners to reedit activity as Gallery Walk is not enabled for Mindmap with tool content ID "
+ + toolContentId);
+ }
+ mindmap.setGalleryWalkEditEnabled(true);
+ mindmapDAO.update(mindmap);
+
+ sendGalleryWalkRefreshRequest(mindmap);
+ }
+
+ private void sendGalleryWalkRefreshRequest(Mindmap mindmap) {
+ ObjectNode jsonCommand = JsonNodeFactory.instance.objectNode();
+ jsonCommand.put("hookTrigger", "mindmap-refresh-" + mindmap.getToolContentId());
+ // get all learners in this mindmap
+ Set userIds = mindmap.getMindmapSessions().stream()
+ .flatMap(session -> session.getMindmapUsers().stream())
+ .collect(Collectors.mapping(user -> user.getUserId().intValue(), Collectors.toSet()));
+
+ learnerService.createCommandForLearners(mindmap.getToolContentId(), userIds, jsonCommand.toString());
+ }
}
\ No newline at end of file
Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/web/controller/MonitoringController.java
===================================================================
diff -u -r1beaa4cc5e224dd433297d543c5511234c0bfc10 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 1beaa4cc5e224dd433297d543c5511234c0bfc10)
+++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -173,8 +173,29 @@
}
mindmap.setSubmissionDeadline(tzSubmissionDeadline);
mindmapService.saveOrUpdateMindmap(mindmap);
-
+
return formattedDate;
}
+ @RequestMapping("/startGalleryWalk")
+ public void startGalleryWalk(HttpServletRequest request) throws IOException {
+ Long toolContentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID, false);
+
+ mindmapService.startGalleryWalk(toolContentId);
+ }
+
+ @RequestMapping("/finishGalleryWalk")
+ public void finishGalleryWalk(HttpServletRequest request) throws IOException {
+ Long toolContentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID, false);
+
+ mindmapService.finishGalleryWalk(toolContentId);
+ }
+
+ @RequestMapping("/enableGalleryWalkLearnerEdit")
+ public void enableGalleryWalkLearnerEdit(HttpServletRequest request) throws IOException {
+ Long toolContentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID, false);
+
+ mindmapService.enableGalleryWalkLearnerEdit(toolContentId);
+ }
+
}
Index: lams_tool_mindmap/web/pages/monitoring/summary.jsp
===================================================================
diff -u -r1beaa4cc5e224dd433297d543c5511234c0bfc10 -r232372ca3bbe7a14d8ddb66e07516839ed0a97d6
--- lams_tool_mindmap/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 1beaa4cc5e224dd433297d543c5511234c0bfc10)
+++ lams_tool_mindmap/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 232372ca3bbe7a14d8ddb66e07516839ed0a97d6)
@@ -2,10 +2,40 @@
-
+
-
+
+
+