The Learning Environment Connector API includes partial support for user and course conversion operations. This feature is aimed at CE4, CE6, and Vista installations, and it is unlikely that it will be used by third-party implementations.
Download sample Building Block
Code for the sample below can be downloaded from here. The steps below reference this sample.
User Conversion
To add support for this feature, you need to do the following:
- Add Feature.ConvertUser to the list of valid Feature codes SupportProvider.isFeatureSupported() returns true for
- Implement the MigrationProvider interface
- Implement the MigrationProvider.convertPassword, MigrationProvider.getUserPasswords, and MigrationProvider.markUsersConverted methods
On the LMS side, the following requirements must be met:
- User password hashes must be compatible with one of the formats supported by Blackboard Learn. If no compatible format is available, user conversion can still be performed, but user passwords must be reset afterwards. Formats currently supported:
- MD5 crypt
- DES crypt
Course Conversion
| Supporting this feature requires that the LMS is capable of producing Blackboard Learn-compatible content packages. |
To add support for this feature, you need to do the following:
- Add Feature.ConvertCourse to the list of valid Feature codes SupportProvider.isFeatureSupported() returns true for
- Implement the MigrationProvider interface
- Implement the MigrationProvider.convertCourse, MigrationProvider.exportCourse, and MigrationProvider.undoCourseConversion methods
On the LMS side, the following requirements must be met:
- Converted courses should not be available to users, since they are no longer the authoritative instance of that course.
- Content packages must be in Blackboard Learn format (Blackboard Learn supports IMS Content Packaging Specification v1.1.2).
Sample Code
bb-manifest.xml changes
<?xml version="1.0" encoding="ISO-8859-1"?> <manifest> ... <module-defs> <definition namespace="blackboard.platform.integration"> ... <extension id="sampleMigrationProvider" point="blackboard.platform.integration.supportProvider" class="blackboard.platform.integration.extension.sample.SampleMigrationProvider" singleton="false" /> ... </definition> </module-defs> ... </manifest>
IntegrationExtension changes
public class SampleIntegrationExtension extends AbstractIntegrationExtension { ... @Override public String getProviderId( ProviderType providerType ) { switch ( providerType ) { ... case Migration: return "sampleMigrationProvider"; ... } ... } ... }
MigrationProvider implementation
package blackboard.platform.integration.extension.sample; import blackboard.platform.integration.CourseLmsIntegration; import blackboard.platform.integration.exchange.CourseContentPackageXO; import blackboard.platform.integration.exchange.UserPasswordXO; import blackboard.platform.integration.extension.AbstractMigrationProvider; import blackboard.platform.log.Log; import java.io.InputStream; import java.util.*; public class SampleMigrationProvider extends AbstractMigrationProvider { @Override public UserPasswordXO convertPassword( String lmsPassword ) { // // This method will need to transform encrypted passwords from the LMS's // hashing format into one of the formats supported by Blackboard Learn. // If no compatible format is available, you can return UNSET_PASSWORD, // which means the user must reset their password after conversion. // return UserPasswordXO.UNSET_PASSWORD; } @Override public Map<String, UserPasswordXO> getUserPasswords( Set<String> lmsUserNames, Log auditLog ) { // // This method will need to contact the LMS to acquire the current passwords // for the specified users. These passwords can then be transformed into // one of the formats supported by Blackboard Learn. // Map<String, UserPasswordXO> result = new HashMap<String, UserPasswordXO>(); for ( String lmsUserName : lmsUserNames ) { result.put( lmsUserName, UserPasswordXO.UNSET_PASSWORD ); } return result; } @Override public Map<String, Boolean> markUsersConverted( Set<String> lmsUserNames, boolean isConverted, Log auditLog ) { // // This method will need to notify the LMS that the users have been successfully // converted, and are now native Blackboard Learn users. // Map<String, Boolean> result = new HashMap<String, Boolean>(); for ( String lmsUserName : lmsUserNames ) { result.put( lmsUserName, Boolean.TRUE ); } return result; } @Override public CourseContentPackageXO convertCourse( CourseLmsIntegration courseIntegration ) { // // This method will need to do the following: // 1. Make the LMS instance of the course unavailable in the UI // 2. Export a Blackboard Learn-compatible content package from the LMS course // 3. Make the content package available to Blackboard Learn in the form of // an input stream. // InputStream packageStream = null; // TODO - acquire a valid input stream from the LMS String packageName = "mypackage.zip"; return new CourseContentPackageXO(packageStream, packageName); } @Override public void undoCourseConversion( CourseLmsIntegration courseIntegration ) { // // Notify the LMS that the conversion operation failed, and that any // changes made to support conversion should be rolled back. // } @Override public CourseContentPackageXO exportCourse( CourseLmsIntegration courseIntegration ) { // // This method is very similar to convertCourse; it will need to do the following: // 1. Export a Blackboard Learn-compatible content package from the LMS course // 2. Make the content package available to Blackboard Learn in the form of // an input stream. // InputStream packageStream = null; // TODO - acquire a valid input stream from the LMS String packageName = "mypackage.zip"; return new CourseContentPackageXO(packageStream, packageName); } @Override public boolean isPublisherCourse( CourseLmsIntegration courseIntegration ) { // // If the LMS supports the concept of publisher-protected content, this is where // Blackboard Learn can be notified whether the current course contains any // of this publisher content. // return false; } }
Test the Connector
User conversion
- Log into Blackboard Learn as an System Administrator.
- Navigate to Admin Panel > Learning Environment Integrations.
- Click the context menu for one of your existing integrations, and select Convert Users.
- Select one or more users for conversion.
- Click Convert.
Course conversion
- Navigate to Admin Panel > Learning Environment Integrations.
- Click the context menu for one of your existing integrations, and select Convert Courses.
- Select one or more courses for conversion.
- Click Convert.