Title: My First Building Block
1My First Building Block
- Presented By Tracy Engwirda
28 September, 2005
2Overview
- Background
- Planning
- UI Integration
- Which APIs
- Package Structure
- Manifest Structure
- Security Framework
- UI Taglibs
- Building Blocks Manager
- .. and more
3Terminology
- Building Blocks Program
- All development and integration with Blackboard
products - Building Blocks Framework
- The set of patterns and objects that allow
interaction with all of Blackboards products - Building Blocks API
- The Java and .NET interfaces
- Building Blocks Manager
- The management interface for Building Blocks
- Building Block
- An application that relies on the Building Blocks
API - Blackboard Enabled
- A quality assurance and testing program for
Building Blocks
4Terminology
- Building Block Types
- Plug-in
- Stand alone
- Communicate only with Learning System
- Bridge
- Communicates with external server(s) and Learning
System - Will not function without external server
5Planning
- What are you project goals?
- What are the application requirements?
- How are you going to build your application?
- JSP? Servlet? Web Service?
- Where are you going to hook your application?
- Which APIs are you going to use?
6Planning
- Where are you going to hook your application into
Blackboard?
7UI Entry Points
- New Course Tool
- New Course Communication Tool
- New Control Panel Tool
- New System Admin Tool
- New Portal Module
- New Content Type
- New User Tool
8Entry Points
- Programmatic Entry Points
- Specified in bb-manifest.xml
- Manual Entry Points
- System Administrator created
9Course Tool
- ltlinkgt
- lttype value"tool"/gt
- ltname value"Sample Tool"/gt
- lturl value"tool_1/tool.jsp" /gt
- ltdescription value"The description of Sample
Tool." /gt - lticonsgt
- ltlistitem value"/images/icon.gif"/gt
- lt/iconsgt
- lt/linkgt
- Course ID is passed to page
10Course Communication Tool
- ltlinkgt
- lttype value"communication"/gt
- ltname value"Sample Communication Tool"/gt
- lturl value"communication_1/tool.jsp" /gt
- ltdescription value"The description of Sample
Communication Tool." /gt - lticonsgt
- ltlistitem value"images/icon.gif"/gt
- lt/iconsgt
- lt/linkgt
- Course ID is passed to page
11Course Control Panel
- ltlinkgt
- lttype value"course_tool"/gt
- ltname value"Sample Control Panel Tool"/gt
- lturl value"control_panel_1/tool.jsp" /gt
- ltdescription value"The description of Control
Panel Tool." /gt - lticonsgt
- ltlistitem value"images/icon.gif"/gt
- lt/iconsgt
- lt/linkgt
- Course ID is passed to page
12System Admin Panel
- ltlinkgt
- lttype value"system_tool"/gt
- ltname value"Sample Admin Panel Tool"/gt
- lturl value"admin_panel_1/tool.jsp" /gt
- ltdescription value"The description of Control
Panel Tool." /gt - lticonsgt
- ltlistitem value"images/icon.gif"/gt
- lt/iconsgt
- lt/linkgt
- Nothing passed to page
13Content Type
- ltcontent-handlergt
- ltname value"Sample Content"/gt
- lthandle value "resource/x-bbgs-sample"/gt
- lthttp-actionsgt
- ltcreate value"handler/create.jsp"/gt
- ltmodify value"handler/modify.jsp"/gt
- ltremove value"handler/remove.jsp"/gt
- lt/http-actionsgt
- lticonsgt
- lttoolbar value"/images/add_ch1.gif"/gt
- ltlistitem value"/images/icon.gif"/gt
- lt/iconsgt
- lt/content-handlergt
- Course ID and Container ID are passed to page
14Portal Module
- ltmodule-defsgt
- ltmodule-type ext-ref"smpl-module"
title"Sample Module Type" uicreatable"true"gt - ltjsp-dirgtmodulelt/jsp-dirgt
- ltjspgt
- ltviewgtview.jsplt/viewgt
- ltadmingtadmin.jsplt/admingt
- lt/jspgt
- lt/module-typegt
- lt/module-defsgt
- Nothing is passed to page
15User Tool
- ltlinkgt
- lttype value"user_tool"/gt
- ltname value"Sample User Tool"/gt
- lturl value"user_tool_1/tool.jsp" /gt
- ltdescription value"The description of User
Tool." /gt - lticonsgt
- ltlistitem value"images/icon.gif"/gt
- lt/iconsgt
- lt/linkgt
- Nothing passed to page
16Custom Tab
- System admin can change the location of a tab to
point to a Building Block
17Custom Course Link
- System admin or course instructor change add a
Building Block to the course navigation area
18Hidden Link
- A page does not need to be in the manifest in
order to be loaded.
19Planning
- Which APIs are you going to use?
20API Capabilities
- Building Blocks APIs
- Announcement (read and write)
- Calendar (read and write)
- Content (read and write)
- Gradebook (read and write)
- Session (read and write)
- File system (read and write)
- User (read)
- Course (read)
- Membership (read)
- .. And Many, many more!
21API Capabilities
- How to write to User/Course/Membership?? Event
APIs - Event APIs use a similar data model to the
Building Block APIs but has a different security
model. Data object naming conventions match IMS
structure of snapshot data.
22API Capabilities
- Event APIs
- Person (User)
- Group (Course / Organization)
- Membership
- Catalog Category
- Catalog Link
- Data Source Key
23Planning
24Installation
- Only system administrators can install
- No restart required with Bb 6
- Must confirm Building Block permissions
- Often requires configuration
- Installation is through the Building Blocks
Manager
25Building Block Manager
- Heart of the Blackboard Platform
- Controls security, permissions, and availability
- Manages the hook points within the UI
- Handles deployment
26Building Block Manager
User Interface Hooks / Availability
Context Passing
Security Manifest Controls
Deployment Tracking
API Wrappers Convenience Methods
Data Integrity Enforcement
Content
Gradebook
Announcements
User
Course
Membership
Calendar
File System
Persistence
Plugin
Security
Session
TagLib (UI)
27Building Block Manager
28Structure of Building Blocks
29Building Block Webapp
- A Building Block is a Java Web Application
(webapp) with one extra file - The extra file is bb-manifest.xml
30Directory Layout
Shared via web
Hidden from web
31Package Format
- A webapp is a zip file with a specific directory
structure - WinZip, PkZip, Javas Jar utility, or Ant will
all create the correct package - Even though it is a zip file, the extension does
not matter (.zip, .war, .bb will all work)
32WEB-INF
- Hidden from web
- Contents
- web.xml
- bb-manifest.xml
- Config directory
- Classes directory
- Lib directory
33Config Directory
- Hidden from web
- Only accessible by the Building Block
- Can contain anything
- One option for storing your application data.
- No size limit
34Custom Code and Libraries
- Classes
- Stored in WEB-INF\classes
- Jars
- Stored in WEB-INF\lib
- Automatically on classpath via custom classloader
35Manifest Structure
- bb-manifest.xml
- Set of directives the developer provides
- Building Blocks Configuration
- Application Definitions
- Content Handlers
- UI Links
- Portal Modules
- Security Declarations
- Lets Take a Look
36bb-manifest.xml File
lt?xml version"1.0" encoding"ISO-8859-1"?gt ltmanif
estgt ltplugingt ltname value
"Blackboard Link Checker"/gt lthandle
value "link-checker"/gt ltdescription
value "This plugin is for checking and disabling
external links in Blackboard."/gt ltversion
value "2.0.4"/gt ltrequiresgt
ltbbversion value"6.0.0"/gt lt/requiresgt
ltvendorgt ltid value"bb"/gt
ltname value"Blackboard Research and
Development"/gt lturl
value"http//www.blackboard.com/" /gt
ltdescription value"Blackboard Research and
Development Team" /gt lt/vendorgt
lthttp-actionsgt ltconfig
value"admin/config.jsp"/gt ltremove
value"admin/remove.jsp"/gt
lt/http-actionsgt ltapplication-defsgt
ltapplication handle"linkchecker"
type"course" use-ssl"false" name"Link Checker"
can-allow-guest"true" small-icon""
large-icon""gt
37bb-manifest.xml File
lt?xml version"1.0" encoding"ISO-8859-1"?gt ltmanif
estgt ltplugingt ltname value
"Blackboard Link Checker"/gt lthandle
value "link-checker"/gt ltdescription
value "This plugin is for checking and disabling
external links in Blackboard."/gt ltversion
value "2.0.4"/gt ltrequiresgt
ltbbversion value"6.0.0"/gt lt/requiresgt
ltvendorgt ltid value"bb"/gt
ltname value"Blackboard Research and
Development"/gt lturl
value"http//www.blackboard.com/" /gt
ltdescription value"Blackboard Research and
Development Team" /gt lt/vendorgt
lthttp-actionsgt ltconfig
value"admin/config.jsp"/gt ltremove
value"admin/remove.jsp"/gt
lt/http-actionsgt ltapplication-defsgt
ltapplication handle"linkchecker"
type"course" use-ssl"false" name"Link Checker"
can-allow-guest"true" small-icon""
large-icon""gt
38bb-manifest.xml File
ltapplication-defsgt
ltapplication handle"linkchecker" type"course"
use-ssl"false" name"Link Checkergt
ltdescription lang"en_US"gtLink Checker tool
installed with the Link Checker
Pluginlt/descriptiongt ltlinksgt
ltlinkgt lttype
value"course_tool"/gt ltname
value"Link Checker"/gt lturl
value"links/checklinks.jsp" /gt
ltdescription value"Checks and disables links in
Blackboard." /gt lticonsgt
ltlistitem value"images/link-logo.gif"/gt
lt/iconsgt
lt/linkgt lt/linksgt
lt/applicationgt lt/application-defsgt
ltpermissionsgt
ltpermission type"persist" name"Content"
actions"modify"/gt ltpermission
type"attribute" name"user.authinfo"
actions"get"/gt ltpermission
type"socket" name"" actions"connect"/gt
lt/permissionsgt lt/plugingt lt/manifestgt
39bb-manifest.xml File
ltapplication-defsgt
ltapplication handle"linkchecker" type"course"
use-ssl"false" name"Link Checkergt
ltdescription lang"en_US"gtLink Checker tool
installed with the Link Checker
Pluginlt/descriptiongt ltlinksgt
ltlinkgt lttype
value"course_tool"/gt ltname
value"Link Checker"/gt lturl
value"links/checklinks.jsp" /gt
ltdescription value"Checks and disables links in
Blackboard." /gt lticonsgt
ltlistitem value"images/link-logo.gif"/gt
lt/iconsgt
lt/linkgt lt/linksgt
lt/applicationgt lt/application-defsgt
ltpermissionsgt
ltpermission type"persist" name"Content"
actions"modify"/gt ltpermission
type"attribute" name"user.authinfo"
actions"get"/gt ltpermission
type"socket" name"" actions"connect"/gt
lt/permissionsgt lt/plugingt lt/manifestgt
40bb-manifest.xml File
ltapplication-defsgt
ltapplication handle"linkchecker" type"course"
use-ssl"false" name"Link Checkergt
ltdescription lang"en_US"gtLink Checker tool
installed with the Link Checker
Pluginlt/descriptiongt ltlinksgt
ltlinkgt lttype
value"course_tool"/gt ltname
value"Link Checker"/gt lturl
value"links/checklinks.jsp" /gt
ltdescription value"Checks and disables links in
Blackboard." /gt lticonsgt
ltlistitem value"images/link-logo.gif"/gt
lt/iconsgt
lt/linkgt lt/linksgt
lt/applicationgt lt/application-defsgt
ltpermissionsgt
ltpermission type"persist" name"Content"
actions"modify"/gt ltpermission
type"attribute" name"user.authinfo"
actions"get"/gt ltpermission
type"socket" name"" actions"connect"/gt
lt/permissionsgt lt/plugingt lt/manifestgt
41Security Framework
- Security must be explicitly declared in the
bb-manifest.xml file. - XML Format corresponds closely with the format
for Standard Java policy files - Security will be enforced by the JVM
42UI Taglibs
- XML style tags that can be placed on a jsp page.
- Blackboard supplies two sets of taglibs
- bbUI for making pages fit in with the product
- bbData for giving pages context and virtual
installation information - Specify your own in web.xml
43More information
- Building Blocks Website http//www.blackboard.com/
developers/ - Building Blocks Catalog
- Software Development Kit (SDK)
- Blackboard Developer Network (BbDN)http//behind.
blackboard.com/ - Learning System Developer License
- Communities, Knowledge Base, Code Snippets, White
Papers, Beta Software - Other Community Resources
- Open Source User Group and BBUG forums
http//www.bb-opensource.org/
44Why Start from Scratch?
- Start with a sample Building Block
- Reuse existing code
- Customize to meet your needs
45Enough of the theory!
Lets take a look at some real code
46Questions?