Reload Scorm Player - Developer Resources


All of the code for the Scorm Player is open source and available from sourceforge CVS...

http://sourceforge.net/cvs/?group_id=76357

 

Monday 25th April 2005

I have had several requests to add in the functionality so that the player can be deployed as a standalone web application on any (jsp/servlet enabled) server - which can handle multiple users. Unfortunately, due to limited timescales & other project objectives, I do not have the time to add this functionality as I am busy on other software. However if you wish to add the multuser functionality yourself please read on.

As it stands the player only supports a single user. To make it multiuser will involve some coding on your part, but it is possible.

As a pointer to what things are involved with the player...

* Java
* Javascripting/HTML/Etc.
* Tomcat server (for JSP develoment) (but you can use any JSP/servlet compliant server if you put it up on a web server for real)
* Apache Struts - (for model-view-controller architecture)
* JDOM API for XML processing


Management

(a) You will need some sort of management functionality so you can create users (username & password) and add that user to a given scorm package - so he/she can take it.

(b). You will need a login mechanism so you can identify which user is accessing the player and create a session etc accordingly. This will be in the web app - a JSP page/servlet more than likely.

(c). Once logged in each user will require their own set of data. (most important)


More information on how to do this

At the moment for each package that is imported into the player it is assumed there is only one user. What happens when you import a scorm package is that the manifest.xml is parsed and then a set of xml files are produced to record any results. On windows, if you look under...

C:\Documents and Settings\YOURLOGINNAME\reload\reload-scorm-player\server\webapps\reload-scorm-player\course-packages\

...You will see a set of folders. Each of these folders represents a scorm package which you have imported into the player. If you look inside one of those folders and then look for another folder called "reload-settings" you should see a set of xml files in there. These are files which record the results of a user taking a scorm package (the tracking etc)

The first file to look at is reload-settings.xml. Here is an example...

<?xml version="1.0" encoding="UTF-8"?>
<!--Spawned from Reload Scorm Player - http://www.reload.ac.uk-->
<!--This is a version 1.2 SCORM 1.2 Sequencer Model-->
<navigation default="B0">
<manifest_last_modified>1110275535655</manifest_last_modified>
<item id="S100001" organization="B0">incomplete</item>
<item id="S110001" organization="B0">not attempted</item>
<item id="S110002" organization="B0">not attempted</item>
<item id="S110003" organization="B0">not attempted</item>
<item id="S100002" organization="B0">not attempted</item>
<item id="S100003" organization="B0">not attempted</item>
<item id="S100004" organization="B0">not attempted</item>
</navigation>


This records whether an item had been taken/completed/passed/etc. NOTE: Each user you add to this scorm course will need their own version of this file.

Next take a look at any of the other files you see in there. Each one is named after the identifier of a SCO found within the manifest.xml. For example, in the single_course_ex.zip example there is a "S100001.xml" file...

<?xml version="1.0" encoding="UTF-8"?>
<!--Spawned from Reload Scorm Player - http://www.reload.ac.uk-->
<!--This is a version 1.2 SCORM 1.2 SCO CMI Datamodel-->
<cmi>
<_version>3.4</_version>
<core>
<_children>student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time</_children>
<student_id>Reload-001</student_id>
<student_name>User, Reload</student_name>
<lesson_location />
<credit>credit</credit>
<lesson_status>incomplete</lesson_status>
<entry>ab-initio</entry>
<score>
<_children>raw,min,max</_children>
<raw />
<min />
<max />
</score>
<total_time>00:00:03.91</total_time>
<lesson_mode>normal</lesson_mode>
<exit />
<session_time>00:00:03.91</session_time>
</core>
<suspend_data />
<launch_data />
<comments />
<comments_from_lms />
<objectives>
<_children>id,score,status</_children>
<_count>0</_count>
</objectives>
<student_data>
<_children>mastery_score,max_time_allowed,time_limit_action</_children>
<mastery_score />
<max_time_allowed />
<time_limit_action>continue,no message</time_limit_action>
</student_data>
<student_preference>
<_children>audio,language,speed,text</_children>
<audio>0</audio>
<language />
<speed>0</speed>
<text>0</text>
</student_preference>
<interactions>
<_children>id,objectives,time,type,correct_responses,weighting,student_response,result,latency</_children>
<_count>0</_count>
</interactions>
</cmi>


This is used to record what information a SCO set when it was played in the browser. At runtime a bona-fide sco (not an asset) will set certain values in the cmi model. The Reload SP will write these changes to the files as above - so that they are persisted and the scorm engine knows where a user is up to, what scores were set etc.
NOTE: Each user you add to this scorm course will need their own version of each of these files.


You will also need to change some default values found in each sco.xml files (above). In the cmi datamodel each user is supposed to have the following info...

cmi.core.student_id
cmi.core.student_name

Because in the current player there is only one assumed user these are always set to...

cmi.core.student_id = Reload-001
cmi.core.student_name = User, Reload

I would suggest that for each user you add to the system - you create a copy of the original sco & navigation files for each user - replacing the above values in each sco file with a users own set of data.


So how would all this work?

You can use databases etc to store information about various users - or stick to the filesystem, as I have.

I prefer using xml standalone;-)


OR...

The idea would be that the scorm package is imported as usual the first time - this would be the TEMPLATE. For each user your management system adds to the course - you would create a copy of all of the required files in another location (modified so that they reflect the cmi.core.student_id and cmi.core.student_name changes)

You would then make some changes in the backend of the player so that once a user has logged in you could point the player at the package for that particular user.

For example, instead of just having the following structure as it is now...

C:\Documents and Settings\YOURLOGINNAME\reload\reload-scorm-player\server\webapps\reload-scorm-player\course-packages\

You would also have another folder which was for each user. In there would be a similar structure as above - but with their own set of data.


i.e. (The new structure is in bold, the exising course-packages folder would hold the templates)

-course-packages
          |----- TEMPLATE-COURSE-ONE
          |----- TEMPLATE-COURSE-TWO
          |----- TEMPLATE-COURSE-THREE

-users-packages
             |----- reloaduser-001
                                   |----- reloaduser-001-COURSE-ONE
                                   |----- reloaduser-001-COURSE-TWO
                                   |----- reloaduser-001-COURSE-THREE
             |----- paulsmith-001
                                   |----- paulsmith-001-COURSE-ONE
                                   |----- paulsmith-001-COURSE-TWO
                                   |----- paulsmith-001-COURSE-THREE
             |----- fredebloggs-031
                                   |----- fredebloggs-031-COURSE-ONE
                                   |----- fredebloggs-031-TWO
                                   |----- fredebloggs-031-THREE

Things to look at changing in the codebase

You will need to see how the classes operate/work that are found under the server section of the code base. the changes you will probabaly have to make will be in most, if not all of the following (and perhaps a couple of others elsewhere)

uk.ac.reload.scorm-player.server.manager.ScormManager
uk.ac.reload.scorm-player.server.sequence.ItemSequence

uk.ac.reload.scorm-player.server.sequence.PrerequisisteManager
uk.ac.reload.scorm-player.server.sequence.SequenceManager

uk.ac.reload.scorm-player.server.servermodels.*
uk.ac.reload.scorm-player.server.servlets.ScormLaunch

Finally

I hope this starts you off in the right direction. Once you've figured out how the code works - the changes shouldn't be that difficult. I am very interested in resubmitting any devleopment in this area back into the sourceforge code base - either as part of the original or as a standalone deployable web application. If you have successfully made these modifications, I would like to hear from you.

Good Luck

Paul Sharples
System Developer
Reload Project
University of Bolton
Email p.sharples@bolton.ac.uk