[Building Sakai] Problems making grades visible in Gradebook

Kevin Takacs ktakacs at anisakai.com
Wed Jul 3 18:25:47 PDT 2013


I have completed an implementation of the ExternalAssignmentProvider for
JForum and attached a patch for JForum trunk to SAK-23733.  With this
implementation the problems of forum grades not appearing for students and
the incorrect grade calculations appear to be resolved for JForum.

Diff:

Index: jforum-impl/impl/src/java/org/etudes/component/app/jforum/
JForumExternalAssignmentProvider.java
===================================================================
--- jforum-impl/impl/src/java/org/etudes/component/app/jforum/
JForumExternalAssignmentProvider.java (revision 0)
+++ jforum-impl/impl/src/java/org/etudes/component/app/jforum/
JForumExternalAssignmentProvider.java (revision 0)
@@ -0,0 +1,121 @@
+package org.etudes.component.app.jforum;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.etudes.api.app.jforum.*;
+import org.sakaiproject.service.gradebook.shared.ExternalAssignmentProvider
;
+import org.sakaiproject.service.gradebook.shared.
GradebookExternalAssessmentService;
+
+import java.util.*;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: kevin
+ * Date: 7/1/13
+ * Time: 2:09 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class JForumExternalAssignmentProvider implements
ExternalAssignmentProvider {
+
+    private Log logger = LogFactory.getLog(JForumExternalAssignmentProvider
.class);
+
+    private GradebookExternalAssessmentService
gradebookExternalAssessmentService;
+
+    private JForumGradeService jForumGradeService;
+
+    private JForumForumService jForumForumService;
+
+    public void init(){
+        logger.info("Init and register JForumExternalAssignmentProvider");
+        gradebookExternalAssessmentService.
registerExternalAssignmentProvider(this);
+    }
+
+    public void destroy(){
+        logger.info("Destroy and unregister
JForumExternalAssignmentProvider");
+        gradebookExternalAssessmentService.
unregisterExternalAssignmentProvider(getAppKey());
+    }
+
+    public String getAppKey() {
+        return "jforum";
+    }
+
+    public boolean isAssignmentDefined(String id) {
+
+        logger.debug("JForumExternalAssignmentProvider
isAssignmentDefinedid=" + id);
+
+        return jForumGradeService.getByForumId(Integer.parseInt(id)) !=
null;
+    }
+
+    public boolean isAssignmentGrouped(String id) {
+        logger.debug("JForumExternalAssignmentProvider
isAssignmentGroupedid=" + id);
+
+        return jForumForumService.getForum(Integer.parseInt(id)).
getAccessType() == 2;
+    }
+
+    public boolean isAssignmentVisible(String id, String userId) {
+        logger.debug("JForumExternalAssignmentProvider
isAssignmentVisibleid=" + id + "
userId=" + userId);
+
+        try {
+            Forum forum = jForumForumService.getForum(Integer.parseInt(id),
userId);
+            if(forum != null){
+                if(forum.getAccessType() == 0){
+                    return true;
+                }
+            } else {
+                return false;
+            }
+        } catch (JForumAccessException e) {
+            logger.warn("JForumExternalAssignmentProvider
isAssignmentVisible caught exception " + e, e);
+        }
+
+        return false;
+    }
+
+    public List<String> getExternalAssignmentsForCurrentUser(String
gradebookUid) {
+        logger.debug("JForumExternalAssignmentProvider
getExternalAssignmentsForCurrentUser gradebookUid=" + gradebookUid);
+
+        return getAssignmentList(gradebookUid);
+    }
+
+    public Map<String, List<String>> getAllExternalAssignments(String
gradebookUid, Collection<String> studentIds) {
+
+        Map<String, List<String>> studentAssignmentMap = new HashMap<String,
List<String>>();
+
+        List<String> assignments = getAssignmentList(gradebookUid);
+
+        if(assignments != null && !assignments.isEmpty()){
+
+            for(String studentId : studentIds){
+                studentAssignmentMap.put(studentId, assignments);
+            }
+        }
+
+        return studentAssignmentMap;
+    }
+
+    private List<String> getAssignmentList(String gradebookUid) {
+
+        List<String> assignmentList = new ArrayList<String>();
+        List<Grade> grades = jForumGradeService.getBySite(gradebookUid);
+
+        if(grades != null && !grades.isEmpty()){
+            for(Grade grade : grades){
+                assignmentList.add(JForumGradeService.JFORUM_GRADEBOOK
_EXTERNAL_ID_CONCAT + String.valueOf(grade.getId()));
+            }
+        }
+
+        return assignmentList;
+    }
+
+    public void setGradebookExternalAssessmentService(
GradebookExternalAssessmentService gradebookExternalAssessmentService) {
+        this.gradebookExternalAssessmentService =
gradebookExternalAssessmentService;
+    }
+
+    public void setjForumForumService(JForumForumServiceImpl
jForumForumService) {
+        this.jForumForumService = jForumForumService;
+    }
+
+    public void setjForumGradeService(JForumGradeServiceImpl
jForumGradeService) {
+        this.jForumGradeService = jForumGradeService;
+    }
+}

Property changes on: jforum-impl/impl/src/java/org/etudes/component/app/
jforum/JForumExternalAssignmentProvider.java
___________________________________________________________________
Added: svn:keywords
   + Date Revision Author HeadURL Id
Added: svn:eol-style
   + native

Index: jforum-impl/pack/src/webapp/WEB-INF/components.xml
===================================================================
--- jforum-impl/pack/src/webapp/WEB-INF/components.xml (revision 84201)
+++ jforum-impl/pack/src/webapp/WEB-INF/components.xml (working copy)
@@ -654,4 +654,14 @@
  <ref bean="org.sakaiproject.db.api.SqlService" />
  </property>
  </bean>
+
+    <bean id="org.etudes.component.app.jforum.
JForumExternalAssignmentProvider"
+          class="org.etudes.component.app.jforum.
JForumExternalAssignmentProvider"
+          singleton="true" lazy-init="false" init-method="init"
destroy-method="destroy">
+
+        <property name="gradebookExternalAssessmentService"><ref bean="org.
sakaiproject.service.gradebook.GradebookExternalAssessmentService
"/></property>
+        <property name="jForumGradeService"><ref bean="org.etudes.api.app.
jforum.JForumGradeService"/></property>
+        <property name="jForumForumService"><ref bean="org.etudes.api.app.
jforum.JForumForumService"/></property>
+    </bean>
+
 </beans>


On Wed, Jul 3, 2013 at 6:20 AM, Noah Botimer <nbotimer at unicon.net> wrote:

>  Hi folks,
>
> The issue is a little more subtle than described below, but I won't go
> into too much detail here. What's more important is that I think we have
> most of a fix implemented:
>
> https://github.com/botimer/sakai-cle/tree/gb-group<https://github.com/botimer/sakai-cle/tree/gb-groups>
>
> https://github.com/botimer/sakai-cle/commit/6f36b51cbb90e0daae3d61e135fc00b03a2941a0
>
> I've talked with Chuck Hedrick about Lessons and there will probably be a
> resolution to an additional issue there today (which was discussed in
> another thread).
>
> There are lots of comments. Please review and provide feedback.
>
> Zhen, I'd especially like your blessing on the little change to
> BaseAssignmentService.
>
> If the approach passes muster, we'll give some implementation advice to
> contrib tools -- it's a pretty simple addition to the providers,
> implementing one additional list method. It's in a supplemental interface
> for now, so it won't accidentally break existing contrib providers, though
> they will need to implement it for full functionality.
>
> Thanks,
> -Noah
>
>
> On 07/02/2013 08:13 PM, Neal Caidin wrote:
>
> Hi All,
>
>  Looping in QA and Production.
>
>  My understanding is that https://jira.sakaiproject.org/browse/SAK-23733has the following symptoms:
>
>  For Contrib tools which use Groups to integrate with the Gradebook the
> student cannot see the grade assigned by the instructor and the grade is
> not included in the Course Grade calculation.
>
>  Same symptoms for the Lessons tool.
>
>  I do not believe that it affects Assignments, Forums, or Test and
> Quizzes (Samigo).
>
>  No ETA for SAK-23733 but it is being actively worked on. Not sure yet if
> this will be in CLE 2.9.3 or not, but we are a little behind in any case
> (we have not yet released our first release candidate).
>
>  Thanks,
>
>  Neal Caidin
> Sakai CLE Community Coordinator
> Apereo Foundation
>
>  neal.caidin at apereo.org
> Skype: nealkdin
>
>   On Jul 2, 2013, at 6:24 PM, Kevin Takacs <ktakacs at anisakai.com> wrote:
>
>  We ran into the same problem, and I have started working on an
> ExternalAssignmentProvider implementation for JForum.  I hope to have it
> completed soon and will contribute it within the next few days.
>
> On Tue, Jul 2, 2013 at 1:32 PM, Zhen Qian <zqian at umich.edu> wrote:
>
>> Hi, George:
>>
>>  If you are running 2.9, I do believe lack of "ExternalAssignmentProvider"
>> impl is the cause of the problem. JForum, same as Test Center, are contrib
>> tools from etudes, and neither implements ExternalAssignmentProvider
>> API. We have patched Test Center locally in UMICH-766<https://jira.sakaiproject.org/browse/UMICH-766>
>> .
>>
>>  Since people are actively working on SAK-23733<https://jira.sakaiproject.org/browse/SAK-23733> to
>> make ExternalAssignmentProvider impl backward compatible, I would suggest
>> to wait for SAK-23733 patch, instead of writing an impl of
>> ExternalAssignmentProvider in JForum.
>>
>>  Thanks,
>>
>>  - Zhen
>>
>>
>>  On Tue, Jul 2, 2013 at 4:16 PM, George Pipkin <gpp8p at virginia.edu>wrote:
>>
>>>  Hi -
>>>
>>>    We've run into a problem in which a graded Jforum Forum transfers
>>> grades to GB, but these grades are not
>>> visible to the students.  I'm wondering if this problem might be related
>>> to ExternalAssignmentProvider - is
>>> it implemented in Jforums ?  There's be a bit of discussion about this
>>> surrounding SAK-23733 <https://jira.sakaiproject.org/browse/SAK-23733>.
>>> Since
>>> the implication of not implementing it might include some impacts on GB
>>> grade totals, you can understand
>>> why we at U.Va. are interested in understanding this problem better.
>>>
>>>
>>>                                                     - George Pipkin
>>>                                                        U.Va.
>>>
>>>
>>>
>
> _______________________________________________
> sakai-dev mailing list
> sakai-dev at collab.sakaiproject.org
> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>
> TO UNSUBSCRIBE: send email to
> sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of
> "unsubscribe"
>



-- 
Kevin Takacs
Software Engineer
*O **602-337-8408*
*M **480-544-1972*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20130703/ac6ea522/attachment.html 


More information about the sakai-dev mailing list