Index: messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/entity/TopicEntityProviderImpl.java =================================================================== --- messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/entity/TopicEntityProviderImpl.java (revision 315424) +++ messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/entity/TopicEntityProviderImpl.java (working copy) @@ -29,6 +29,7 @@ import org.sakaiproject.api.app.messageforums.ui.PrivateMessageManager; import org.sakaiproject.api.app.messageforums.ui.UIPermissionsManager; import org.sakaiproject.component.app.messageforums.dao.hibernate.PrivateTopicImpl; +import org.sakaiproject.component.cover.ComponentManager; import org.sakaiproject.component.cover.ServerConfigurationService; import org.sakaiproject.entity.api.Reference; import org.sakaiproject.entity.cover.EntityManager; @@ -48,6 +49,9 @@ import org.sakaiproject.entitybroker.entityprovider.extension.RequestStorage; import org.sakaiproject.entitybroker.entityprovider.search.Restriction; import org.sakaiproject.entitybroker.entityprovider.search.Search; +import org.sakaiproject.service.gradebook.shared.Assignment; +import org.sakaiproject.service.gradebook.shared.GradebookNotFoundException; +import org.sakaiproject.service.gradebook.shared.GradebookService; import org.sakaiproject.user.cover.UserDirectoryService; import org.sakaiproject.util.ResourceLoader; @@ -353,6 +357,22 @@ }else{ forums = forumManager.getDiscussionForumsWithTopics(siteId); } + + // retrieve all of the gradebook items here so we aren't checking repeatedly + Map gbItemNameToId = new HashMap(); + try { + GradebookService gradebookService = (GradebookService)ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService"); + List gbItems = gradebookService.getAssignments(siteId); + if (gbItems != null) { + for (Assignment gbItem : gbItems) { + gbItemNameToId.put(gbItem.getName(), gbItem.getId()); + } + } + } catch (GradebookNotFoundException gnfe) { + LOG.debug("No gradebook exists for site " + siteId + ". No gb item ids will be included.", gnfe); + } catch (Exception e) { + LOG.debug("Exception attempting to retrieve gradebook information for site " + siteId + ". ", e); + } for (DiscussionForum forum : forums) { if(forum.getDraft().equals(Boolean.FALSE)){ @@ -363,9 +383,15 @@ forumOpenDate = forum.getOpenDate() != null ? forum.getOpenDate().getTime()/1000 : null; forumCloseDate = forum.getCloseDate() != null ? forum.getCloseDate().getTime()/1000 : null; } + + Long forumGbItemId = null; + if (forum.getDefaultAssignName() != null && !forum.getDefaultAssignName().isEmpty() && + gbItemNameToId.containsKey(forum.getDefaultAssignName())) { + forumGbItemId = gbItemNameToId.get(forum.getDefaultAssignName()); + } DecoratedForumInfo dForum = new DecoratedForumInfo(forum.getId(), forum.getTitle(), forumAttachments, forum.getShortDescription(), forum.getExtendedDescription(), forum.getLocked(), - forum.getPostFirst(), forum.getAvailabilityRestricted(), forumOpenDate, forumCloseDate, forum.getDefaultAssignName()); + forum.getPostFirst(), forum.getAvailabilityRestricted(), forumOpenDate, forumCloseDate, forum.getDefaultAssignName(), forumGbItemId); List topics = forum.getTopics(); int viewableTopics = 0; @@ -398,9 +424,16 @@ topicOpenDate = topic.getOpenDate() != null ? topic.getOpenDate().getTime()/1000 : null; topicCloseDate = topic.getCloseDate() != null ? topic.getCloseDate().getTime()/1000 : null; } + + Long topicGbItemId = null; + if (topic.getDefaultAssignName() != null && !topic.getDefaultAssignName().isEmpty() && + gbItemNameToId.containsKey(topic.getDefaultAssignName())) { + topicGbItemId = gbItemNameToId.get(topic.getDefaultAssignName()); + } + dForum.addTopic(new DecoratedTopicInfo(topic.getId(), topic.getTitle(), unreadMessages, totalMessages, "", attachments, topic.getShortDescription(), topic.getExtendedDescription(), topic.getLocked(), topic.getPostFirst(), topic.getAvailabilityRestricted(), - topicOpenDate, topicCloseDate, topic.getDefaultAssignName())); + topicOpenDate, topicCloseDate, topic.getDefaultAssignName(), topicGbItemId)); viewableTopics++; } } Index: messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedForumInfo.java =================================================================== --- messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedForumInfo.java (revision 315424) +++ messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedForumInfo.java (working copy) @@ -17,6 +17,7 @@ private Long openDate; // An epoch date in seconds. NOT milliseconds. private Long closeDate; // An epoch date in seconds. NOT milliseconds. private String gradebookItemName; + private Long gradebookItemId; public DecoratedForumInfo(Long forumId, String forumTitle, List attachments, String shortDescription, @@ -32,7 +33,7 @@ List attachments, String shortDescription, String description, Boolean isLocked, Boolean isPostFirst, Boolean isAvailabilityRestricted, Long openDate, Long closeDate, - String gradebookItemName) { + String gradebookItemName, Long gradebookItemId) { this(forumId, forumTitle, attachments, shortDescription, description); this.isLocked = isLocked; this.isPostFirst = isPostFirst; @@ -40,6 +41,7 @@ this.openDate = openDate; this.closeDate = closeDate; this.gradebookItemName = gradebookItemName; + this.gradebookItemId = gradebookItemId; } public Long getForumId() { @@ -117,7 +119,15 @@ public void setGradebookItemName(String gradebookItemName) { this.gradebookItemName = gradebookItemName; } + + public Long getGradebookItemId() { + return gradebookItemId; + } + public void setGradebookItemId(Long gradebookItemId) { + this.gradebookItemId = gradebookItemId; + } + public String getShortDescription() { return shortDescription; } Index: messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedTopicInfo.java =================================================================== --- messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedTopicInfo.java (revision 315424) +++ messageforums-api/src/java/org/sakaiproject/api/app/messageforums/entity/DecoratedTopicInfo.java (working copy) @@ -18,6 +18,7 @@ private Long openDate; // An epoch date in seconds. NOT milliseconds. private Long closeDate; // An epoch date in seconds. NOT milliseconds. private String gradebookItemName; + private Long gradebookItemId; public DecoratedTopicInfo(Long topicId, String topicTitle, int unreadMessagesCount, int messagesCount, String typeUuid, @@ -39,7 +40,7 @@ List attachments, String shortDescription, String description, Boolean isLocked, Boolean isPostFirst, Boolean isAvailabilityRestricted, Long openDate, Long closeDate, - String gradebookItemName) { + String gradebookItemName, Long gradebookItemId) { this(topicId, topicTitle, unreadMessagesCount, messagesCount, typeUuid, attachments, shortDescription, description); @@ -49,6 +50,7 @@ this.openDate = openDate; this.closeDate = closeDate; this.gradebookItemName = gradebookItemName; + this.gradebookItemId = gradebookItemId; } public String getTypeUuid() { @@ -139,6 +141,14 @@ this.gradebookItemName = gradebookItemName; } + public Long getGradebookItemId() { + return gradebookItemId; + } + + public void setGradebookItemId(Long gradebookItemId) { + this.gradebookItemId = gradebookItemId; + } + public List getAttachments() { return attachments; }