Slideshow transcript
Slide 1: Reaching a New Level of Collaboration With Sametime 7.5 Rob Novak SNAPPS © 2006 Wellesley Information Services. All rights reserved.
Slide 2: What We’ll Cover … • Introducing Sametime 7.5 Connect Client • Extending the Connect Client • Understanding Sametime Architecture, Eclipse, and WED • Exploring the Sample Plug-ins • Definitive Resources 2
Slide 3: Sametime Connect 7.5 = Redesigned Real-Time Collaboration Instant Messaging Presence Awareness Instant Web Conferencing All welcome features, however the focus of this presentation will be … Extensibility 3
Slide 4: Sametime Connect 7.5 – New Look and Feel Before After 4
Slide 5: Sametime Connect 7.5 – Many New Features • There are literally pages of new improvements, such as chat history 5
Slide 6: Sametime Connect 7.5 – Many New Features (cont.) • Voice chat for up to five participants • Telephony integration available from 3rd party providers 6
Slide 7: Unified Instant Messaging and Extensibility • Sametime Connect 7.5 is the first release of the new unified instant messaging (UIM) client • All managed client products use the same Eclipse-based WebSphere Everyplace Deployment (WED) platform • UIM is a set of common instant messaging and presence client components for IBM managed client products, including Hannover and Workplace Managed Client (WMC) 7
Slide 8: Extensible Client Based on Eclipse • Integrating contributions from various plug-ins is Eclipse’s raison-d’être • Partner program includes more than 40 participants delivering solutions • IBM and third-party plug- ins extend Sametime Connect with VoIP, Location Awareness, LDAP, etc. 8
Slide 9: What We’ll Cover … • Introducing Sametime 7.5 Connect Client • Extending the Connect Client • Understanding Sametime Architecture, Eclipse, and WED • Exploring the Sample Plug-ins • Definitive Resources 9
Slide 10: How to Extend Sametime Connect 7.5 • Sametime Connect 7.5 is built on Eclipse • SDK’s Integration Guide includes practical end-user extensions to demonstrate how the product can be enhanced by third parties using plug-ins • Extensions allow seamless integration into the Sametime Connect 7.5 client user interface 10
Slide 11: Adding UI Extensions (Main Window) 11
Slide 12: Adding UI Extensions (Chat Window) 12
Slide 13: Sametime Connect 7.5 Demonstration Demo Sametime Connect 7.5 13
Slide 14: What We’ll Cover … • Introducing Sametime 7.5 Connect Client • Extending the Connect Client • Understanding Sametime Architecture, Eclipse, and WED • Exploring the Sample Plug-ins • Definitive Resources 14
Slide 15: What Is Eclipse and WED? • Sametime Connect Client is composed of Eclipse plug-ins • Wait … isn’t Eclipse an IDE? Yes, but it is also a rich client application development platform Architected with extensibility as one of the primary objectives Plug-ins are the base functional unit (declarations + code) Plug-ins define “extension points” where other plug-ins can contribute (e.g., menu items, services) • Plug-ins can define extension points to allow other plug-ins to extend their functionality Sametime plug-in extension points are documented in the Sametime Connect Client Toolkit 15
Slide 16: What Is Eclipse and WED? (cont.) • Extend the Sametime Client by creating your own plug- ins that leverage the Sametime plug-in extension points Your plug-ins can access any services exposed by Sametime and the underlying platforms (RTC API, Sametime Java API, WED, Eclipse, Java RTE) Your plug-ins register listeners for events that they need to handle Your plug-ins can define extension points for other plug-ins to use • See www.eclipse.org for more information • WebSphere EveryPlace Deployment builds upon Eclipse to deliver an enterprise-ready rich client application platform 16
Slide 17: Sametime 7.5 Client Architecture (Eclipse Base) Sametime Sametime Platform Platform Eclipse 3.2 RCP SWT JFace Workbench Help Perspectives Platform Runtime 17
Slide 18: UIM Client Architecture User Interface Components Community Services Service and Chat OS-Specific Quick RT Buddy List Telephony User Info Plug-in Directory Privacy Policy Storage Services Find Session Storage Registry RTC (Real-Time Collaboration) API Messaging Storage Location Policy Capabilities Real-Time Other Services Service Service Service Login Chat Presence Notification Sessions Tools Third-Party * SIP and third-party protocols not supported in Sametime 7.5 SIP Stack * Sametime Java Toolkit Protocols * WED 6.1 (WebSphere Everyplace Deployment) Credential Pre-Authenticated Embedded Network User Interface Localization Spell Checker ... Store/SSO Browser Browser Sensing Components Eclipse 3.2 RCP Java Runtime Environment (J9 JCL Desktop for Sametime Connect 7.5) 18
Slide 19: What We’ll Cover … • Introducing Sametime 7.5 Connect Client • Extending the Connect Client • Understanding Sametime Architecture, Eclipse, and WED • Exploring the Sample Plug-ins • Definitive Resources 19
Slide 20: Sample Plug-ins • Quick Response • Acronym Expander • Recent Buddies • Branding • Buddy Note • Snippets 20
Slide 21: Quick Response Plug-in • What it does for the user: Provides one-click button to answer common questions • What it demonstrates for the programmer: Chat window integration using pop-up add-on Adding chat toolbar action 21
Slide 22: Quick Response UI Clicking this Clicking this button or… drop-down Opens the Quick Response pop-up add on* Opens the Quick Response menu pulldown * Same pop-up add on is used to show peer-to-peer file send status (tabs appear if there is more than one pop-up add on needed) 22
Slide 23: Quick Response Manifest – Required Plug-ins • Manifest-Version: 1.0 • The Quick Response • Bundle-ManifestVersion: 2 manifest file • Bundle-Name: Quick Response Plug-in • Bundle-SymbolicName: com.ibm.collaboration.realtime.sample. quickresponse;singleton:=true • Bundle-Version: 1.0.2 • Bundle-Activator: com.ibm.collaboration.realtime.sample. quickresponse.QuickResponsePlugin • Bundle-Vendor: IBM Required Eclipse • Bundle-Localization: plugin plug-ins • Require-Bundle: org.eclipse.ui, Required Sametime 7.5 org.eclipse.core.runtime, plug-ins com.ibm.collaboration.realtime.imhub, com.ibm.collaboration.realtime.chatwindow, com.ibm.collaboration.realtime.ui, com.ibm.collaboration.realtime.messages, com.ibm.collaboration.realtime.magiccarpet • Eclipse-LazyStart: true 23
Slide 24: Quick Response Plug-in Extension Classes Plug-in Purpose QrPopupAddOn • Introduces UI element • Gives list of responses and listens for what choice was selected QrOpenPopupAddOnAction • Adds the action to the existing general actions in the toolbar as a drop-down menu QuickResponsePreferencePage • Preference page for adding, removing, and editing quick responses. 24
Slide 25: Quick Response Plug-in Extension Manifest • Quick Response plugin.xml Declares two Sametime-specific extension points com.ibm.collaboration.realtime.chatwindow.popupAddOn com.ibm.collaboration.realtime.chatwindow.chatAction Defines appearance and behavior of the contributed pop up add-on <extension point="com.ibm.collaboration.realtime.chatwindow.popupAddOn"> <popupAddOn class=“…sample.quickresponse.QrPopupAddOn" id=“…sample.quickresponse" name="Quick Response"/> </extension> 25
Slide 26: Quick Response Plug-in Extension Manifest (cont.) • The following lines of code show the plugin.xml file: … <extension point="com.ibm.collaboration.realtime.chatwindow.chatAction"> <chatAction class=“…sample.quickresponse.QrOpenPopupAddOnAction" displayName="Quick Response" id=“…realtime.sample.quickresponse.openquickresponse" image="images/quickresponse.png" path="format/end" Defines “run” behavior of the showsFor="both" contributed action tooltipText="Quick Response" type="format"/> </extension> 26
Slide 27: QrPopupAddon Composite • The following code creates the pop-up PopupAddon: add on: public interface PopupAddOn { public class QrPopupAddOn implements PopupAddOn { public Composite createControl private ChatWindowHandler wndHandler = null; (ChatWindowHandler, Composite); List listResponses; public int getInitialSize(); public QrPopupAddOn() { } super(); } void addItems() { ArrayList elems = QuickResponsePlugin.getDefault().loadResponses(); for (int i = 0; i < elems.size(); i++) listResponses.add((String) elems.get(i)); listResponses.add(QuickResponsePlugin.ADD_NEW_RESPONSE_MSG); } public Composite createControl(ChatWindowHandler handler, Composite parent) { wndHandler = handler; Composite comp = new Composite(parent, SWT.NONE); comp.setLayout(new FillLayout()); listResponses = new List(comp, SWT.SINGLE …); addItems(); listResponses.addSelectionListener(...); ... return comp; } Your extension can public int getInitialSize() { request the handler add return PREFERRED_HEIGHT; text to the transcript, } return participants, etc. } 27
Slide 28: QrOpenPopupAddOn Action • The following code adds content to the pop-up window: public class QrOpenPopupAddOnAction extends ChatWindowAction { ChatActionWindowAction private boolean isPopupShowing = false; public class ChatWindowAction extends Action { public QrOpenPopupAddOnAction() { …. super(IAction.AS_DROP_DOWN_MENU); } } public void run() { ChatWindowHandler handler = getChatWindowHandler(); if (isPopupShowing) { handler.closePopup(QuickResponsePlugin.POPUP_ADDON_ID); } else { handler.createPopupMessageArea( QuickResponsePlugin.POPUP_ADDON_ID, QrPopupAddOn.PREFERRED_HEIGHT); } isPopupShowing = !isPopupShowing; } public IMenuCreator getMenuCreator() { return new IMenuCreator() { ... }; } } 28
Slide 29: Quick Response Plug-in Manifest Outline 29
Slide 30: Recent Buddies Mini Application • What it does for the user: Displays a dynamic list of users, based on most recent chats (similar to NotesBuddy’s primary buddies) List is stored locally • What it demonstrates for the programmer: Event notification Local data storage Directory interface 30
Slide 31: The Recent Buddies UI Recent chat partners sorted by name, time of last chat, number of chats, or status. Optionally include photo, if available 31
Slide 32: Adding a Sametime Mini Application • In order to add a mini application, a developer needs to: Create an Eclipse plug-in that requires the Sametime runtime plug-ins Declare a contribution to the UI with an extension to Sametime specific extension points Create an extension class 32
Slide 33: The Recent Buddies Manifest • The Recent Buddies • Manifest-Version: 1.0 MANIFEST.MF • Bundle-ManifestVersion: 2 • Bundle-Name: Sametime Sample Recent Buddies Plug-in • Bundle-SymbolicName: com.ibm.collaboration.realtime.sample.recentbuddies; singleton:=true • Bundle-Version: 1.0.2 • Bundle-Activator: …sample.recentbuddies.RecentBuddiesPlugin • Bundle-Vendor: IBM • Bundle-Localization: plugin Required • Require-Bundle: org.eclipse.ui, Eclipse org.eclipse.core.runtime, plug-ins com.ibm.collaboration.realtime.core, com.ibm.collaboration.realtime.community, com.ibm.collaboration.realtime.imhub, com.ibm.collaboration.realtime.messages, com.ibm.collaboration.realtime.people, com.ibm.collaboration.realtime.storage • Eclipse-Lazystart: true Required Sametime 7.5 plug-ins 33
Slide 34: The Recent Buddies Plug-in Extensions Plug-in Purpose RbMiniApp • Adds the Recent Buddies view to the miniApps area when Sametime is launched. • This class also determines what information is displayed and how it is laid out as well as the right click actions that can be performed on members of this list. RbMessageHandlerAdapter • Handles and processes the messages from the notification service. Standard “person” actions + unique Recent Buddies menu choices 34
Slide 35: Recent Buddies Plug-in Extension Manifest • Recent Buddies plugin.xml Declares a Sametime specific extension point com.ibm.collaboration.realtime.imhub.miniApps com.ibm.collaboration.realtime.messages.MessageHandlerListener • The following lines of code show the plugin.xml file: … <extension point="com.ibm.collaboration.realtime.imhub.miniApps"> <miniApp category="shelf.messaging" class="com.ibm.collaboration.realtime.sample.recentbuddies.ui.RbMiniApp" displayName="Recent Buddies" id="com.ibm.collaboration.realtime.sample.recentbuddies.miniApp" maxHeight="400"/> </extension> Your “mini app” declares the class responsible for creating the contents of the tabbed area and defines its behavior 35
Slide 36: Recent Buddies Plug-in Extension Manifest (cont.) • The following lines of code show the plugin.xml file: … <extension point="com.ibm.collaboration.realtime.messages.MessageHandlerListener" > <messageHandler class="com.ibm.collaboration.realtime.sample.recentbuddies.RbMessageHa ndlerAdapter"/> </extension> </plugin> Your “message handler” can subscribe to IM events (connected, disconnected, status change) and UI events (person selected, chat window opened) 36
Slide 37: Recent Buddies Plug-in Outline 37
Slide 38: Buddy Note Plug-in • What it does for the user: Displays a shelf text area to enter short notes about the currently selected person Notes are stored locally • What it demonstrates for the programmer: How to declare a “mini application” extension How to track the selection of a person Mini app area with shelves 38
Slide 39: Adding a Mini Application • In order to add a mini application, a developer needs to: Create an Eclipse plug-in that requires the Sametime runtime plug-ins Declare a contribution to the UI with an extension to Sametime-specific extension points Create an extension class 39
Slide 40: The Buddy Note Manifest – Required Plug-ins • The Buddy Note manifest file, • Manifest-Version: 1.0 • Bundle-Name: BuddyNote MANIFEST.MF • Bundle-SymbolicName: com.ibm.collaboration.realtime.sample. Uses Open Sources Gateway buddynote;singleton:=true Initiative (OSGi) bundles • Bundle-Version: 1.0.2 • Bundle-Activator: Describes how the plug-in is com.ibm.collaboration.realtime.sample. packaged buddynote.BuddyNotePlugin • Bundle-Vendor: IBM Required Eclipse Defines the plug-in • Bundle-Localization: plugin plug-ins requirements • Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, com.ibm.collaboration.realtime.core, com.ibm.collaboration.realtime.community, com.ibm.collaboration.realtime.imhub, com.ibm.collaboration.realtime.messages, com.ibm.collaboration.realtime.people, com.ibm.collaboration.realtime.magiccarpet, com.ibm.rcp.realtime.livenames • Eclipse-LazyStart: true Required Sametime • Bundle-ManifestVersion: 2 7.5 plug-ins • Export-Package: com.ibm.collaboration.realtime.sample.buddynote 40
Slide 41: BuddyNote Classes Plug-in Purpose BuddyNoteMiniApp • This class extends the AbstractMiniApp class, which builds the tabbed application window, defines what content appears in the window, and how it will be laid out. BuddyNoteMessageHandlerAdapter • Handles and processes the messages from the notification service. 41
Slide 42: The Buddy Note Plug-in Extension Manifest • Buddy Note plugin.xml declares Sametime-specific extension points <extension point="com.ibm.collaboration.realtime.imhub.miniApps"> <miniApp category="shelf.messaging" class="com.ibm.collaboration.realtime. Defines sample.buddynote.BuddyNoteMiniApp" appearance and behavior of the displayName="BuddyNote" contributed maxHeight="300" mini-app id="com.ibm.collaboration.realtime. sample.buddynote.buddynoteminiapp"/> </extension> <extension Reacts to key point="com.ibm.collaboration.realtime.messages. client events MessageHandlerListener"> (e.g., connected, buddy selected) <messageHandler class="com.ibm.collaboration.realtime. sample.buddynote. BuddyNoteMessageHandlerAdapter"/> </extension> 42
Slide 43: BuddyNoteMiniApp using com.ibm.collaboration.realtime.imhub.miniApps extension point • The BuddyNoteMiniApp class extends • The AbstractMiniApp class public class BuddyNoteMiniApp extends AbstractMiniApp { static public BuddyNoteMiniApp INSTANCE; public abstract class AbstractMiniApp { private final String DEFAULT_NOTE = “…"; private IPerson person = null; public abstract Control MyBusinessCard bizCard; createControl(Composite parent); StyledText textControl; String currentNote = null; public boolean showsInitially() { return true; public Control createControl(Composite parent) { } Composite comp = new Composite(parent, SWT.BORDER); comp.setLayout(new FormLayout()); public abstract void init() throws Exception; // Business card is "person aware", i.e., will update } // as the person's status updates. bizCard = new MyBusinessCard(comp, SWT.NONE); FormData fd = new FormData(); ... bizCard.setLayoutData(fd); // Text input area; it displays an indication that it's empty // as defined by DEFAULT_NOTE textControl = new StyledText(comp, SWT.MULTI | SWT.V_SCROLL | SWT.WRAP); ... // Save and restore the buddy note on gain/lose focus. // (remember not to store the "default" note!) textControl.addFocusListener(new FocusAdapter() {... }); return comp; } 43
Slide 44: BuddyNoteMessageHandler using com.ibm.collaboration.messages.MessageHandlerListener extension point • The BuddyNoteMessageHandler • The DefaultMessageHandler class class extends public class BuddyNoteMessageHandler extends DefaultMessageHandler { public void handleMessage(BuddySelectedMessage message) { IPeopleService peopleSvc = (IPeopleService) ServiceHub.getService(IPeopleService.SVC_TYPE); IPerson person = peopleSvc.getPersonById(message.getPersonId()); BuddyNoteMiniApp.INSTANCE.handleBuddySelected(perso n); } public void handleMessage(ImConnectedMessage message) { BuddyNoteMiniApp.INSTANCE.handleConnected(); } • Your handler is notified by overriding public void handleDefaultMessage(Message message) { the desired handleMessage (eventMessage) method } } 44
Slide 45: Buddy Note Plug-in Outline 45
Slide 46: What We’ll Cover … • Introducing Sametime 7.5 Connect Client • Extending the Connect Client • Understanding Sametime Architecture, Eclipse, and WED • Exploring the Sample Plug-ins • Definitive Resources 46
Slide 47: Critical Resource: The Sametime 7.5 Integration Guide www.ibm.com/developerworks/lotus/downloads/toolkits.html 47
Slide 48: Other Resources • Dan Kehn et al., The Java Developer’s Guide to ECLIPSE (Addison-Wesley Professional, 2004.) • www.lotus.com/sametime • Lotus Developer Domain articles (Google maps example) www-128.ibm.com/developerworks/lotus/library/sametime- googlemaps • www.eclipse.org (start with a simple Eclipse sample project – no Sametime) Note: Special thanks to Dan Kehn, Senior Software Architect at IBM and author of A Java Developer’s Guide to ECLIPSE and the Sametime 7.5 Integration Guide for session materials and assistance with the new release 48
Slide 49: 7 Key Points to Take Home • Sametime 7.5 is the most significant release of Sametime ever – worth a look at new toolkits for developers even if you’ve never tried out the other toolkits • Architecture is a preview of upcoming product directions, so learning Eclipse and Java is getting pretty critical • Start small by following examples of non-Sametime development in Eclipse, then dive into the SDK • The platform is solid, the design choice is solid, but the provisioning model for plug-ins needs work 49
Slide 50: 7 Key Points to Take Home (cont.) • A review of XML is key to understanding plug-in manifests (packaging) • Some key concepts to understand: manifests, extension points, extension classes, Eclipse RCP vs. plug-ins • In prior versions of Sametime, extensibility via Sametime bots often created demand and improved adoption. In 7.5, even with drastically enhanced out-of- the-box functionality, plug-ins will ultimately make it a development platform for presence-based applications. 50
Slide 51: Your Turn! Questions? How to Contact Me: Rob Novak rnovak@snapps.com © Copyright 2006 SNAPPS. All Rights Reserved. 51



Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 0 (more)