Front cover IBM Workplace Managed Client: ISV Integration Guide Develop distributable applications using existing skills Integrate Swing, Eclipse RCP, Lotus Domino, and Web applications Fully exploit client and server collaborative components Philip Monson Lori Ott Nishant H. Shah Shane O’Sullivan ibm.com/redbooks Redpaper International Technical Support Organization IBM Workplace Managed Client: ISV Integration Guide March 2006 Note: Before using this information and the product it supports, read the information in “Notices” on page vii. First Edition (March 2006) This edition applies to IBM Workplace Managed Client Releases 2.5.1 and 2.6. © Copyright International Business Machines Corporation 2006. All rights reserved. Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Contents Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix The team that wrote this Redpaper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix Become a published author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .x Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .x Chapter 1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1 Important terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.2 Suggested reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.3 Development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2 IBM Workplace Client Technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 IBM Workplace Client Technology platform stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 Integration options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4.1 Coexistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4.2 Accommodation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.3 Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.4 Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.5 Types of ISVs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7 URLs referenced in this chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Chapter 2. ISVs with Eclipse applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.1.1 What is Eclipse? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.1.2 What is Eclipse RCP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.3 Eclipse RCP, Workplace Client Technology, and Workplace Managed Client . . . 19 2.1.4 Eclipse RCP integration levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 Coexist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3 Accommodate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.1 Lightweight integration of Eclipse RCP with Workplace Managed Client . . . . . . . 22 2.3.2 Configuring and provisioning a Workplace Managed Client application . . . . . . . . 24 2.4 Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.1 Enabling server-side definition of an applications view layout . . . . . . . . . . . . . . . 30 2.4.2 Manually configuring an application page layout . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.3 Configuring an application page layout using Workplace Managed Client Developer Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4.4 Using an action bar to replace the view toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.5 Contributing to the Workplace Managed Client menus. . . . . . . . . . . . . . . . . . . . . 39 2.4.6 Adding a Workplace Managed Client search bar . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4.7 Adding a Workplace Managed Client shelf view . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.5 Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.7 URLs referenced in this chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Chapter 3. ISVs with AWT or Swing applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 © Copyright IBM Corp. 2006. All rights reserved. iii 3.1.1 What is AWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 What is Swing? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 What is SWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.4 Swing integration levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Coexist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Accommodate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Lightweight integration of a Swing or AWT application with Workplace Managed Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Creating a new IBM Workplace project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Importing the Swing JAR file into the plug-in project. . . . . . . . . . . . . . . . . . . . . . . 3.3.4 Modifying the shutdown sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.5 Displaying the Swing/AWT application within Workplace Managed Client . . . . . . 3.3.6 Deploying the application to Workplace Collaboration Services server . . . . . . . . 3.4 Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Contributing to the Workplace Managed Client menus. . . . . . . . . . . . . . . . . . . . . 3.4.2 Status bar integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 Defining one portlet per view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.4 Converting Swing or AWT controls to SWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7 URLs referenced in this chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 48 48 48 49 50 51 51 54 54 55 59 60 60 68 71 74 75 76 76 Chapter 4. ISVs with Web and portal applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.1.1 What are Web and portal applications? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.1.2 What is WSRP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.1.3 Web and portal integration levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.2 Coexist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.3 Accommodate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.3.1 Creating a new IBM Workplace project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.3.2 Launching the embedded browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.3.3 Deploying the application to Workplace Collaboration Services server . . . . . . . . 85 4.3.4 Web Services for Remote Portlets (WSRP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.4 Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.4.1 HTTP authenticated application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.4.2 Adding a Workplace Managed Client search bar . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.4.3 Enhancing WSRP and converting servlet and JSP applications. . . . . . . . . . . . . . 98 4.5 Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.7 URLs referenced in this chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Chapter 5. ISVs with Lotus Notes and Domino applications . . . . . . . . . . . . . . . . . . . 103 5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.1.1 What is Lotus Domino? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.1.2 IBM Lotus Domino Web Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.1.3 Domino integration options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.1.4 Reparenting Notes applications using the Notes plug-in . . . . . . . . . . . . . . . . . . 106 5.2 Coexist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 5.3 Accommodate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.3.1 Running Domino applications in Workplace Managed Client using the Lotus Notes plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.3.2 Launching a Notes/Domino application in its native window using Workplace Managed Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 iv IBM Workplace Managed Client: ISV Integration Guide 5.3.3 Displaying a Notes application in an Eclipse View . . . . . . . . . . . . . . . . . . . . . . . 5.4 Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Exposing a Domino application using Web services. . . . . . . . . . . . . . . . . . . . . . 5.4.2 Communicating with Web service from Workplace Managed Client. . . . . . . . . . 5.4.3 Creating a Workplace application project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.4 Creating the user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.5 Deploying the application to a Workplace Collaboration Services server . . . . . . 5.5 Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7 URLs referenced in this chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 116 117 122 128 131 136 137 137 137 Chapter 6. Exploiting IBM Workplace Managed Client . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Working with document libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Creating a document library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Creating a new document in a document library. . . . . . . . . . . . . . . . . . . . . . . . . 6.2.3 Creating a new folder in a document library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.4 Listing the contents of a library or folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Messaging and notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Online and offline awareness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 The Offline API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.2 Building offline-aware components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 Implementing database support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 Creating a local database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.2 Accessing the database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.3 Shutting down the database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 Synchronizing client application data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7 Securing a client application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7.1 Logging in to the local credential store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7.2 Creating a password credential for remote server authentication. . . . . . . . . . . . 6.7.3 Logging in to an HTTP-authenticated application . . . . . . . . . . . . . . . . . . . . . . . . 6.7.4 Single sign-on interoperating with the operating system. . . . . . . . . . . . . . . . . . . 6.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 140 141 142 144 145 146 148 150 152 153 155 156 158 159 160 166 166 167 169 172 175 Appendix A. IBM Workplace Managed Client Version 2.6 . . . . . . . . . . . . . . . . . . . . . . Provisioning the application from CD or HTTP server . . . . . . . . . . . . . . . . . . . . . . . . . . . . Platform and custom personalities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Offline and network awareness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Live names component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . File type registry component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Customizing the application look and feel along with branding . . . . . . . . . . . . . . . . . . . . . Changing the embedded browser’s default Web address . . . . . . . . . . . . . . . . . . . . . . . . . Workplace Managed Client Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Managed provisioning component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using XML Access scripts to create the page and portlet . . . . . . . . . . . . . . . . . . . . . . . . . Implementing the calendar service API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating an alias password credential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 178 178 180 180 181 182 182 182 183 183 183 184 Appendix B. IBM Workplace 2.5.1 menu IDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 IBM Workplace menu IDs overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 IBM Workplace menu IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Appendix C. Additional material and feature quick reference . . . . . . . . . . . . . . . . . . 191 Locating the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Contents v Using the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Workplace Managed Client feature quick reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Workplace Client Technology, Micro Edition - Enterprise Offering quick reference. . . . . . 194 Related publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Online resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How to get IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Help from IBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi IBM Workplace Managed Client: ISV Integration Guide 197 197 197 199 199 Notices This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing, IBM Corporation, North Castle Drive Armonk, NY 10504-1785 U.S.A. The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. COPYRIGHT LICENSE: This information contains sample application programs in source language, which illustrates programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. You may copy, modify, and distribute these sample programs in any form without payment to IBM for the purposes of developing, using, marketing, or distributing application programs conforming to IBM's application programming interfaces. © Copyright IBM Corp. 2006. All rights reserved. vii Trademarks The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: Cloudscape™ DB2® developerWorks® Domino Designer® Domino® Everyplace® IBM® Lotus Notes® Lotus® Notes® PartnerWorld® Rational® Redbooks (logo) Redbooks™ WebSphere® Workplace Client Technology™ Workplace Managed Client™ Workplace Messaging® Workplace™ ™ The following terms are trademarks of other companies: Enterprise JavaBeans, EJB, Java, JavaBeans, JavaServer, JavaServer Pages, JDBC, JSP, JVM, J2EE, and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Microsoft, Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. Linux is a trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others. viii IBM Workplace Managed Client: ISV Integration Guide Preface This IBM® Redpaper provides a high-level overview of the integration paths available for independent software vendors (ISVs) who are considering moving their existing applications to the IBM Workplace™ Managed Client platform. We begin with a high-level overview of the four different levels of integration, coexist, accommodate, leverage, and exploit, as well as the considerations for each level and the benefits involved. The following chapters outline specific integration paths for four ISV types, IBM Eclipse Rich Client Platform (RCP), Swing, Web and portal, and IBM Lotus® Notes® applications, including step-by-step actions and code samples. There is an in-depth chapter about fully exploiting the IBM Workplace Managed Client™ platform and descriptions of the features in the latest release of IBM Workplace Managed Client. The audience for this Redpaper is primarily application developers who have some experience with Java™. Knowledge of Eclipse is helpful but not necessary. The team that wrote this Redpaper This Redpaper was produced by a team of specialists from around the world working at the International Technical Support Organization, Cambridge Center. Philip Monson is a Project Leader at the ITSO Lotus Center in Cambridge, MA. Phil has been with IBM Lotus for 15 years, joining the company when the early versions of Notes were rolled out for internal use. He has served in management, technical, and consulting roles in the IT, Sales, and Development organizations. Lori Ott is an ISV Enablement Specialist with the Lotus IBM Workplace ISV Technical Enablement Team. Prior to this, she was a Curriculum Developer for the Lotus Education, Application Development team. She has been involved in computer education for more than 12 years. She has also taught computer science at Phillips Exeter Academy. Nishant H. Shah is a Software Engineer and currently works with the Workplace Managed Client platform development team in India Software Labs. He has a bachelor’s degree in Computer Science from Pune University, India and has about five years of industry experience in diversified fields of application software development. He has worked extensively in the areas of Eclipse plug-in development, Java 2 Platform, Enterprise Edition (J2EE™), Web services, and databases. Additionally, he has worked with IBM ISVs, guiding the effort to enable ISVs to develop their own custom applications on the Workplace Managed Client platform. Shane O’Sullivan is a Software Developer in Dublin, Ireland. He has two years of experience in IBM WebSphere® and J2EE development and currently works as an open source researcher in the Dublin Software Lab, Ireland. He received a degree in Computer Systems and a master of science in Artificial Intelligence and Mobile Robotics from the University of Limerick, Ireland. His areas of expertise include J2EE technologies, particularly Enterprise JavaBeans™ (EJB™) and database development on IBM WebSphere Portal, Eclipse development, and search technologies such as Lucene and Juru. He has written a number of academic papers in the area of artificial intelligence and mobile robotics, and this is his first Redpaper. © Copyright IBM Corp. 2006. All rights reserved. ix Thanks to the following people for their contributions to this project: Craig Wolpert, Senior Software Engineer, IBM Software Group, Lotus Jo Grant, Senior, Software Engineer, IBM Software Group, Lotus Jean-Noel Koval, IT Project Manager, IBM Software Group, Lotus Jane L. Wilson, Knowledge System Architect, IBM Software Group, Lotus Peter Janzen, Senior Product Manager, IBM Software Group, Lotus Become a published author Join us for a two- to six-week residency program! Help write an IBM Redbook dealing with specific products or solutions, while getting hands-on experience with leading-edge technologies. You'll team with IBM technical professionals, Business Partners, and/or clients. Your efforts will help increase product acceptance and customer satisfaction. As a bonus, you'll develop a network of contacts in IBM development labs, and increase your productivity and marketability. Find out more about the residency program, browse the residency index, and apply online at: ibm.com/redbooks/residencies.html Comments welcome Your comments are important to us! We want our papers to be as helpful as possible. Send us your comments about this Redpaper or other Redbooks™ in one of the following ways: Use the online Contact us review redbook form found at: ibm.com/redbooks Send your comments in an email to: redbook@us.ibm.com Mail your comments to: IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 x IBM Workplace Managed Client: ISV Integration Guide 1 Chapter 1. Introduction IBM Workplace Managed Client extends IBM Workplace servers by delivering rich client capabilities in a fully integrated collaborative environment for the end user's desktop. It provides flexibility and portability of client-side applications, combined with server-side control and cost savings traditionally associated with Web-based computing. Rich client-side applications enabled by IBM Workplace Managed Client deliver the following benefits: Rich user experiences with all the functionality of the native desktop client, coupled with improved manageability and easier deployment Fast user response for time-sensitive and complex processes with real-time data validation and manipulation A strong security model with a local, encrypted data store that synchronizes to a secure, server environment, providing a “walled garden” to protect against viruses and other security risks Flexible integration with desktop productivity applications Support for a variety of operating systems Reusable and consistent user-interface design, where both application content and transactions can be mixed seamlessly Single client architecture to execute in both online and offline modes (support for disconnected and connected operations) In this IBM Redpaper, we show how independent software vendors (ISVs) can increase of the value of their solutions by integrating their applications with IBM Workplace Managed Client. With IBM Workplace Managed Client, developers can move from stand-alone applications to collaborative applications that bring together a number of different systems related to a user’s role. This move brings new opportunities for developers by enabling them to expose their products to a new audience interested in the capabilities of the Workplace Managed Client and leverage their current skills by integrating existing applications and recombining them in new and interesting ways. © Copyright IBM Corp. 2006. All rights reserved. 1 Specifically, this paper addresses: Different levels of integration that are available with this technology High-level benefits of the various integration methods Evolution paths for moving through the integration spectrum for ISVs with the following application types: – Eclipse Rich Client Platform (RCP) – Swing and Abstract Windowing Toolkit (AWT) – Web and portal – IBM Lotus Notes and Domino® 2 IBM Workplace Managed Client: ISV Integration Guide 1.1 Introduction IBM Workplace Managed Client is a fully integrated, collaborative, client-side environment that is centrally managed and deployed. Workplace Managed Client was developed using IBM Workplace Client Technology™. “Out of the box,” Workplace Managed Client provides benefits, such as: A comprehensive server-managed desktop Online and offline access to messaging, documents, productivity tools, and data access Online access to instant messaging and Activity Explorer The ability to leverage and extend existing technologies, for example, Lotus Notes and Domino or traditional applications A rich platform for application development Figure 1-1 shows the rich user interface for Workplace Managed Client with out-of-the-box capabilities. Figure 1-1 Workplace Managed Client out-of-the-box capabilities With Workplace Managed Client, instead of having to create the infrastructure necessary to deploy secure, enterprise-ready applications, developers can focus on building the application itself. Visit the Workplace Managed Client product page for more details at: http://www.ibm.com/software/workplace/products/product5.nsf/wdocs/workplaceclienttech Chapter 1. Introduction 3 1.1.1 Important terminology This paper uses the following terms and applications: API Application programming interface. AWT Abstract Windowing Toolkit, a Java-based graphic user interface toolkit used to build interfaces, such as pop-up windows and buttons. AWT uses native system controls, which can lead to user interface (UI) differences, for example, if an application is created on Linux® and run on Microsoft® Windows®, a button might be rendered in a different spot or look different. Cloudscape™ IBM Cloudscape is a small-footprint, standards-based Java relational database (RDB) from IBM that can be tightly embedded into any Java-based solution. For more information about Cloudscape, see: http://www.ibm.com/software/data/cloudscape/ Derby There is no difference in core functionality between Apache Derby and IBM Cloudscape. Beginning with Version 10, IBM Cloudscape became a commercial implementation of the database being developed as part of the Apache Derby Project. Workplace Managed Client uses Derby for its local data store. For more information, see: http://db.apache.org/derby/ Eclipse Eclipse is an open platform for rich client development upon which IBM Workplace Client Technology is based. For more information about Eclipse, see: http://www.eclipse.org EJB The Enterprise JavaBeans (EJB) technology is a server-side component architecture that provides an objective, vendor-neutral framework for developing enterprise-class distributed applications. ISV Independent software vendor. JFace The JFace toolkit, a platform-independent API that interoperates with the Standard Widget Toolkit (SWT), adds the model view controller (MVC) framework to SWT controls. This library provides a set of components and helper utilities that simplify many of the common tasks in developing SWT user interfaces. OLE Object Linking and Embedding. Plug-in An Eclipse platform feature component. For more information about Eclipse plug-ins, see: http://www.eclipse.org/community/plugins.php RCP Rich client platform. RDB Relational database. SyncML An industry initiative to develop and promote a single, common data synchronization protocol that can be used industry-wide. For more information about SyncML, see: http://www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html 4 IBM Workplace Managed Client: ISV Integration Guide Swing Swing is also a Java-based, graphic user interface (GUI) toolkit. It is used it to build platform independent GUI widgets, for example, forms and dialog boxes. Unlike the Abstract Windowing Toolkit (AWT), components built using Swing are considered lightweight, meaning that instead of relying on the host system's user interface APIs, Swing mimics them, which can lead to some UI discrepancies. SWT The Standard Widget Toolkit (SWT) provides a platform-independent Java API that is tightly integrated with the operating system’s native windowing environment. TCO Total cost of ownership. UI User interface. Workplace Managed Client A fully integrated, collaborative, client-side environment that is centrally managed and deployed. IBM Workplace Managed Client was developed using IBM Workplace Client Technology. Visit the Workplace Managed Client product page at: http://www.ibm.com/software/workplace/products/product5.nsf/wdocs/workp laceclienttech Workplace Collaboration Services IBM Workplace Collaboration Services provides a wide range of powerful, completely integrated collaboration capabilities, such as e-mail, calendar services and scheduling, awareness, instant messaging, learning, team spaces, Web conferencing, and document and Web content management. Workplace Client Technology IBM Workplace Client Technology is a client-side framework used for the creation of server-managed business applications. Workplace Client Technology, Micro Edition - Enterprise Offering IBM Workplace Client Technology, Micro Edition - Enterprise Offering provides a runtime environment and integrated middleware components for extending many enterprise applications to server-managed laptop computers and desktop systems. For more information about Workplace Client Technology, Micro Edition - Enterprise Offering, see: http://www.ibm.com/software/wireless/wctme_eo/ WSRP Oasis Web Services for Remote Portlets (WSRP) is a Web services standard that enables the plug-and-play of portals, other intermediary Web applications that aggregate content, and applications from disparate sources. For more information about WSRP, see: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp 1.1.2 Suggested reading IBM Workplace Managed Client consists of and builds on several IBM products. Developers do not need to be experts in Eclipse, Java, or the Workplace API. However, familiarity with these topics and developing greater skills in these topics will help to more fully use the depth of the product. Table 1-1 on page 6 suggests reading and tutorials that you can use to better acquaint yourself with different aspects of Workplace Managed Client. Chapter 1. Introduction 5 Table 1-1 Recommended reading Title URL IBM Workplace Managed Client Developer Toolkit http://alphaworks.ibm.com/tech/wmctoolkit IBM Workplace Software Development Kit (formerly IBM Workplace Collaboration Services API Toolkit) http://www.ibm.com/software/workplace/prod ucts/product5.nsf/wdocs/2c8a33e47eef8d0585 256ee60054ddf2 Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplac e/library/wmc-toolkit-basic/?ca=dnp-442 IBM Workplace http://www.ibm.com/developerworks/lotus/li brary/ls-ibmworkplace/index.html Eclipse Rich Client Tutorial, Part 1 http://www.eclipse.org/articles/Article-RC P-1/tutorial1.html IBM Workplace Client Technology is built on the Eclipse platform, which has its own user interface guidelines that should be followed in addition to these guidelines. The Eclipse User Interface Guidelines are available at: http://www.eclipse.org/articles/Article-UI-Guidelines/Contents.html IBM Workplace Client Technology user interface design and interaction guidelines are intended for designers and developers who use IBM Workplace Client Technology to build applications for IBM Workplace Managed Client. The guidelines provide information and examples of the common user interface components used to build the user interface of the Managed Client products provided with IBM Workplace Software Development Kit (formerly IBM Workplace Collaboration Services API Toolkit). To find more information about the IBM Workplace Client Technology user interface design and interaction guidelines, go to: http://www.ibm.com/developerworks/workplace/documentation/collaborationservices/ 1.1.3 Development environment The examples and applications referred to in this paper were developed in the Redbooks lab environment using: Eclipse 3.0.2 and 3.1 IBM Workplace Managed Client Developer Toolkit 2.5.1 Note: Chapter 5, “ISVs with Lotus Notes and Domino applications” on page 103 uses the Workplace Managed Client Developer’s Toolkit 2.6. IBM Lotus Domino Designer® 7 1.2 IBM Workplace Client Technology IBM Workplace Client Technology is a framework for developing, deploying, and maintaining server-managed client software. With Workplace Client Technology, applications can be developed that combine the benefits of a rich user experience with the ease of deployment and manageability of browser-based 6 IBM Workplace Managed Client: ISV Integration Guide applications. Workplace Client Technology follows a components-based assembly model to build rich, reusable client applications that IT administrators can centrally and securely deliver and manage. Some examples of Workplace Client Technology include: A secure, Java relational database (RDB) data store An Eclipse-based Java rich client framework The ability to read layouts and download applications and components from a portal server IBM is actively engaging ISVs to help shape additional tools and APIs for this platform to be published with future releases of this technology. This paper is designed to assist all ISVs that are interested in learning how they will be able to integrate their products with IBM Workplace Managed Client, extend it, or build applications of their own that use this new platform. Note: IBM Workplace Client Technology, Micro Edition - Enterprise Offering V5.8 is a significant addition to the IBM Workplace family of products. Workplace Client Technology, Micro Edition - Enterprise Offering provides a runtime environment and integrated middleware components for extending many enterprise applications to server-managed laptop computers and desktop systems. IBM Workplace Managed Client supports running the Enterprise Offering runtime environment on the IBM Workplace Managed Client platform, which means that ISVs can run Enterprise Offering applications on the IBM Workplace Managed Client platform. See Appendix C, “Additional material and feature quick reference” on page 191 for a Workplace Client Technology, Micro Edition - Enterprise Offering feature list. For additional information about Workplace Client Technology, Micro Edition - Enterprise Offering, refer to: http://www.ibm.com/software/wireless/wctme_eo/ 1.3 IBM Workplace Client Technology platform stack IBM Workplace Client Technology is fundamentally built as extensions to the Eclipse tools platform. On top of this core Eclipse platform, IBM Workplace Client Technology then adds extra infrastructure services, such as a managed store with security features, accounts, and a unified approach to people and integration with Workplace Collaboration Services (based on IBM WebSphere Portal). IBM Workplace Client Technology also provides a server-based management system for client updates and administration that will leverage the work done for pervasive device management. Along with all of this, IBM is building generic parts for Web Services for Remote Portlets (WSRP), document editing, and navigation. Client-side dynamic aggregation is tied closely to the portal aggregation model. Portal pages become client pages and portlets identify which view to display. Portlets will also be able to pass configuration information from the server to the client. With the generic WSRP part, back-end portlets can even be directly referenced. Figure 1-2 on page 8 is a graphic representation of the Workplace Client Technology platform model. Chapter 1. Introduction 7 Note: This section introduces Web Services for Remote Portlets (WSRP). The WSRP Technology Preview 2.5.1 is part of the IBM Workplace Managed Client 2.5.1 Technology Preview package. IBM Business Partners will be able to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package through the IBM Software Access Catalog on PartnerWorld® at: http://www.developer.ibm.com/isv/welcome/guide/value.htm Clients who want to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package should contact their IBM Sales representative. We include the complete instructions and details in the WSRP Technology Preview described in 4.3.4, “Web Services for Remote Portlets (WSRP)” on page 85. Figure 1-2 IBM Workplace Client Technology platform stack The core platform is based on Eclipse technology, which provides the Java runtime environment for general desktop applications, an application user interface, and a flexible architecture that is easily extended and supports multiple operating systems. Add-on generic contributions are being developed through a cooperative effort between IBM and Eclipse. IBM extension services consists of value-added capabilities, such as synchronization, credential store for security, single-sign-on for user convenience and simplified access management, and more. WebSphere Portal technology is used as the aggregation framework. 8 IBM Workplace Managed Client: ISV Integration Guide The IBM user interface layer provides reusable components, such as a rich text editor and live names, that tie into extension services and can be used in applications built either by IBM or other providers. IBM Workplace shared application components comprise the Workplace collaboration platform and can be assembled to create products such as IBM Workplace Messaging® and IBM Workplace Documents and other applications that third parties can build. Throughout this paper, we use the terms Workplace Managed Client and Workplace Client Technology; these terms are not interchangeable: Workplace Client Technology is the framework upon which products and applications are built and managed. Workplace Managed Client is a product that the end user uses to access the built-in and custom ISV applications. 1.4 Integration options Many corporations have existing applications that have suited their business needs, or at least provided basic functionality for their business processes. However, as technology increases and the business needs change or other companies and processes are acquired, some of the existing applications might become too cumbersome to manage. Workplace Managed Client provides a medium that allows multiple disparate applications to coexist. The level of this coexistence is determined by the application developer and can range from simple coexistence to a full-fledged conversion to the Workplace Managed Client programming model. Trade-offs must be made between how quickly an application can be re-tooled and how well it can be integrated with Workplace Managed Client. A developer or organization can follow a path of integration in Workplace Client Technology that balances the amount of time and effort needed to achieve the desired level of integration. Immediate benefits can be gained quickly though minimal effort. Additional benefits can be gained through further efforts. The four different integration levels are: Coexist Accommodate Leverage Exploit Table 1-2 illustrates some examples of the spectrum of integration option benefits and the application skill level needed to integrate with Workplace Managed Client. Table 1-2 Integration benefits and programming levels Coexist Accommodate Leverage Exploit Programming skill level: None. Programming skill level: Java: Proficient. Eclipse: Minimal. Programming skill level: Java: Proficient. Eclipse: Proficient. Programming skill level: Java: Proficient. Eclipse: Proficient. Workplace Client Technology/Portal: API knowledge required. Chapter 1. Introduction 9 Coexist Accommodate Leverage Exploit Application runs outside Workplace Managed Client. Application can be launched from within Workplace Managed Client. Leverages client-side functionalities, such as the search bar, action bar, credential store, and menus. Leverages client- and server-side functionalities, such as the online/offline awareness, secure data access, document library, synchronization, and notification. Data copied into a Workplace Managed Client document can be e-mailed or stored in the secure document storage facility. Updates to the application can be automatically provisioned from the host to the client. Traditional stand-alone application executables fall into this category. It is also worth mentioning that all of these options are a spectrum of non-exclusive states, so an ISV can enter at any point in this spectrum and then choose to address other parts of the spectrum over time. It will not be uncommon for ISVs to occupy several points on the spectrum simultaneously. This flexibility should be assumed so that ISVs can focus on integration levels that are best optimized to the business scenarios in which they want to engage without artificially having to start integrating only at one point in the spectrum. Note: All examples in this paper assume that the com.ibm.workplace.personality personality is used as the default personality to run Workplace Managed Client. The IBM Workplace personality is the default personality applied to a provisioned application if no other personality is specified. It builds the perspective used by the application based on the Rich Client Platform Markup Language (RCPML) it retrieves from the server. To use the IBM Workplace personality: 1. When initially building the application plug-ins, concentrate on the functionality of the application, not its look and feel. The personality defines the look and feel of the application. 2. When testing the application in the IDE, specify -personality com.ibm.workplace.personality as a program argument to make the application run within an IBM Workplace Managed Client runtime environment. For more information about personalities in the Workplace Managed Client, see Appendix A, “IBM Workplace Managed Client Version 2.6” on page 177 and the documentation that comes with the IBM Workplace Client Technology API Toolkit. 1.4.1 Coexistence The simplest level of integration is coexistence. This requires no changes at the code level. The application remains installed and runs the same as it always has. However, after Workplace Client Technology has been added to the client's environment, how the application is used can be changed. Benefits of coexistence Benefits of coexistence include: Minimal-to-no development effort Certified to run side-by-side 10 IBM Workplace Managed Client: ISV Integration Guide At this level, ISVs that have existing applications might find significant value simply in the side-by-side execution of their applications with IBM Workplace Managed Client. This is equivalent to the current desktop computing environment where basic interaction is defined by the operating system functionality, such as the ability to drag and drop documents or application shortcuts, cut, copy, and paste data, and create file viewer associations. These basic mechanisms for integration might be sufficient for some ISVs to tap into significant value simply by certifying applications and encouraging side-by-side execution without other specific integration features. The other three types of integration offer progressively tighter integration options. 1.4.2 Accommodation At the accommodate integration level, ISVs reconfigure their applications to use mechanisms such as provisioning, modifying the shut-down sequence and reparenting, as well as interoperability mechanisms such as WSRP or OLE. These mechanisms can help achieve simple, “on-the-glass” integration, for example, displaying within a frame of IBM Workplace Client Technology. Benefits of accommodation Benefits of accommodation include: Simple, but effective blended user experience Ability to access a secure replicated file store through round-trip editing Component provisioning by policy At the accommodate level of integration, components can begin to share visual context such as language or font settings with other application components. In addition, two key aspects of Workplace Managed Client can be leveraged, provisioning and a secure, synchronized data store. Overall, an accommodation approach can be an excellent first step to a customer-driven exploration of deeper integration directions. 1.4.3 Leverage The next level of integration is to leverage more deeply the capabilities of the platform services that are available in IBM Workplace Client Technology. For example, an ISV could leverage the provisioning frameworks, install facilities, and access the extensible synchronization management facilities of IBM Workplace Client Technology by packaging an external program with a wrapper plug-in. In this case, only the wrapper parts have to be written to the Workplace programming model in order to take advantage of significant new capabilities. It should be noted that Java wrappers can be readily applied to blend in a user interface (UI) component that originally was not written in Java, enabling integration options that can appear nearly seamless. Benefits of leverage A key benefit from even this level of integration is that the Workplace role-based policies apply immediately, even to the simplest wrapper plug-in. Benefits include: Platform-independent UI integration approach Component provisioning by policy Client management frameworks (search, synchronization, and storage) Chapter 1. Introduction 11 1.4.4 Exploit Complete seamless integration occurs as an ISV chooses to write plug-ins that are more than simple wrappers, where most or even all of the code is structured to the Workplace programming model in order to exploit the client technologies fully. By employing the APIs and available models, an ISV can write a matched set of portlets, plug-ins, EJB services, and data source definitions that take full advantage of all attributes of IBM Workplace Client Technology infrastructure. Benefits of exploit Application components that are written in this manner gain several benefits, such as the ability to dynamically share capabilities (such as online awareness), participate in spanning services (such as synchronization), and improved security (such as the credential store). In most cases, ISVs that have existing applications or components are expected to gradually extend into this space as they match needs and requirements to the appropriate programming model constructs. Benefits include: Full total cost of ownership (TCO) improvement realizations Exploitation of rich repository spanning services, UI components, and business components We provide a thorough examination of the exploit model in Chapter 6, “Exploiting IBM Workplace Managed Client” on page 139. 1.5 Types of ISVs IBM has a large and diverse ISV community, and each particular ISV will be looking at integration options with IBM Workplace Client Technology from the unique perspective of its own specific business context, development skills, and existing application assets. For example, an ISV that builds Swing-based Java applications will approach IBM Workplace Client Technology very differently from an ISV that builds Lotus Notes NSF-based applications. Although there are many more ISV types than are represented in this paper, the examples used are designed to provide a road map and not be the only guide. This paper addresses the integration options for the following types of ISVs: Eclipse applications Swing-based Java applications Portal and Web applications Notes and Domino applications In addition, Table 1-3 on page 13 shows an overview of these integration options and several other types of ISV integration: Stand-alone desktop applications Classic client/server applications Mobile applications 12 IBM Workplace Managed Client: ISV Integration Guide Table 1-3 Examples of different ISV type integration options Application type Examples of applications that can coexist Accomodate Leverage Exploit Eclipse RCP IBM Rational Application Developer Package plug-ins to provision from IBM Workplace/Portal server. Store plug-in related files to secure, synchronized client storage. Develop native Workplace Managed Client applications using plug-ins that take advantage of Workplace Client Technology infrastructure, for example, local and remote data access (call Web services). Any existing stand-alone Eclipse based application Swing Notepad Launch Eclipse applications from within Workplace Managed Client. Launch Swing application from within Workplace Managed Client. Wrap Swing application as a Workplace Managed Client application. Portal and Web Any existing HTML file Create a simple launch application using the embedded browser or Web Services for Remote Portlets (WSRP). Use Workplace Managed Client UI features, such as file menus, search, and status bars. Optionally, replace some Swing or AWT UI controls with SWT. Enable single sign-on using the Workplace Client Technology credential store. Develop native Workplace Managed Client applications using plug-ins that take advantage of Workplace Client Technology infrastructure, for example, document libraries, mail, single sign-on, and secure data stores that Workplace Managed Client provides. Write Eclipse plug-ins that make remote calls to the same back-end services to which existing portlets make calls. Enable HTTP authentication. Provisioning. Notes/Domino Any existing Notes/Domino application Embed NSFs using a Notes 7.0 plug-in. Provisioning. Stand-alone Microsoft Office OS registered file extension handler to open files in WebSphere Portal Document Manager through a temp file on disk. Wrap Domino Web applications in portlets, then display using WSRP plug-in. Export Notes agents as Eclipse actions. Use Workplace Managed Client extensions to wrap OLE control in custom Ecipse view to allow for direct access to repository. Eclipse plug-in extended to publish more attributes of the wrapped program. Notification. Launch as an OLE embedded object from within Workplace Managed Client. Provisioning. Chapter 1. Introduction 13 Application type Examples of applications that can coexist Accomodate Leverage Exploit Client/server SAP Seibel Launch as an OLE embedded object from within Workplace Managed Client. Wrap client binaries in Eclipse plug-ins to support server-side deployment. Developing native Workplace Managed Client applications using plug-ins that take advantage of Workplace Client Technology infrastructure, for example, synchronization and notification. Publish extension points so that other applications can contribute or leverage application functionality. Mobile For more information, refer to: http://www-306.ibm.com/software/wireless/wctme_eo/ 1.6 Summary By the end of this paper, ISVs should have a clearer understanding of the different integration paths that are available to them, as well as strategies for adapting these options. The remaining chapters provide more technical details about ISVs with the following applications and information about exploiting IBM Workplace Managed Client: Eclipse Rich Client Platform (RCP) Swing and Abstract Windowing Toolkit (AWT) Web and portal IBM Lotus Notes and Domino 1.7 URLs referenced in this chapter Table 1-4 lists the URLs referred to in this chapter. Table 1-4 List of URLs referenced in this chapter 14 What Where Information about Cloudscape http://www.ibm.com/software/data/cloudscape/ Information about Apache Derby http://db.apache.org/derby/ Eclipse Foundation http://www.eclipse.org Information about Eclipse plug-ins http://www.eclipse.org/community/plugins.php Information about SyncML http://www.openmobilealliance.org/tech/affiliates /syncml/syncmlindex.html Information about WSRP http://www.oasis-open.org/committees/tc_home.php? wg_abbrev=wsrp IBM Workplace Managed Client: ISV Integration Guide What Where IBM Workplace Managed Client Developer Toolkit information http://alphaworks.ibm.com/tech/wmctoolkit IBM Workplace Managed Client Developer Toolkit (formerly IBM Workplace Collaboration Services API Toolkit) http://www.lotus.com/ldd/lwpapi Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplace/libra ry/wmc-toolkit-basic/?ca=dnp-442 What you need to know about IBM Workplace: An introduction for developers http://www.ibm.com/developerworks/lotus/library/l s-ibmworkplace/index.html Eclipse Rich Client Tutorial, Part 1 http://www.eclipse.org/articles/Article-RCP-1/tut orial1.html The Eclipse User Interface Guidelines http://www.eclipse.org/articles/Article-UI-Guidel ines/Contents.html Workplace Collaboration Services documentation http://www.ibm.com/developerworks/workplace/docum entation/collaborationservices/ Additional information about Workplace Client Technology, Micro Edition Enterprise Offering http://www.ibm.com/software/wireless/wctme_eo/ Chapter 1. Introduction 15 16 IBM Workplace Managed Client: ISV Integration Guide 2 Chapter 2. ISVs with Eclipse applications This chapter introduces the steps an ISV should take to integrate an Eclipse Rich Client Platform (RCP) application into the IBM Workplace Client Technology framework. Even without the time or the resources to do a full Eclipse RCP conversion, ISVs can quickly gain benefits from the central management and security that Workplace Client Technology offers. ISVs that build and sell Eclipse-based applications can approach the integration spectrum using methods discussed in this chapter. These include: Packaging plug-ins to activate an IBM Workplace Managed Client configuration, versus a generic Eclipse configuration Deploying and provisioning Workplace Managed Client applications Integrating with the Workplace Managed Client framework Fully exploiting Workplace Managed Client features such as security, storage, and synchronization © Copyright IBM Corp. 2006. All rights reserved. 17 2.1 Overview Benefits for migrating an Eclipse RCP application to Workplace Client Technology include: Opportunity for lower total cost of ownership (TCO) because the application is server-managed and provisioned Integration with other applications provided by the application switcher Leveraging the features and functionality provided by Workplace Client Technology such as its credential store, offline manager, sync manager, and locally encrypted databases To simulate the conditions of many ISV experiences, we base this chapter on the following assumptions: The application is included in a series of plug-ins and feature projects. The application source code is available. This chapter uses the example of a van delivery management application, referred to as Delivery Manager. Delivery Manager keeps track of warehouses, stores, vans, the orders from the stores to the warehouses, and stock as it is delivered both to the warehouse and by van to the stores. In this chapter, you will see how this application changes as it is moved through the various stages of application integration. 2.1.1 What is Eclipse? “Eclipse is an open source community whose projects are focused on providing an extensible development platform and application frameworks for building software. Eclipse provides extensible tools and frameworks that span the software development life cycle, including support for modeling, language development environments for Java, C/C++ and others, testing and performance, business intelligence, rich client applications and embedded development. A large, vibrant ecosystem of major technology vendors, innovative start-ups, universities and research institutions and individuals extend, complement and support the Eclipse Platform.”1 Figure 2-1 shows a high-level outline of the Eclipse architecture. Figure 2-1 Eclipse architecture 1 18 From http://www.eclipse.org IBM Workplace Managed Client: ISV Integration Guide Note: For more information about Eclipse, see: http://www.eclipse.org http://www.eclipsecon.org http://www.ibm.com/developerworks/opensource/top-projects/eclipse-starthere.ht ml?ca=dgr-lnxw09LearnEclipse 2.1.2 What is Eclipse RCP? The Eclipse Rich Client Platform (RCP) is a set of plug-ins that can be used to build a rich client application; for example, both the Eclipse Integrated Design Environment (IDE) and Workplace Managed Client are rich client applications. For more information regarding Eclipse and the Eclipse RCP, see the following sites: The Eclipse Foundation home page: http://www.eclipse.org/ The Eclipse Foundation Rich Client Platform home page: http://wiki.eclipse.org/index.php/Rich_Client_Platform The IBM developerWorks® article, Eclipse's Rich Client Platform, Part 1: Getting started: http://www.ibm.com/developerworks/edu/os-dw-os-rcp1-i.html 2.1.3 Eclipse RCP, Workplace Client Technology, and Workplace Managed Client To enable a viable client application for real-world, enterprise-level use, additional components are required beyond what the Eclipse RCP provides. These components can include, but are not limited to, a platform launcher, rich text editor, page switcher, and multiple personalities. These types of components and others are available through Workplace Managed Client. Workplace Managed Client is built on top of Workplace Client Technology. Because Workplace Client Technology is built on top of the Eclipse platform, the process of integrating an Eclipse RCP application with Workplace Managed Client is relatively straightforward. We explain Workplace Client Technology in detail in Chapter 1, “Introduction” on page 1. Important: Do not confuse Eclipse RCP with Workplace Client Technology RCP: Eclipse RCP offers the foundation for creating a rich, Eclipse-based application. Workplace Client Technology RCP provides a comprehensive platform on which Workplace Managed Client applications are built and executed. Workplace Managed Client personalities allow the managed coexistence of several Eclipse-based applications in a single window. For more information, see “Platform and custom personalities” on page 178. Chapter 2. ISVs with Eclipse applications 19 2.1.4 Eclipse RCP integration levels As stated in the introduction, there are trade-offs involved when deciding how integrated an existing Eclipse RCP application should be with Workplace Managed Client. Table 2-1 provides an illustration. Table 2-1 Example of various integration levels for Eclipse RCP applications Increase of time, effort, and synergy → Coexist Accommodate Leverage Exploit Copy and paste data into a document stored in the Workplace Managed Client document library. Package plug-ins to provision from IBM Workplace/Portal server. Store plug-in related files to secure, synchronized client storage. Write plug-ins that take advantage of Workplace Client Technology infrastructure, for example, local and remote data access (call Web services). 2.2 Coexist The simplest level of integration is coexistence. This requires no changes at the code level. The application remains installed and runs on the client’s desktop just as it always has. For example, the Delivery Manager application can be extended to create and generate a warehouse status report. The report's content can be copied and pasted manually into the document library in Workplace Managed Client. This makes use of the secure and central data management of Workplace Client Technology to store data from the application. This stored data, or references to it, can be e-mailed to other people or added to an activity. Figure 2-2 on page 21 shows an example of running the Delivery Manager alongside Workplace Managed Client. For more information, refer to 1.4.1, “Coexistence” on page 10. 20 IBM Workplace Managed Client: ISV Integration Guide Figure 2-2 Example of running the Delivery Manager alongside Workplace Managed Client 2.3 Accommodate At the accommodate integration level, the application can be enhanced or modified to use mechanisms such as provisioning, the shut-down sequence, and reparenting. These mechanisms can help achieve simple, “on-the-glass” integration, such as displaying within a frame of IBM Workplace Client Technology. The benefit to this level of integration is that components begin to share visual context such as language or font settings with other application components. Overall, an accommodation approach can be an excellent first step to a customer-driven exploration of deeper integration directions. For more information, refer to 1.4.2, “Accommodation” on page 11. Workplace Managed Client and the Eclipse RCP Workplace Managed Client uses Eclipse RCP standards to organize code units into plug-ins and features. A plug-in is the smallest unit of Eclipse that can be developed and delivered separately. All Eclipse-based applications consist of plug-ins that provide functionality to that application. Plug-ins are grouped into features. A feature is the smallest unit of separately downloadable and installable functionality. Features are a requirement of Workplace Managed Client, but not Eclipse RCP. If the plug-ins of an Eclipse RCP application are not Chapter 2. ISVs with Eclipse applications 21 organized into features, one or more features must be created and the plug-ins moved in to them. Fortunately, features are a minor construct; it takes very little effort to create a feature and add plug-ins to it. Both Workplace Managed Client and the Eclipse RCP use views to organize user interface (UI) deployment. In an Eclipse RCP application, views are organized into pages of UI code, each known as a perspective. In Workplace Managed Client, views are first registered as portlets in the administration tool. See 2.3.2, “Configuring and provisioning a Workplace Managed Client application” on page 24 for a detailed explanation of this. Behind the scenes, Workplace Managed Client uses dynamic perspectives to create page layouts in the client. A complete integration of an Eclipse RCP application would separate all of the Eclipse RCP views and manage them as individual portlets in Workplace Managed Client. 2.3.1 Lightweight integration of Eclipse RCP with Workplace Managed Client For the purposes of accommodating an existing application, there is a quicker, less time-consuming way to bring Eclipse RCP perspectives directly into Workplace Managed Client. If the code to select an Eclipse-based perspective is invoked, Workplace Managed Client will show the content of that perspective. However, views can only be managed through Workplace Managed Client. In order to leverage an Eclipse perspective in a Workplace Client Technology view, you must create a Workplace Managed Client view whose sole purpose is to switch to an Eclipse perspective. The most efficient approach is to wrap the Eclipse view code in Example 2-1 in a separate plug-in. Subsequently, create a single portlet for the view on the Workplace Collaboration Services server and place it on a page. See the 2.3.2, “Configuring and provisioning a Workplace Managed Client application” on page 24 for information about how this is achieved. Example 2-1 Eclipse view code to switch to a perspective package com.ibm.wcttool.sldlv2.views; import com.ibm.wcttool.sldlv1.DMPerspective; //... public class SwitcherView extends ViewPart { public SwitcherView() { } public void createPartControl(Composite parent) { } public void setFocus() { try { getViewSite().getWorkbenchWindow().getWorkbench() .showPerspective(DMPerspective.ID, getViewSite().getWorkbenchWindow()); } catch (WorkbenchException e1) { e1.printStackTrace(); } } } When the client provisions from the server, it brings down the feature with the plug-in in it. When the page is selected, it places this view on the window. This forces the setFocus() function to be called, which switches the perspective to the one defined by the application. Figure 2-3 on page 23 shows an example integration. 22 IBM Workplace Managed Client: ISV Integration Guide Figure 2-3 Delivery Manager integrated with the Workplace Managed Client through a simple wrapper plug-in With very little work, some of the most powerful mechanisms in Workplace Managed Client, provisioning and management, have been leveraged, instantly reducing the total cost of ownership and maintenance effort required. Rather than using a traditional installation or upgrade method to provide this application to users, such as distributing a disc or a user-initiated download, Workplace Managed Client provides a low-touch mechanism for deciding who gets this application or update. Note: Eclipse RCP provides its own update mechanism, but ISVs must perform a considerable amount of work to integrate their applications with this system. Much of this work involves writing infrastructure code, rather than focusing on writing the unique code that adds business value. By using Workplace Client Technology provisioning, ISVs can focus more on the business application and not concern themselves with infrastructure considerations. Additionally, Workplace Client Technology provisioning is “enterprise capable,” that is, Workplace Client Technology supports role-based provisioning as explained in the following section. Chapter 2. ISVs with Eclipse applications 23 2.3.2 Configuring and provisioning a Workplace Managed Client application Applications on the Workplace Managed Client differ from stand-alone applications in one very significant regard. Although they execute locally on a client’s desktop, they are centrally managed by a remote Workplace Collaboration Services server. This enables an administrator to control a number of factors: Application layout and configuration Centralized rollout of new applications and updates Each Workplace Managed Client application consists of client-side and server-side components. The client-side components are arranged in terms of views and perspectives, while the server-side components are arranged using portlets and pages. A portlet is a collection of code that runs on the server and is served up through a portal. The portlet outputs Hypertext Markup Language (HTML) code that renders a managed view in a Web client, also referred to as a thin portlet. In addition to registering these thin portlets, Workplace Client Technology adds the capability to register thick portlets. Thick portlets are Eclipse views that can be downloaded and rendered by the rich client. A page is a collection of portlets to be grouped together with a specified layout. It provides similar functionality to that of an Eclipse perspective. Note: The steps listed in the following sections describing application deployment are manual, require some effort on the part of the developer, and do not cover every possible facet of the deployment process. For a fully detailed tutorial, see the paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server, on developerWorks: http://www.ibm.com/developerworks/workplace/library/deploy-client-application-workpla ce/index.html It is possible to achieve the same results less laboriously using the Workplace Managed Client Developer Toolkit, available at: http://www.alphaworks.ibm.com/tech/wmctoolkit For a detailed tutorial about using the toolkit, see: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Application layout and configuration When an existing Eclipse RCP application is being accommodated within Workplace Managed Client, it is necessary to rework the application's layout. Rather than using a perspective, a page must be created on the Workplace Collaboration Services server that launches the application. This page represents the application’s Eclipse perspective and contains a layout that specifies the arrangement of the views on the client. Follow these steps in order to create a page that launches an Eclipse application: 1. Wrap each Eclipse view as a thick portlet. 2. Assign access permissions to the portlet. 3. Create a page in Workplace Collaboration Services. 4. Select a layout for the page. 5. Add portlets to the page. 24 IBM Workplace Managed Client: ISV Integration Guide Wrapping an Eclipse view as a thick portlet The first step in accommodating an Eclipse RCP application to Workplace Managed Client is to create a thick portlet for each view. Follow these steps to create a portlet: 1. Log in to the Workplace server as an administrator using the following URL: http://<http_server>/lwp/myworkplace 2. Click Administration → Portlets → Manage Portlets → Search for Portlets. See Figure 2-4. Note: Administrator access is required in order to create and configure portlets and pages. If you do not have sufficient access permissions, speak to the system administrator. Figure 2-4 Workplace Collaboration Services Administration link 3. Type generic in the Title contains field and press Enter. 4. Select the portlet named RCP Portlet - Generic and click Copy. The result is that a new copy of the generic portlet is created. This new portlet must now be modified to refer to the switcher view created earlier. 5. Select the new portlet created and click Modify Parameters to modify the new portlet. 6. Click Set Title for Selected Locale to change the portlet name. Type SwitcherView in the Title field and click OK. This modifies the name of the view as displayed in the Workplace Managed Client, the view name in the plugin.xml file. 7. Select the check box next to the rcpView parameter and type com.ibm.wcttool.sldlv2.views.SwitcherView in the Value field. Note: This configures the switcher portlet and corresponds to the switcher view defined in Figure 2-1 on page 18. The page should now look similar to the one shown in Figure 2-5 on page 26. Chapter 2. ISVs with Eclipse applications 25 View ID of the Eclipse view to display, SwitcherView Figure 2-5 Workplace Collaboration Services portlet configuration page 8. Click Save. Assign user policy to Workplace portlets A Workplace administrator must assign access to the applications portlets and pages in order to allow users to provision and use the application. The following steps describe how to assign access to the Workplace Managed Client portlets: 1. Click Administration and click the Access tab. 2. Click Resource permissions and select Portlets under Resource Types. 3. Type SwitcherView in the Search for field to find the Workplace portlet page created in “Wrapping an Eclipse view as a thick portlet” on page 25. 4. Click the Assign Access icon to assign the user policy, as shown in Figure 2-6. Figure 2-6 Assign Access for portlets 5. Click the Edit Role icon to the right of User. 26 IBM Workplace Managed Client: ISV Integration Guide 6. Click Add and select all authenticated portal users, as in shown in Figure 2-7. The figure shows the available user policies that can be applied to the portlet. This is the default Workplace policy created by the Workplace administrator. (Alternatively, you can select the new Workplace user policy created using the WebSphere administration console). Click OK. Figure 2-7 Workplace user policies Creating the Workplace page Perform the following steps to create a subpage of the WorkplaceRCPPages page, called Delivery Manager, in Workplace Collaboration Services and add a portlet to the page: 1. In the Workplace Collaboration Services administration console, click the Portal User Interface tab. 2. Click Manage Pages. Type workplaceRCP in the Search for field. Note: This adds the Delivery Manager application page under the Workplace content root. 3. Click the Edit Page Layout icon for the WorkplaceRCPPages page, as shown in Figure 2-8. Assign Edit Policy Layout Figure 2-8 Accessing page layout and user policy in Workplace Collaboration Services server console 4. Click Edit Properties. In the Advanced Options section, make sure that the HTML and RCPML check boxes are selected in the page support option. If not, select both and click OK → OK → Done. This means that the sample application will support both RCPML layout and HTML. Chapter 2. ISVs with Eclipse applications 27 Important: Do not leave either the RCPML or HTML check boxes cleared. This will lead to pages and applications not being displayed. 5. Click WorkplaceRCPPages and then click New Page under the WorkplaceRCPPages category to create a subpage that will host the Workplace application. 6. Type Delivery Manager in the name field. In the Advanced Options section, make sure that the HTML and RCPML check boxes are selected in the page support option. If not, select both and click OK. Important: Make sure that your portlet names are unique. Assign access to the Workplace page Follow these steps to assign access permissions to the Delivery Manager page: 1. Click the Access tab at the top of the page. 2. Select Resource permission → Pages. Search for the page name Delivery Manager. 3. Click the Assign Access icon to assign the user policy. 4. Click the Edit Role icon to the right of User. 5. Click Add and select all authenticated portal users. Click OK → Done. Adding a portlet to a page After the creating the portlet, you must add it to a page in order for it to be accessible to users. Perform the following steps: 1. Click Portal User Interface → Manage Pages. 2. Search for Delivery Manager. Click the Edit Page Layout icon for the Delivery Manager page. 3. In the layout panel of the page, click Add portlets. Search for the newly created switcher view portlet. Click OK → Done. See Figure 2-9 on page 29. 28 IBM Workplace Managed Client: ISV Integration Guide Figure 2-9 Workplace Collaboration Services page layout for Delivery Manager application Centralized rollout of new applications and updates As discussed earlier in the chapter, one of the primary advantages of Workplace Managed Client is its provisioning capability. Rather than manually installing and updating applications, applications are instead automatically downloaded and installed for the user from the Workplace Collaboration Services server, with no effort required on the user’s part. To make the application plug-ins available for client provisioning, the application-specific JAR files must be installed on the Workplace Collaboration Services update site. When a user starts the Workplace Managed Client in online mode, the user will be asked to download the new updates. When the user accepts the download, the new or updated feature is downloaded and installed. Note: For detailed instructions about deploying the application on the update site manually, see the paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server, on developerWorks: http://www.ibm.com/developerworks/workplace/library/deploy-client-application-workpla ce/index.html The Workplace Managed Client Developer Toolkit provides a more automated approach. See the following Web page for more information: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic/index.html Chapter 2. ISVs with Eclipse applications 29 2.4 Leverage The next level of integration is to leverage more of the capabilities of the platform services that are available in IBM Workplace Client Technology. This involves using more fully the extra capabilities offered by Workplace Managed Client. Some of these include: Enabling server-side definition of an applications view layout by creating one portlet per view Action bars, used to replace view toolbars Workplace Managed Client menus Search bar Custom UI widgets – Rich text editor – Alerts – Collapse bar Custom views – Shelf views Personalities and personality startup A number of these capabilities are discussed in the following sections. Note: For more information, refer to the following developerWorks articles: Working with application layouts in the IBM Workplace Managed Client http://www.ibm.com/developerworks/lotus/library/wmc-layouts/index.html Introducing the IBM Workplace Client Technology API http://www.ibm.com/developerworks/lotus/library/wcs-toolkit/index.html For more information, refer to 1.4.3, “Leverage” on page 11. Note: The steps explained in each of the following sections assume that an Eclipse plug-in project with a view class has already been created, as demonstrated in 2.3, “Accommodate” on page 21. We also assume that you are familiar with the steps required for deploying a Workplace Managed Client application to the Workplace Collaboration Services server, also shown in 2.3, “Accommodate” on page 21. 2.4.1 Enabling server-side definition of an applications view layout In 2.3, “Accommodate” on page 21, an Eclipse RCP application was modified to take advantage of the Workplace Managed Client provisioning engine. The application perspective was wrapped in a single Eclipse view and defined as a single portlet on the Workplace Collaboration Services server. This approach is relatively simple but does not take advantage of more powerful capabilities of Workplace Managed Client such as centralized management of a client application’s layout. After a portlet is defined for each view, it is easy to rearrange the application as needed and be automatically provisioned to client machines. This change requires no extra 30 IBM Workplace Managed Client: ISV Integration Guide coding; after an application is deployed correctly, layout modifications can be handled by non-technical users with the appropriate Workplace Collaboration Services access. Figure 2-10 shows the Delivery Manager application after its views have been added as individual portlets on the Workplace Collaboration Services server. Application views rearranged using centralized server-side management Figure 2-10 Arranging application views with different folder IDs: Centralized server-side management You can take two possible paths when defining the layout of an application: Manually configuring all aspects of the application, including: – Pages – Portlets Auto-configuration using the Workplace Managed Client Developer Toolkit We discuss both of these approaches in the following sections. 2.4.2 Manually configuring an application page layout In order to take advantage of the page layout features of Workplace Managed Client, you need to create individual portlets. The Delivery Manager application has six different views: NavigationView WarehouseView Chapter 2. ISVs with Eclipse applications 31 VanView OrderView StoreView PaletteView Perform the following steps to manually configure an application’s page layout: 1. Deploy the application feature to the HTTP server. 2. Create a single portlet for each of the Eclipse views in the application. 3. Edit the portlet configuration parameters. 4. Create a single page with a two-pane layout. 5. Add the portlets to the page. Deploying the application feature to the HTTP server The feature and plug-in JAR files of the Eclipse RCP application must be deployed to the Workplace Collaboration Services HTTP server in order to enable the Workplace Managed Clients to download them. These JAR files are generated from an Eclipse Update Site project. For details about how to create this project and deploy the resulting files, see the paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server, on developerWorks: http://www.ibm.com/developerworks/workplace/library/deploy-client-application-workplace/ index.html Note that if the application contains any Eclipse activities, each activity must be mapped to that application by running an xmlaccess script on the server. The developerWorks article provides instructions for this. Creating a single portlet for each Eclipse view In the case of the Delivery Manager, there are six different views, NavigationView, WarehouseView, VanView, OrderView, StoreView, and PaletteView. For this reason, six separate portlets must be created and each one associated with one of the Eclipse views. Note: See the “Wrapping an Eclipse view as a thick portlet” on page 25 for detailed information about portlet configuration. Note that the rcpView parameter in each portlet should be identical to the view ID for the corresponding Eclipse view. All portlets with the same tab folder ID will be grouped together in the UI. For example, in Figure 2-10 on page 31, the Warehouse and Van views use the pane2 folder ID, while the Order, Store and Palette views use the pane3 folder ID. Follow these steps to create a portlet: 1. Log in to the Workplace server as an administrator using the following URL: http://<http_server>/lwp/myworkplace 2. Click Administration in the top-right corner of the page. 3. Click Portlets → Manage Portlets and search for the term generic in the Title contains text box. 4. Select the portlet named RCP Portlet - Generic, and click Copy and then Modify Parameters to modify the parameters for the new portlet created. 32 IBM Workplace Managed Client: ISV Integration Guide 5. Click Set Title for Selected Locale to change the portlet name.Type NavigationView in the Title field and click OK. 6. Select the check box next to the rcpView parameter and type com.ibm.wcttool.sldlv2.views.NavigationView in the Value field. This maps the new portlet to the Eclipse view ID as defined in the plugin.xml file of the application. Note: This configures the switcher portlet and corresponds to the switcher view defined in Figure 2-1 on page 18. 7. Click Save to return to the Manage Portlets pane. 8. Repeat steps 4 through 7 with the parameter value changes for Title and rcpView shown in Table 2-2. Table 2-2 rcpView parameter values Portlet title rcpView parameter WarehouseView com.ibm.wcttool.sldlv2.views.WarehouseView VanView com.ibm.wcttool.sldlv2.views.VanView OrderView com.ibm.wcttool.sldlv2.views.OrderVIew StoreView com.ibm.wcttool.sldlv2.views.StoreView PaletteView com.ibm.wcttool.sldlv2.views.PaletteView You should now have six new portlets. Edit the portlet configuration parameters After the new portlets have been created, you must define some portlet variables. For this application, these include: Mapping each portlet to an Eclipse feature. This ensures that the feature and all its plug-ins are provisioned to the client machine. Defining the relative size of each of the view panes by setting the ratio parameter. Defining how views are to be grouped using Eclipse view tabs by setting the folderid parameter. Defining whether or not a view can be closed by setting the fixed parameter. Defining whether or not a view should always be visible by setting the visible parameter. Table 2-3 lists the variable parameters and their functions. Table 2-3 Available Workplace Collaboration Services portlet parameters and their functions Parameter Function rcpUpdate Defines the Eclipse feature ID on which the portlet depends. id.feature_1 Defines the ID of the feature. version.feature_1 Defines the preferred version. match.feature_1 Indicates how to select other versions that might be available; the choices are compatible and exact. rcpView Defines the view ID to display. Chapter 2. ISVs with Eclipse applications 33 Parameter Function ratio Controls the size of the view in relation to the page. fixed Indicates whether the layout of the personality is fixed. The default is no. If set to yes, the view is not closeable and cannot be moved. folderid Groups portlets into a tabbed view. This is similar to the IFolderLayout class used in a perspective. When portlets with the same folderid appear together in one column in a layout, they are grouped into a tabbed display. visible Controls whether the view is visible or not. The default is yes. style Defines the style of the title bar of the view. In Release 2.5.1, the only supported style is NO_TITLE, which tells the client not to display a title bar for the view. Note: For more information about the application parameters, see the developerWorks article at: http://www.ibm.com/developerworks/lotus/library/wmc-layouts/index.html For provisioning and application update information, see the paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server, on developerWorks: http://www.ibm.com/developerworks/workplace/library/deploy-client-application-workpla ce/index.html Mapping each portlet to an Eclipse feature Map each portlet to all features it requires to be provisioned down to the client machine. The provisioning engine on the Workplace Collaboration Services server uses these mappings to decide which JAR files should be downloaded by Workplace Managed Client. The three parameters that are used to map a portlet to a feature are id, version, and match. Each of these should be followed by an identifier, for example, feature_1, which can essentially be defined however you want as long as the same identifier is used for all three parameters. Table 2-3 on page 33 gives an example of this. If the parameter match.feature_1 is set to compatible and the version number on disk is changed to 1.0.1, the feature update is automatically processed when the clients connect. If match.feature_1 is set to exact, only that version is used. If there is more than one feature, additional variables can be added to identify them. The client will not display the UI unless all needed features are available. This protects the user from seeing a broken UI. Perform the following steps: 1. Select Portlets → Manage Portlets, and search for the NavigationView portlet. Click Modify parameters. 2. Type rcpUpdate in the blank field to the left of the Add button. Type com.ibm.wcttool.sldlv in the blank value field next to rcpUpdate and click Add. This maps the portlet to the Eclipse feature com.ibm.wcttool.sldlv, as defined in the application’s feature.xml file. 3. Create the three parameters defined in Table 2-4 on page 35. To do this, type the parameter name and value into the blank text fields to the left of the Add button, and click Add. 4. Repeat steps 1 to 3 for the other five portlets. 34 IBM Workplace Managed Client: ISV Integration Guide Table 2-4 Three portlet parameters used to map a portlet to a feature Parameter Value match.Feature_1 compatible version.Feature_1 1.0.0 id.Feature_1 com.ibm.wcttool.sldlv Defining the relative size of each of the view panes In the NavigationView portlet, replace the existing ratio parameter with .20. This causes the leftmost pane of the page to occupy 20% of the horizontal workbench area. The ratio parameter does not have to be modified for the other portlets. Defining how views are to be grouped using Eclipse view tabs The folderid parameter controls how portlets are grouped into a tabbed view. This is similar to the IFolderLayout class used in a perspective. When portlets with the same folderid appear together in one column in a layout, they are grouped into a tabbed display. For the Delivery Manager application, perform the following two steps: 1. Modify the WarehouseView and VanView portlets by adding the following parameter and value: Parameter: folderid Value: pane2 2. Modify the OrderView, StoreView and PaletteView portlets by adding the following parameter and value: Parameter: folderid Value: pane3 Figure 2-10 on page 31 shows the result of arranging the views and portlets in such a way. Defining whether or not a view can be closed For all six portlets, set the value of the fixed field to yes. This means that none of the views can be closed by the user. Defining whether or not a view should always be visible For all six portlets, set the value of the visible field to yes. This means that all of the views will be visible. Figure 2-11 on page 36 shows the complete configuration for the StoreView portlet. Other portlets will be quite similar to this. Chapter 2. ISVs with Eclipse applications 35 Figure 2-11 Portlet configuration for the StoreView Eclipse view Adding multiple portlets to a page After creating the portlets, add them to the Delivery Manager page created in “Creating the Workplace page” on page 27. Follow these steps to modify the Delivery Manager page: 1. In the Workplace Collaboration Services administration console, click the Portal User Interface tab. 2. Click Manage Pages and search for WorkplaceRCPPages. 3. Click WorkplaceRCPPages → New Page. 4. Type Delivery Manager_All in the Title field and click OK. 5. Search for the Delivery Manager_All page and click the Edit Page Layout icon. 6. Click Add portlets in the left column. 7. Add the NavigationView portlet and click OK. Tip: Search for the portlet name. 8. Repeat steps 6 and 7 to add the remaining five portlets to the right column and click Done. Your page should look similar to the page shown in Figure 2-12 on page 37. 36 IBM Workplace Managed Client: ISV Integration Guide Figure 2-12 Page layout for the Delivery Manager application 2.4.3 Configuring an application page layout using Workplace Managed Client Developer Toolkit Configuring an application layout manually can be very time-consuming. An alternative is to use the Workplace Managed Client Developer Toolkit. The Workplace Managed Client Developer Toolkit is an Eclipse-based UI tool that automatically configures many default parameters. It also makes deploying an application to a Workplace Collaboration Services server much simpler. Follow these steps to create the layout for the Delivery Manager application using the Workplace Managed Client Developer Toolkit: 1. Install the toolkit. You can download it from: http://www.alphaworks.ibm.com/tech/wmctoolkit 2. Create a new Workplace Managed Client project using the toolkit. 3. Select a page layout with two columns, a small left column and a large right column. This automatically creates a page layout with a left column that has a ratio of 0.2. 4. Add the NavigationView to the left column and all other views to the right column. 5. Deploy the application to the server. Figure 2-13 on page 38 shows a page layout configuration using the Workplace Managed Client Developer Toolkit. For detailed information about how to perform each of these steps, see the following developerWorks article and the documentation that comes with the toolkit: http://www.ibm.com/developerworks/lotus/library/wmc-toolkit Chapter 3, “ISVs with AWT or Swing applications” on page 47 also contains a much more comprehensive description of using the Workplace Managed Client Developer Toolkit. Chapter 2. ISVs with Eclipse applications 37 Figure 2-13 Page layout configuration using the Workplace Managed Client Developer Toolkit 2.4.4 Using an action bar to replace the view toolbar Workplace Managed Client manages view toolbars and tabbed views differently from Eclipse RCP. For example, in Figure 2-3 on page 23, the toolbars from the original Eclipse RCP application were missing from the UI after it was incorporated into Workplace Managed Client. Note: Future releases of Workplace Client Technology, 2.6 and later, will have the ability to turn on view toolbars even in tabbed views. This will be an even quicker way to get an application up and running in Workplace Client Technology. The action bar is a custom Workplace Client Technology widget. By switching an application’s UI to the action bar, the application retains a lot of its functionality, as well as having its features, looks and operations being more deeply integrated with Workplace Managed Client. The action bar is a special toolbar that conforms to Workplace Client Technology styling and is very easy to use. Eclipse actions are contributed to it just like any other toolbar manager. Perform the following steps to add an action bar to the Eclipse view: 1. Add a dependency on the com.ibm.rcp.ui plug-in to the application’s plugin.xml file, as shown in Example 2-2. Example 2-2 Partial plugin.xml file containing a dependency on the com.ibm.rcp.ui plug-in <plugin> <requires> <import plugin="com.ibm.rcp.ui"/> </requires> ... </plugin> 38 IBM Workplace Managed Client: ISV Integration Guide 2. Modify the Eclipse view class to add the action bar instead of the view toolbar and drop-down menu. Example 2-3 shows how this is done. Example 2-3 Eclipse view code to create an action bar and add Eclipse actions //Both the IActionBarWidgetManager and WidgetFactory classes are defined in the //com.ibm.rcp.ui.widgets plugin import com.ibm.rcp.ui.widgets.api.jface.IActionBarWidgetManager; import com.ibm.rcp.ui.widgets.api.WidgetFactory; //... private IActionBarWidgetManager mActionBar; private Action mActNew, mActEdit, mActDel, mActReport; public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(2, false)); mActionBar = WidgetFactory.createActionBar(parent, SWT.RIGHT | SWT.FLAT); //... makeActions(); contributeToActionBars(); } private void makeActions(){ //Make the Eclipse Actions here... } private void contributeToActionBars() { mActionBar.add(mActNew); mActionBar.add(mActEdit); mActionBar.add(mActDel); mActionBar.add(mActReport); } Applying the code in Example 2-3 results in an action bar being created, replacing the Eclipse toolbar for the tabbed view, as shown in Figure 2-14. Figure 2-14 Delivery Manager action bar 3. Deploy the application to the Workplace Collaboration Services server and provision it down to the client. We describe how to do this in “Deploying the application feature to the HTTP server” on page 32. 2.4.5 Contributing to the Workplace Managed Client menus As with toolbars, Workplace Managed Client handles top-level menus differently from the Eclipse RCP. Both platforms specify menu commands and their contents using the actionSet and menu tags. However, Workplace Managed Client uses different menu IDs. If an Eclipse RCP application is built with actions that are nested under standard menu commands such as File or Edit, those items will not be available through standard Workplace Managed Client menus. Chapter 2. ISVs with Eclipse applications 39 The IWorkplaceActionConstants class defines Workplace Managed Client menu IDs. Table 2-5 illustrates some of these IDs. Table 2-5 Menu IDs defined in the IWorkplaceConstants class Constant value Reference in menu tag as FILE_MENUID = “file” IWorkbenchActionConstants.M_FILE path=“additions” and id=“file” EDIT_MENUID = “edit” IWorkbenchActionConstants.M_EDIT path=“edit/<submenutitle>” and id=“<customString> WINDOW_MENUID = “window” IWorkbenchActionConstants.M_WINDOW HELP_MENUID = “help” IWorkbenchActionConstants.M_HELP id=“help” For a complete listing of all available menu items, refer to the Workplace Collaboration Services 2.5.1 API documentation and Appendix B, “IBM Workplace 2.5.1 menu IDs” on page 185. Example 2-4 shows the Eclipse plugin.xml code to add a Warehouse submenu to the File menu in Workplace Managed Client. Example 2-4 Eclipse plugin.xml code <actionSet label="Warehouse" visible="false" id="com.ibm.wcttool.sldlv2.Warehouse.actionSet" > <menu label="Warehouse" id="com.ibm.wcttool.sldlv2.Warehouse.actionSet.menu" path="file/filePrintGroup"> <separator name="sampleGroup"> </separator> </menu> <action label="Report" menubarPath="file/com.ibm.wcttool.sldlv2. Warehouse.actionSet.menu/sampleGroup" icon="icons/report.gif" class="com.ibm.wcttool.sldlv2.act.wh.ActWarehouseReport" id="com.ibm.wcttool.sldlv2.act.wh.ActWarehouseReport"/> </actionSet> 2.4.6 Adding a Workplace Managed Client search bar Workplace Managed Client exposes an extension point that any application can implement in order to place a search bar above the main view. The search bar consists of: A combo box listing search categories A text box for the string to be searched A button to activate the search 40 IBM Workplace Managed Client: ISV Integration Guide Figure 2-15 shows a search bar. Figure 2-15 The search bar as extended by the Delivery Manager application The searchbarAdapters extension point adds a custom contribution to the search menu that performs a customized search and displays its results in a custom view. To create a search bar in Workplace Managed Client, perform the following steps: Populate the search menu with the custom contribution. Contribute code to perform a custom search that is triggered when the corresponding menu action is selected. Display the search results in a custom view. Follow these steps to add a custom search bar contribution: 1. Edit the plugin.xml file by importing the com.ibm.rcp.ui.searchbar and com.ibm.rcp.platform plug-ins, as shown in Example 2-5. Example 2-5 Eclipse plugin.xml code with plug-in dependencies for a search bar extension <plugin> <requires> <import plugin="com.ibm.rcp.ui.searchbar"/> <import plugin="com.ibm.rcp.platform"/> </requires> ... </plugin> 2. Extend the searchbarAdapters extension point defined in the com.ibm.rcp.ui.searchbar.api code and provide values for the required attributes as tags, as shown in Example 2-6. Example 2-6 Eclipse plugin.xml code to extend searchBarAdapters <plugin> <extension id="com.ibm.wcttool.sldlv2.search.VanSearch" name="searchbar extension point" point="com.ibm.rcp.ui.searchbar.searchbarAdapters"> <adapter label="Van" data="1" class="com.ibm.wcttool.sldlv2.search.VanSearch" id="com.ibm.wcttool.sldlv2.search.VanSearch" /> </extension> ... </plugin> 3. Map the adapter id parameter in Example 2-6 to the Delivery Manager activity pattern binding. Example 2-7 on page 42 shows how to do this. Chapter 2. ISVs with Eclipse applications 41 Example 2-7 Eclipse plugin.xml code to map the Id parameter <plugin> <extension point="org.eclipse.ui.activities"> <activity description="This is sldv activity" name="com.ibm.workplace.deliverymgr" id="com.ibm.workplace.deliverymgr"/> <activityPatternBinding activityId="com.ibm.workplace.deliverymgr" pattern="com\.ibm\.wcttool\.sldlv2/com\.ibm\.wcttool\.sldlv2\.search\..*" /> </extension> ... </plugin> 4. Create a new class that implements the ISearchDataAdapter interface. The class and package should match the class parameter defined in the searchbarAdapters extension created in step 2 on page 41. In the Delivery Manager example, we use the com.ibm.wcttool.sldlv2.search.VanSearch class, as shown in Figure 2-8 on page 27. Example 2-8 Partial implementation of the ISearchDataAdapter interface in VanSearch.java package com.ibm.wcttool.sldlv2.search; //The ISearchDataAdapter interface is defined in the com.ibm.rcp.ui.searchbar plug-in import com.ibm.rcp.ui.searchbar.api.ISearchDataAdapter; public class VanSearch implements ISearchDataAdapter{ public boolean isMenuVisible() { return true; } public void run(String arg0, String arg1) { //Search logic goes here //Non-UI operation //... // UI Operation should be performed using syncExec() or asyncExec() Display.getDefault().asyncExec(new Runnable(){ public void run() { // The UI Operation } } //...... } Note: While implementing the run() method for ISearchDataAdaper, make sure that the UI operations are performed using the syncExec() or asyncExec() thread. Perform the non-UI operations using normal Java Thread. 5. Deploy the application to the Workplace Collaboration Services server and provision it down to the client. “Deploying the application feature to the HTTP server” on page 32 describes how this is accomplished. 42 IBM Workplace Managed Client: ISV Integration Guide 2.4.7 Adding a Workplace Managed Client shelf view Workplace Managed Client provides a side bar to which applications can add custom views. These are referred to as shelf views. Figure 2-16 on page 44 shows an example of a shelf view. To add a shelf view to the side bar, perform the following steps: 1. Create the Eclipse view to be displayed in the side bar. 2. Add a dependency to the plug-in com.ibm.rcp.ui to the view plug-in project. Example 2-9 shows a partial plugin.xml file with this dependency added. 3. The com.ibm.rcp.ui.shelfViews extension point must be extended. Example 2-9 shows this. 4. If the shelf view should only appear when a particular application has the focus, you must map the existing Eclipse view id to the shelf view view attribute. Example 2-9 shows the view id attribute and the shelfView view attribute are identical, with the value com.ibm.wcttool.sldlv2.views.VanInfoView. 5. Create an Eclipse activity and map the shelf view ID to the Eclipse activity ID just created. If the shelf view is not mapped to a particular application’s activity, it will always be visible in the side bar; the Instant Contacts view is an example of this. Example 2-9 shows how a shelf view is added to the Delivery manager application. Example 2-9 Eclipse plugin.xml code to add a shelf view and map it to an Eclipse activity <requires> <import plugin="com.ibm.rcp.platform"/> </requires> <extension point="org.eclipse.ui.views"> <view name="Van Information" class="com.ibm.wcttool.sldlv2.views.VanInfoView" id="com.ibm.wcttool.sldlv2.views.VanInfoView"> </view> </extension> <extension point="com.ibm.rcp.platform.shelfViews"> <shelfView view="com.ibm.wcttool.sldlv2.views.VanInfoView" id="com.ibm.wcttool.sldlv2.views.VanInfoView" /> </extension> <extension point="org.eclipse.ui.activities"> <activity description="This is sldv activity" name="com.ibm.workplace.deliverymgr" id="com.ibm.workplace.deliverymgr"/> <activityPatternBinding activityId="com.ibm.workplace.deliverymgr" pattern="com\.ibm\.wcttool\.sldlv2/com\.ibm\.wcttool\.sldlv2\.views\..*" /> <!--The pattern parameter maps the shelf view id to the Delivery Manager activity--> </extension> 6. Deploy the application to the Workplace Collaboration Services server and provision it down to the client. “Deploying the application feature to the HTTP server” on page 32 describes how this is accomplished. Figure 2-16 on page 44 shows the Workplace Managed Client shelf view anchored in the side bar. Chapter 2. ISVs with Eclipse applications 43 Figure 2-16 Workplace Managed Client shelf view anchored in the side bar 2.5 Exploit As stated in the introduction, complete seamless integration occurs when an ISV chooses to fully exploit the capabilities of Workplace Managed Client. For example, when writing plug-ins that are more than simple wrappers, most or even all of the code is structured to the Workplace programming model in order to exploit the client technologies fully. By employing the APIs and available models, an ISV can write a matched set of portlets, plug-ins, EJB services, and data source definitions that take full advantage of all the attributes of the IBM Workplace Client Technology infrastructure. Application components that are written in this manner gain several benefits, for example, the ability to dynamically share capabilities, such as online awareness, and participate in spanning services, such as full text indexing. In most cases, ISVs that have existing applications or components are expected to gradually extend into this space as they match needs and requirements to the appropriate programming model constructs. Workplace Managed Client provides a number of features that enable an ISV to extend its application in very powerful ways. Document libraries for remote storage and document sharing Workplace Managed Client document libraries consist of both local and remote data storage in a folder structure designed for sharing documents among a group or team. Workplace Managed Client provides an API for manipulating files and folders in a document library. The Delivery Manager application can be modified to generate a report and store it in a remote document library using these APIs. 44 IBM Workplace Managed Client: ISV Integration Guide Online awareness There is a online/offline awareness API that can be used to inform an application when the client is online, offline, or when it is about to transition between the two. This can be useful for completing transactions if connectivity is about to change and close down open connections. After the operation has completed, the connection to the database can be reestablished. The Delivery Manager application can use these APIs to offer report generation capabilities only when the client is online. Synchronizing client application data There is an API that taps into the client's synchronization framework. Based on timetables set in the client’s preferences, the application can be told when to synchronize its data. The actual data synchronization is performed by the application itself. Database access, both local and remote The Delivery Manager application uses a relational database on the server to manage its data and post updates. Workplace Managed Client comes with its own Cloudscape relational database. After the application is fully moved to the Workplace Managed Client platform, it does not need to always have a connection to the remote database; it simply needs to connect to the local Cloudscape database. The rest of the application code does not need to be changed. Messaging and notifications Workplace Managed Client provides a full mail API for sending and manipulating mail messages. The Delivery Manager application can be altered to send a notification e-mail to a specified recipient when a report is generated. Securing a client application The IBM Workplace Client Technology platform is a secure platform that protects application data. Single sign-on with the operating system capabilities are built into the rich client by default. The local Cloudscape database is encrypted using the users credentials, which must be retrieved using the credential store API. All of these steps apply to any fully integrated Workplace Managed Client application. They are not specific to integrating an Eclipse RCP application. We cover all of these points in detail in Chapter 6, “Exploiting IBM Workplace Managed Client” on page 139. 2.6 Summary This chapter has shown how an Eclipse RCP application can be gradually merged with the Workplace Managed Client as time, finances, and resources allow. At each of the four levels of integration, we show how an Eclipse RCP application can benefit from integration with the Workplace Managed Client, what the integration points are, and what new features and services the Workplace Managed Client offers to ISVs with Eclipse applications. 2.7 URLs referenced in this chapter Table 2-6 on page 46 provides a list of the URLs referred to in this chapter. Chapter 2. ISVs with Eclipse applications 45 Table 2-6 URLs referenced in this chapter 46 What Where Information about how IBM originally developed Eclipse http://www.ibm.com/developerworks/opensour ce/top-projects/eclipse-starthere.html?ca= dgr-lnxw09 Eclipse Foundation home page http://www.eclipse.org Eclipse Rich Client Platform http://wiki.eclipse.org/index.php/Rich_Cli ent_Platform Get started with Eclipse http://www.ibm.com/developerworks/opensour ce/top-projects/eclipse-starthere.html?ca= dgr-lnxw09LearnEclipse Detailed tutorial about deploying Workplace Managed Client, the paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server, on developerWorks http://www.ibm.com/developerworks/workplac e/library/deploy-client-application-workpl ace/index.html Workplace Managed Client Developer Toolkit http://www.alphaworks.ibm.com/tech/wmctool kit Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplac e/library/wmc-toolkit-basic Working with application layouts in the IBM Workplace Managed Client, including a full description of all portlet variables http://www.ibm.com/developerworks/lotus/li brary/wmc-layouts/index.html IBM Workplace Managed Client: ISV Integration Guide 3 Chapter 3. ISVs with AWT or Swing applications This chapter introduces the steps to integrate an Abstract Windowing Toolkit (AWT) or Swing application into Workplace Client Technology's framework. This chapter addresses: The levels of integration available with IBM Workplace Client Technology High-level considerations for integrating a Swing application with Workplace Client Technology Specific examples of integration paths that can be taken © Copyright IBM Corp. 2006. All rights reserved. 47 3.1 Overview This chapter describes how an ISV can migrate an existing AWT or Swing application to the Workplace Managed Client framework. Benefits of such a migration include: Opportunity for lower total cost of ownership (TCO) because the application is server managed and provisioned Integration with other applications provided by the application switcher Leveraging the features and functionality provided by Workplace Client Technology such as its credential store, offline manager, synchronization manager, and locally encrypted databases This chapter uses a Digital Elevation Map (DEM) application, referred to as DEM Viewer. DEM Viewer maintains a table of height elevations. Users click and drag sliders to modify the image's appearance, which in turn, modifies the data on which the various elevation points are based. This chapter shows how the application changes as it is moved through the various stages of application integration. 3.1.1 What is AWT? The Abstract Windowing Toolkit (AWT) is a Java-based, platform-independent UI widget toolkit. AWT is wrapped around native UI widgets. By providing a light layer, AWT renders graphic objects, such as toolbars or buttons, quickly. However, this can be a problem if an application is going to be opened on a number of different operating systems that do not support the same widget set, for example, Microsoft Windows and Linux. AWT is designed for simple applications. 3.1.2 What is Swing? Swing is also a Java-based, graphic user interface (GUI) toolkit. It is used it to build platform-independent GUI widgets, for example, forms and dialog boxes. Unlike the Abstract Windowing Toolkit (AWT), components built using Swing are considered lightweight, meaning that instead of relying on the host system's user interface APIs, Swing mimics them. 3.1.3 What is SWT? The Standard Widget Toolkit (SWT) provides a platform-independent Java API that is tightly integrated with the operating system’s native windowing environment. It was initially developed by IBM for use with the Eclipse IDE. SWT-based Java applications have native GUIs and can be integrated with other native applications and components. To fully exploit the functionality of Workplace Managed Client, Swing or AWT applications will need to convert to SWT. 3.1.4 Swing integration levels Although both Swing and SWT are Java-based toolkits, their UI models are different. For example, they both employ different event handling mechanisms. Although integrating the two models takes work, ISVs can choose how involved they want this work to be and revisit or upgrade the model as their needs change. Table 3-1 on page 49 shows the benefits of the integration levels. 48 IBM Workplace Managed Client: ISV Integration Guide Table 3-1 The benefits of the various integration levels Increase of time, effort, and synergy → Coexist Accommodate Leverage Exploit Notepad. Launch DEM Viewer from within Workplace Managed Client. Use Workplace Managed Client UI features, such as file menus, search, and status bars. Use the document libraries, mail, single sign-on, and secure data stores that Workplace Managed Client provides. Wrap DEM Viewer as a Workplace Managed Client application. Optionally, replace some Swing or AWT UI controls with SWT. 3.2 Coexist The simplest level of integration is coexistence. This requires no changes at the code level. For example, the DEM Viewer application can be extended to store a table of elevations in a spreadsheet in the Workplace Client Technology Document Manager. Its content can be copied and pasted directly into the DEM Viewer application that runs alongside Workplace Client Technology. This makes use of the secure and central data management of the Document Manager in Workplace Client Technology to store the data for the application. This stored data, or references to it, can be e-mailed to other people using the Workplace Managed Client messaging application or can be added to an activity using a Workplace Managed Client Activity Manager application. Figure 3-1 on page 50 shows running the DEM Viewer alongside Workplace Client Technology copying data from a spreadsheet and pasting into the DEM Viewer. Chapter 3. ISVs with AWT or Swing applications 49 Figure 3-1 Running the DEM Viewer next to Workplace Client Technology Similarly, if the stand-alone application is tied to a particular file type, the files can be stored in the Workplace Managed Client document library. From within Workplace Managed Client or the browser, double-clicking those files launches the application. Its content can be edited and saved. Closing the application prompts to re-import the file changes. If new data is created for the application, the data needs to be saved to a temporary location and then imported into the Workplace Managed Client document library. With no coding work involved, the Workplace Managed Client capabilities are used to distribute and manage data viewed by the application. 3.3 Accommodate At the accommodate integration level, the application can be enhanced to use mechanisms such as provisioning, modifying the shut-down sequence, and reparenting. For the purposes of accommodating an existing AWT or Swing application, there is a quick way to bring up the application directly into Workplace Managed Client. Because most Swing and AWT applications are pure Java, they can be: Entirely included in one or more JAR files. Executed on any platform. These two conditions set the scene for using one of the most valuable features of Workplace Client Technology, provisioning. See the 2.3.1, “Lightweight integration of Eclipse RCP with Workplace Managed Client” on page 22 for information about how provisioning can be achieved manually. In 3.3.1, “Lightweight integration of a Swing or AWT application with Workplace Managed Client” on page 51, we describe how a Swing or AWT application can be 50 IBM Workplace Managed Client: ISV Integration Guide provisioned using the IBM Workplace Managed Client Developer Toolkit, which can be downloaded from: http://www.alphaworks.ibm.com/tech/wmctoolkit Note: The following sections describe actions to be performed using the IBM Workplace Managed Client Developer Toolkit on either Eclipse or IBM Rational® Application Developer. They should be installed before attempting to follow the instructions provided. 3.3.1 Lightweight integration of a Swing or AWT application with Workplace Managed Client There are two types of lightweight integration of Swing and AWT applications with Workplace Managed Client. The simplest is to use the provisioning components of Workplace Managed Client, using a simple wrapper plug-in to launch the application externally. This ensures that all the UI features of the application remain intact and that it is provisioned and installed to all users with access rights. However, it does not run within the Workplace Managed Client platform, and it is still quite clear that it is a separate application, without the same look and feel. In 3.3.2, “Creating a new IBM Workplace project” on page 51, we provide an example implementation. An alternative to launching the Swing or AWT application separately from Workplace Managed Client is to reparent its UI into the Workplace Managed Client UI in addition to provisioning the application. This means that the application will launch within the Workplace Managed Client itself and appear more like a native Workplace Managed Client application. However, it still keeps its own Swing or AWT controls. This approach takes a little more coding than the first approach, but results in a much more integrated look and feel for the application. We discuss this approach in “Reparenting a Swing or AWT application into the Workplace Managed Client UI” on page 56. In order to use the Workplace Managed Client Developer Toolkit to wrap an existing AWT or Swing application as a Workplace Managed Client application so that it can be provisioned, perform the following steps: 1. In Eclipse or Rational Application Developer, create a new IBM Workplace project with a single view. 2. Import the JAR file of the existing Swing application into the newly created plug-in project. 3. Modify the shut down sequence to remove all calls to System.exit in the existing code. 4. Display the Swing application from within the Workplace Managed Client. As mentioned earlier, there are two possible methods of doing this: – Displaying the Swing application in a separate window – Reparenting the Swing application within Workplace Managed Client We discuss these two methods individually later in this chapter. 5. Deploy the application to the Workplace Collaboration Services server. 3.3.2 Creating a new IBM Workplace project To create a new IBM Workplace project, perform the following steps: 1. Select File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. See Figure 3-2 on page 52. Chapter 3. ISVs with AWT or Swing applications 51 Figure 3-2 Creating a new IBM Workplace Eclipse project 2. Give the project a name, for example, com.ibm.wcttool.demviewer, and a Display Name, such as DEM Viewer, as shown in Figure 3-3. If there is an icon that needs to be associated with the application, you can select this in this window. Click Next. Figure 3-3 Setting the Project name and Display Name Note: The application Display Name and icon appear on the application switcher bar on the left side of Workplace Managed Client. See Figure 3-6 on page 57 for an illustration of this. 3. Choose the single view page layout and Automatically create default views, as shown Figure 3-4 on page 53. Click Finish. 52 IBM Workplace Managed Client: ISV Integration Guide Figure 3-4 Selecting the single view layout and to automatically create the default view class These steps create three new projects, a feature project, a page layout project, and a plug-in project, as shown in Figure 3-5: – The feature project, com.ibm.wcttool.demviewer, defines what plug-ins should be packaged as part of the application. – The page layout project, com.ibm.wcttool.demviewer.MainPage, manages the different pages and views (though only one of each is used in this example). – The plug-in project, com.ibm.wcttool.demviewer.pane1, contains the Eclipse view class to be placed in the single page, com.ibm.wcttool.demviewer.pane1.views.Pane1View. Feature project Page layout project Plug-in project Eclipse View class Figure 3-5 The initial project view of the IBM Workplace Managed Client application project Chapter 3. ISVs with AWT or Swing applications 53 3.3.3 Importing the Swing JAR file into the plug-in project Now that the projects are created, the JAR file of the existing application needs to be imported into the com.ibm.wcttool.demviewer.pane1 plug-in project. This is so the Pane1View class can launch the DEM Viewer application. Perform the following steps: 1. Click File → Import → File System. Browse to find the srtm.jar file. Ensure that the value in the Into Folder text box is the name of the plug-in project, com.ibm.wcttool.demviewer.pane1. 2. Click Finish. 3. Add the new JAR file to the plug-in’s class path. Use one of the following methods: – Add the text in Example 3-1 to the plugin.xml file. Example 3-1 shows a piece of the plugin.xml file for the com.ibm.wcttool.demviewer.pane1 plug-in, showing the dependency on the srtm.jar file, which contains the Swing-based DEM Viewer application. Example 3-1 A piece of the plugin.xml file //plugin.xml ... <runtime> <library name="Pane1.jar"> <!--This dependency is auto-generated by the toolkit--> <export name="*"/> </library> <library name="srtm.jar"><!-- This is the dependency on the DEM Viewer application--> <export name="*"/> </library> </runtime> – If an Open Services Gateway Initiative (OSGI) manifest was created for the plug-in (if a build.properties file exists), add the text in Example 3-2 to the build.properties file. Example 3-2 Adding the dependency on the JAR file to the build.properties file //build.properties ... jars.extra.classpath = srtm.jar 3.3.4 Modifying the shutdown sequence In order to remove all calls to System.exit in the existing code, you must modify the shut down sequence. Most stand-alone Swing and AWT applications will, at some point, call System.exit () when the application should be shut down. However, because they are now running within the Workplace Managed Client JVM™, this will cause the entire Workplace Managed Client to shut down. The cleanest way to remove these calls is to subclass the existing classes and remove the System.exit call. In the case of the DEM Viewer application, the method call occurs in the JFrame class that all the UI controls have been added to, com.ibm.wctdemo.srtm.view.SRTMFrame, in its doFrameShut method. In the original Swing application, an instance of the SRTMFrame class would be created and used to contain all of the Swing UI controls. Now this class will be subclassed, and the child class will be invoked instead of the parent class. 54 IBM Workplace Managed Client: ISV Integration Guide Example 3-3 shows how the DEMView1Frame class was created for this purpose: The DEMView1Frame class subclasses the original JFrame implementation, SRTMFrame, and overrides the doFrameShut method in order to remove the System.exit() method. Example 3-3 The DEMView1Frame class //DEMView1Frame.java package com.ibm.wctdemo.awtint.step1.views; import com.ibm.wctdemo.srtm.logic.SessionLogic; import com.ibm.wctdemo.srtm.view.SRTMFrame; public class DEMView1Frame extends SRTMFrame{ private static final long serialVersionUID = -1711774321572959L; //Override the method containing the System.exit method call protected void doFrameShut(){ //This is all existing code from the DEM Viewer application SessionLogic.endSession(getSession()); setVisible(false); //Comment out the System.exit(0) call //System.exit(0); } } In some cases, it might not be possible to simply subclass the class containing the System.exit() call, and in those cases, it is necessary to alter the source code to remove those lines. 3.3.5 Displaying the Swing/AWT application within Workplace Managed Client As mentioned previously, there are two options to be considered when deciding how to display a Swing or AWT application using the Workplace Managed Client: Displaying the Swing application in a separate window Reparenting the Swing application within the Workplace Managed Client Displaying a Swing or AWT application in a separate window To display a Swing or AWT application in a window outside the Workplace Managed Client workspace, modify the setFocus method of the Eclipse view created by the toolkit Pane1View. When the Eclipse view receives the focus, it creates the JFrame if it has not already done so and makes sure that it is visible. Also, when the Eclipse view is disposed, it disposes the JFrame. Example 3-4 shows how this was done for the DEM Viewer application. Example 3-4 Eclipse view for launching a stand-alone Swing or AWT application //Pane1View.java package com.ibm.wcttool.demviewer.pane1.views; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; public class Pane1View extends ViewPart { private DEMView1Frame mFrame; public Pane1View() {} public void createPartControl(Composite parent) {} Chapter 3. ISVs with AWT or Swing applications 55 public void setFocus() { //Create a new frame if it has not been previously created, or is no longer valid if ((mFrame == null) || !mFrame.isValid()){ mFrame = new DEMView1Frame(); } if (mFrame.isVisible()){ mFrame.toFront(); } else{ mFrame.setVisible(true); } } public void dispose(){ super.dispose(); if(mFrame != null){ //dispose of the frame when the Eclipse view is disposed mFrame.dispose(); mFrame = null; } } } Reparenting a Swing or AWT application into the Workplace Managed Client UI In the spectrum of application integration, having an application appear in a separate window is relatively simple to program but does not present the best user experience. The better option is to have the application appear inside the Workplace Managed Client framework. Normally, an application resides within a frame, or JFrame for Swing, and all subsidiary controls reside in that frame. SWT provides a utility function that enables a Swing frame to be embedded inside of a SWT composite object; this is the SWT equivalent of panel or JPanel. For the DEM Viewer, the application's frame will be imbedded inside the main control for a view. This is known as reparenting. Figure 3-6 on page 57 shows the DEM Viewer application reparented within Workplace Managed Client. 56 IBM Workplace Managed Client: ISV Integration Guide Workplace Managed Client application switcher Figure 3-6 The DEM Viewer reparented within an Eclipse view Reparenting is more complex than just simply wrapping the Swing or AWT application for provisioning. The utility function SWT provides does not allow an application to place just any frame inside a composite. Instead, it passes the SWT_AWT class a Composite and it returns back a Frame. Anything added to this frame appears inside the composite. Architecturally, this method might differ from the way that many Swing and AWT applications are built, and some restructuring might be required. One way to restructure a Swing or AWT application is to re-create the top level Frame object inside a Panel or a JPanel. Typically, it is feasible to copy the code completely from the original frame to this new panel. This will probably work for about 90% of the code in the frame. The other 10% uses features only available from a frame. The code in Example 3-5 shows a complete Eclipse view class wrapping an AWT Frame object. Example 3-5 An Eclipse view wrapping a an AWT Frame object //Pane1View.java package com.ibm.wcttool.demviewer.pane1.views; import java.awt.BorderLayout; import java.awt.Frame; import import import import import org.eclipse.swt.SWT; org.eclipse.swt.awt.SWT_AWT; org.eclipse.swt.layout.GridLayout; org.eclipse.swt.widgets.Composite; org.eclipse.ui.part.ViewPart; public class Pane1View extends ViewPart { private static Frame mFrame; private static DEMViewPanel2 mPanel; Chapter 3. ISVs with AWT or Swing applications 57 public Pane1View() {} public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, true)); //Create a new Composite which will contain the AWT frame. //Note: The style SWT.EMBEDDED should be used when creating this composite Composite client = new Composite(parent, SWT.EMBEDDED); GridUtils.setLayoutData(client,"fill=hv"); //Create a new AWT frame using the SWT utility class, SWT_AWT //passing in the Composite that will contain that frame mFrame = SWT_AWT.new_Frame(client); mFrame.setLayout(new BorderLayout()); //Create the new AWT Panel, passing in the frame to its constructor mPanel = new DEMViewPanel2(mFrame); mFrame.add("Center", mPanel); } public void setFocus() { mFrame.requestFocusInWindow(); } } In the DEM Viewer example application, there are two instances where a frame is required. First, passing a frame to an internal variable by adding a WindowListener to perform a special setup and cleanup and to capture when the frame is invoked and dismissed. Instead of adding the listener to the class in which the code is, it is added to the passed-in frame. Example 3-6 shows the difference between the old and new methods of adding WindowListeners to the Frame. Example 3-6 Difference between the old and new methods for adding WindowListeners to the Frame //Old code //SRTMFrame.java this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { doFrameShut(); public void windowOpened(WindowEvent e) { doFrameStart(); } ); //New Code //DEMViewPanel2.java mFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { doFrameShut(); public void windowOpened(WindowEvent e) { doFrameStart(); } ); } } } } Note: The Frame passed back does not behave exactly the same as a normal AWT frame. Some events might not occur as expected. Be sure to test for all conditions, or integrate more fully, for example, expose the methods that the event listeners are calling, and then trap the SWT equivalent message in the view and call the exposed functionality. In the second instance, the original application is Swing based and uses a JFrame, not a Frame. Menus are created then attached to a JMenuBar, which is then added to the JFrame. Although a JMenuBar cannot be added to a Frame, in Swing, a JMenuBar is a control and can be 58 IBM Workplace Managed Client: ISV Integration Guide added to a JPanel. If the JFrame has already been migrated to a JPanel, add the JMenuBar like a normal control to the top of the JPanel. Figure 3-7 shows this. Duplicated Menus Duplicate Status Bars Figure 3-7 The DEM Viewer application In an AWT-based application, it might be more complicated, because adding menus to the Frame created by SWT_AWT is not displayed. In addition, it is worth noting that when adding a JMenuBar to a JPanel, the menus do not appear in the top menu bar. Instead, they are duplicated within the Eclipse view, as shown in Figure 3-7. The status bar has also been duplicated. For a more seamless integration, where UI features such as menu bars and status bars are reused rather than duplicated, see the next level of integration in 3.4, “Leverage” on page 60. 3.3.6 Deploying the application to Workplace Collaboration Services server For instructions about how to export and deploy a Workplace Managed Client application to the Workplace Collaboration Services server, follow the instructions in the white paper Creating an application with the IBM Workplace Managed Client Developer Toolkit, available at: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Information is also provided by the Workplace Managed Client Developer Toolkit, accessible through Eclipse by clicking Help → Help Contents → IBM Workplace Managed Client Tool for Eclipse → Distributing applications and following the instructions. After completing this, the application will be fully deployed to the server and will be provisioned down the next time the Workplace Managed Client is loaded. An alternative to doing a full deployment to a server is to test the application locally, using the IBM Workplace Managed Client Developer Toolkit. The Creating an application with the IBM Workplace Managed Client Developer Toolkit white paper also contains detailed instructions about how to test a Workplace Managed Client application without deploying it to a Workplace Collaboration Services server. Chapter 3. ISVs with AWT or Swing applications 59 3.4 Leverage Applications that more fully leverage the features of Workplace Managed Client provide a more rich and uniform user experience and gain increased functionality and usability. Features that the Workplace Managed Client provides include: Workplace Managed Client menus Workplace Managed Client status bar Enabling server-side definition of an application’s view layout by creating one portlet per view Action bars, used to replace view toolbars Search bar Custom UI widgets – Rich text editor – Alerts – Collapse bar Custom views – Shelf views We discuss the first three of these, menus, status bar, and centralized management of an application’s layout, in the following sections. We discuss all of the remaining features in 2.4, “Leverage” on page 30. Note: The steps explained in each of the following sections assume that you have already created an IBM Workplace application, as described in 3.3.1, “Lightweight integration of a Swing or AWT application with Workplace Managed Client” on page 51. Also, we assume that you created a view class that uses the utility function that SWT provides for Swing or AWT application integration, as described in Example 3-5 on page 57. We also assume that you have read through and performed the Workplace Managed Client application configuration and provisioning steps described in 3.3.1, “Lightweight integration of a Swing or AWT application with Workplace Managed Client” on page 51. 3.4.1 Contributing to the Workplace Managed Client menus The utility function that SWT provides for Swing or AWT application integration is a quick and easy way to have the DEM Viewer application appear within the Workplace Client Technology workspace. However, using this method means that some Workplace Client Technology UI features, such as the Workplace Client Technology context menus, are included and the application might appear with duplicate UI features, which does not present the best user experience. As shown in Figure 3-7 on page 59, in the Accommodate section, the File and Edit menus are duplicated when the DEM Viewer application was reparented within the Workplace Managed Client. You can integrate the menu with Workplace Managed Client in one of the following ways: The menus can be integrated using existing Workplace Managed Client menu IDs. The menus can entirely replace the existing default Workplace Client Technology menus. 60 IBM Workplace Managed Client: ISV Integration Guide Menus integrated with Workplace Managed Client menu bar using existing Workplace Managed Client menu IDs Integrating Swing or AWT application menus with the Workplace Managed Client menu bar requires mapping application-specific menus to specific Workplace Managed Client menu IDs. The IWorkplaceActionConstants class defines the Workplace Managed Client menu IDs. Table 3-2 shows some of these. Table 3-2 Menu IDs defined in the IWorkplaceConstants class Constant value Reference in menu tag as FILE_MENUID = “file” IWorkbenchActionConstants.M_FILE path=“additions” and id=“file” EDIT_MENUID = “edit” IWorkbenchActionConstants.M_EDIT path=“edit/<submenutitle>” and id=“<customString> WINDOW_MENUID = “window” IWorkbenchActionConstants.M_WINDOW HELP_MENUID = “help” IWorkbenchActionConstants.M_HELP id=“help” A complete listing of all available menu items is available in the Workplace Collaboration Services 2.5.1 API documentation and also available in Appendix B, “IBM Workplace 2.5.1 menu IDs” on page 185. Figure 3-8 shows the Swing-based DEM Viewer application menu integration with the Workplace Managed Client menu bar. DEM Viewer File -> Open menu Figure 3-8 DEM Viewer Open menu integrated with Workplace Managed Client menu bar Chapter 3. ISVs with AWT or Swing applications 61 Follow these steps to integrate the Swing or AWT menus with the Workplace Managed Client menu bar: 1. Create an Eclipse action class in the Eclipse plug-in, created in 3.3.2, “Creating a new IBM Workplace project” on page 51, to accommodate the Swing or AWT application within Workplace Managed Client. Note: The Eclipse action class must implement the IWorkbenchWindowActionDelegate interface. 2. Copy the invoking code from the Swing listener class into the run() method of an inline created Thread class. The resulting class looks similar to the DEMFileOpenAction class in Figure 3-8 on page 61, which creates a new Thread object to open a JFileChooser dialog box. Separate threads are necessary because of conflicts that result from the different threading models used by Swing and SWT. Direct calls from a SWT thread to a Swing thread (and vice versa) are problematic. If it is necessary for the SWT code to wait for the Swing code to terminate before proceeding, a simple wait/notify mechanism can be used, as shown in Example 3-7. Example 3-7 Partial implementation of an Eclipse action class import com.ibm.wctdemo.awtint.step3.DEMViewPanel3; import com.ibm.wctdemo.awtint.step3.DEMView3; ... public class DEMFileOpenAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public DEMFileOpenAction() { } public void run(IAction action) { Thread thread = new Thread(){ public void run() { // get the Swing JPanel instance DEMViewPanel3 mPanel = DEMView3.getMPanel(); mPanel.doFileOpen(); //notify the enclosing class instance that the thread has finished executing DEMOpenAction.this.notify(); } }; thread.start(); try { //wait until the thread has finished executing this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { } public void init(IWorkbenchWindow window) { this.window = window; } 62 IBM Workplace Managed Client: ISV Integration Guide Important Note: Using the syncExec() or asyncExec() functions on the SWT Display class to get the Swing or AWT code to run in the SWT thread or using Thread.join() for synchronization can cause UI threading issues. Rather than using these methods, use a simple wait/notify mechanism. 3. The DEMFileOpen action calls the implementation of the doFileOpen() inline method in the DEMViewPanel3 class, as shown in Example 3-8. Example 3-8 The partial implementation of DEMViewPanel.java //DEMViewPanel3.java import javax.swing.JFileChhoser; import javax.swing.JPanel; mport com.ibm.wctdemo.srtm.view.SRTMFrame; import com.ibm.wctdemo.srtm.view.SRTMPanel; //... public class DEMViewPanel3 extends JPanel implements PropertyChangeListener{ private Frame mFrame; private SRTMPanel mPanel; private SRTMSession mSession; public DEMViewPanel3(Frame frame){ mFrame = frame; mStatus = new JLabel(); setLayout(new BorderLayout()); mPanel = new SRTMPanel(); add("Center", mPanel); setSize(640, 480); mFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { doFrameShut(); } public void windowOpened(WindowEvent e) { doFrameStart(); } }); setSession(SessionLogic.startSession()); } public void doFileOpen(){ JFileChooser chooser = new javax.swing.JFileChooser(); chooser.setApproveButtonText("Open"); int returnVal = chooser.showOpenDialog(this); if (returnVal != javax.swing.JFileChooser.APPROVE_OPTION){ return; } String fname = chooser.getSelectedFile().getAbsolutePath(); try { FileLogic.loadMap(mSession, fname); } catch (IOException e){ SessionLogic.setStatus(mSession, e.toString()); } } //... } Chapter 3. ISVs with AWT or Swing applications 63 4. Modify the plugin.xml file of the Eclipse plug-in project in order to create the org.eclipse.ui.actionSets extensions. Example 3-9 shows the Eclipse plugin.xml file with an org.eclipse.ui.actionsets extension point definition. Note: Action sets specify and organize the menu items being added into groups. Example 3-9 Partial plugin.xml file for DEM Viewer with org.eclipse.ui.actionsets extension point <plugin> <extension point="org.eclipse.ui.actionSets"> <actionSet label="Sample Action Set" visible="true" id="com.ibm.wctdemo.awtint.step3.menus.actionSet"> <action label="&amp;DEM File Open" icon="icons/sample.gif" class="com.ibm.wctdemo.awtint.step3.menus.actions.DEMOpenAction" menubarPath="file/fileOpenGroup" id="com.ibm.wctdemo.awtint.step3.menus.actions.DEMOpenAction"> </action> </actionSet> </extension> ... </plugin> Note: To learn more about the org.eclipse.ui.actionsets extension point, see: http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/guide /workbench_basicext_actionSets.htm 5. Map the Action id parameter shown in Example 3-9 to the application-specific activity pattern. This is required only when ISVs do not want the Swing or AWT application-specific menus to be visible in rest of the Workplace Managed Client applications. For example, you might want the File → Open DEM menu to be globally visible so that the user can open a DEM file from any context. But the File → Save DEM menu should only be visible when user is viewing a DEM application. Example 3-10 shows the sample Eclipse plugin.xml file with the Eclipse activities extension point defined. Example 3-10 Partial plugin.xml file showing mapping of Eclipse action ID with Eclipse activity pattern <plugin> <extension point="org.eclipse.ui.activities"> <activity description="This is srtm activity" name="com.ibm.workplace.srtm.activity" id="com.ibm.workplace.srtm.activity"/> <activityPatternBinding activityId="com.ibm.workplace.srtm.activity" pattern="com\.ibm\.wctdemo\.awtint\.step3\.menus/ com\.ibm\.wctdemo\.awtint\.step3\.menus\..*" /> </extension> ... <plugin> 64 IBM Workplace Managed Client: ISV Integration Guide Note: The mapping is performed using a activityPatternBinding. For more information, refer to: http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/refer ence/extension-points/org_eclipse_ui_activities.html 6. Configure and provision the Eclipse plug-in from the Workplace server. See 3.3, “Accommodate” on page 50 for more details about application configuration and provisioning. Menus that entirely replace existing default Workplace Client Technology menus An alternate method for integrating Swing or AWT application menus with Workplace Managed Client is to replace the existing Workplace Managed Client menus such as File and Edit with the application-specific menus. Note: Take care when replacing existing Workplace Managed Client platform menus. Some menus such as Edit → Copy are context dependent. It makes sense to replace this menu when the application’s context is in control. Other menus such as File → Open are active for all contexts. We strongly discouraged modifying these because other Workplace Managed Client applications might depend on these menus and their functionality can be affected as a consequence. Workplace Managed Client File -> Open menu replaced with DEM Viewer menu Figure 3-9 Workplace Managed Client Open menu replaced with DEM Viewer Open menu To create a menu that replaces an existing menu, you need to create an inline Eclipse action class within an Eclipse view class. The view class is stored within an Eclipse plug-in. For the DEM Viewer example, the DEMFileOpenAction class, created in Example 3-7 on page 62, is created within the DEMViewPanel3.java class created in Example 3-8 on page 63. Chapter 3. ISVs with AWT or Swing applications 65 Follow these steps to replace the default Workplace Client Technology menus for the Swing or AWT application: 1. Create an Eclipse action class by copying the code from the Swing listener into an inline Eclipse action class. Example 3-11 shows the sample Eclipse view class with an inline Eclipse action class defined to open the javax.swing.JFileChooser dialog box. Note: The action class, DEMFileOpenAction, was created in Example 3-7 on page 62 to display the Swing or AWT application within Workplace Managed Client. Example 3-11 Partial implementation of DEMView3.java class with inner action class //DEMView3.java import java.awt.BorderLayout; import java.awt.Frame; import import import import import import ... org.eclipse.jface.action.Action; org.eclipse.swt.SWT; org.eclipse.swt.awt.SWT_AWT; org.eclipse.swt.layout.GridLayout; org.eclipse.swt.widgets.Composite; org.eclipse.ui.part.ViewPart; public class DEMView3 extends ViewPart{ private Frame mFrame; private DEMViewPanel3 mPanel; public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, true)); Composite client = new Composite(parent, SWT.EMBEDDED); GridUtils.setLayoutData(client, "fill=hv"); mFrame = SWT_AWT.new_Frame(client); mFrame.setLayout(new BorderLayout()); mPanel = new DEMViewPanel3(mFrame); Action openAction = new Action() { public void run(){ Thread thread = new Thread(){ public void run() { mPanel.doFileOpen(); DEMView3.this.notify(); } }; thread.start(); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }; //... } ... } 66 IBM Workplace Managed Client: ISV Integration Guide Example 3-8 on page 63 shows the actual implementation for the inline method doFileOpen() of class DEMViewPanel3. 2. Call the setGlobalActionHandler() method on the action bar attached to the view site and pass it the ID of the action just created. The Eclipse view class shown in Example 3-11 on page 66 is modified in order to set the Eclipse global action handler. Note: Example 3-12 shows the partially implemented Eclipse view class that replaces the existing Workplace Managed Client File → Open menu with the DEM Viewer specific File → Open menu. Example 3-12 The partial implementation of Eclipse View class to set the Eclipse global action handler import java.awt.BorderLayout; import java.awt.Frame; import org.eclipse.jface.action.Action; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; ... public class DEMView3 extends ViewPart{ private static Frame mFrame; private static DEMViewPanel3 mPanel; public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, true)); Composite client = new Composite(parent, SWT.EMBEDDED); GridUtils.setLayoutData(client, "fill=hv"); mFrame = SWT_AWT.new_Frame(client); mFrame.setLayout(new BorderLayout()); mPanel = new DEMViewPanel3(mFrame); //create a new Action class Action openAction = new Action() { public void run(){ mPanel.doFileOpen(); } }; //replace the global action handler with the DEM Viewer action handler getViewSite().getActionBars().setGlobalActionHandler( "com.ibm.rcp.ui.filemenu.open", openAction); //... } //... } Table 3-2 on page 61 shows the menu IDs to replace the existing Workplace Managed Client menus with Swing or AWT application-specific menus. 3. Deploy the Eclipse plug-in to a Workplace Collaboration Services server and provision it down to a client machine. Chapter 3. ISVs with AWT or Swing applications 67 Note: See 3.3.6, “Deploying the application to Workplace Collaboration Services server” on page 59 for more details about application configuration and provisioning. Alternatively, launch the application locally using the Workplace Managed Client Developer Toolkit. The following paper contains full instructions about how to do this: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic 3.4.2 Status bar integration The Swing-based DEM Viewer application uses its own status bar rather than the standard Workplace Managed Client status bar. Figure 3-7 on page 59 shows this in the Accommodate section. SWT provides a utility function to integrate Swing and AWT applications; it is a quick way to have the DEM Viewer application appear within the Workplace Client Technology context. However, using the utility also means that Workplace Client Technology UI features, such as the Workplace Managed Client status bar, might appear more than once. If all that is needed is a text-only status bar, it is relatively straightforward to create a Workplace Managed Client status bar. In the status message handling code, an IStatusBarManager must be retrieved and the text passed to it instead of the Swing status bar control. The IStatusBarManager can be retrieved from a variety of locations using Eclipse APIs. In the DEMViewer example, IStatusBarManager was retrieved from the Eclipse ViewSite attached to the ViewPart. A property was created for it on the main panel; this is where the status handling code is kept. The view initialization makes the connection. Figure 3-10 shows Swing-based DEM Viewer application with and application-specific status message displayed on Workplace Managed Client status bar. SWT application status message displayed on Workplace Managed Client status bar Figure 3-10 Swing-based DEM Viewer application with status messages 68 IBM Workplace Managed Client: ISV Integration Guide Note: This Swing-based DEM Viewer example displays the application-specific status messages on Workplace Managed Client status bar. In a more complicated example, where the status bar contains several other controls for displaying different types of information or buttons to invoke other actions, it is necessary to convert those controls to SWT. They can then be added as contributors to the system status bar. To set the text into the Workplace Managed Client status bar, perform the following steps: 1. Modify the Eclipse ViewPart in the Eclipse plug-in that was created in Example 3-7 on page 62 to display the Swing or AWT application within the Workplace Managed Client. Use the same view class created in Example 3-11 on page 66. Note: Setting the Eclipse StatusLineManager for the JPanel implementation displays the application status message on the Workplace Managed Client status bar rather than on a custom status bar. Example 3-13 shows the Eclipse view class modified in order to set the Eclipse StatusLineManager for a Jpanel instance. Example 3-13 The partial implementation of Eclipse view class to set StatusLineManager //DEMView3.java import java.awt.BorderLayout; import java.awt.Frame; import org.eclipse.jface.action.Action; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import com.ibm.wctdemo.awtint.step3.DEMViewPanel3; import com.ibm.wctdemo.awtint.step3.Step3Plugin; //... public class DEMView3 extends ViewPart{ private Frame mFrame; private DEMViewPanel3 mPanel; public void createPartControl(Composite parent){ parent.setLayout(new GridLayout(1, true)); Composite client = new Composite(parent, SWT.EMBEDDED); GridUtils.setLayoutData(client, "fill=hv"); mFrame = SWT_AWT.new_Frame(client); mFrame.setLayout(new BorderLayout()); mPanel = new DEMViewPanel3(mFrame); mFrame.add("Center", mPanel); Step3Plugin.getDefault().setSession(mPanel.getSession()); //retrieve the statusLineManager and store it mPanel.setStatusLineManager(getViewSite().getActionBars().getStatusLineManager()); //... } //... } 2. Remove the JLabel that acted as the Swing status bar. Chapter 3. ISVs with AWT or Swing applications 69 Note: Updates to status messages are triggered by a property changing on the session object. A listener is registered to listen for property change events and must be rerouted to fill the IStatusBarManager object instead of JLabel. At this point, it is no longer needed. Make these changes in the DEMViewpanel3 class shown in Example 3-8 on page 63. Example 3-14 shows the implementation for the DEMViewPanel3 class that is called from DEMView3 action. Example 3-14 Partial implementation of DEMViewPanel3.java with JPanel status message integration import javax.swing.JPanel; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.swt.SWT; import com.ibm.wctdemo.srtm.view.SRTMFrame; import com.ibm.wctdemo.srtm.view.SRTMPanel; public class DEMViewPanel3 extends JPanel implements PropertyChangeListener{ private Frame mFrame; private SRTMPanel mPanel; private SRTMSession mSession; private IStatusLineManager mStatusLineManager; public DEMViewPanel3(Frame frame){ mFrame = frame; /* this was used before WMC StatusLine integ mStatus = new JLabel(); */ setLayout(new BorderLayout()); mPanel = new SRTMPanel(); add("Center", mPanel); setSize(640, 480); mFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { doFrameShut(); } public void windowOpened(WindowEvent e) { doFrameStart(); } }); //start a new session, which will be used to notify listeners of changes //to generic properties setSession(SessionLogic.startSession()); } public void setSession(SRTMSession session){ if (mSession != null){ mSession.removePropertyChangeListener(this); } mSession = session; mPanel.setSession(mSession); if (mSession != null){ //register this class as a listener on the session object mSession.addPropertyChangeListener(this); } } 70 IBM Workplace Managed Client: ISV Integration Guide //this method is called by the Session object when a property change event is fired public void propertyChange(PropertyChangeEvent ev){ /* was used before integrating with WMC StatusBar if (ev.getPropertyName().equals("status")){ mStatus.setText(mSession.getStatus()); doLayout(); }*/ if (ev.getPropertyName().equals("status")){ Display.getDefault().asyncExec(new Runnable(){ public void run() { mStatusLineManager.setMessage(mSession.getStatus()); doLayout(); } }); } } public IStatusLineManager getStatusLineManager(){ return mStatusLineManager; } public void setStatusLineManager(IStatusLineManager statusLineManager){ mStatusLineManager = statusLineManager; } //... } Note: Code in an AWT or Swing thread cannot directly invoke methods on SWT objects because they use different threading models. Instead, all code must be invoked using either the Display.syncExec() or Display.asyncExec() methods. 3. Deploy the Eclipse plug-in to the Workplace server and provision it down to a client machine. See 3.3.6, “Deploying the application to Workplace Collaboration Services server” on page 59 for more details about application configuration and provisioning. 3.4.3 Defining one portlet per view In 3.3, “Accommodate” on page 50, we modified the Swing-based DEM Viewer application to take advantage of the Workplace Managed Client provisioning engine. The application was wrapped in a single Eclipse view and automatically defined as a single portlet when deployed on the Workplace Collaboration Services server using the mechanisms supplied by the Workplace Managed Client Developer Toolkit. This approach does not take advantage of more powerful capabilities of Workplace Managed Client such as centralized management of a client application’s layout. You can achieve this functionality by separating an application into multiple Eclipse views and arranging the layout of those views using the Developer Toolkit’s Page Layout Editor. See Figure 3-12 on page 73. With one portlet per view, ISVs can also control layout based on roles. After this has been done, layout modifications to the application can be handled by non-technical users on the Workplace Collaboration Services server, with the changes being automatically propagated to all users. Chapter 3. ISVs with AWT or Swing applications 71 Note: Administrator access is required to alter the layout of an application. Rearranging a Swing user interface using multiple Eclipse views To enable centralized management of an application’s layout, partition the user interface into multiple Eclipse views, arranging the various controls into their logical groupings. The DEM Viewer application can be arranged into two logical groups: User controls Graphical display Create a Swing JPanel instance for each group of controls and integrate it with the Workplace Managed Client application using an Eclipse view, as described in “Reparenting a Swing or AWT application into the Workplace Managed Client UI” on page 56. Creating a page layout project with multiple Eclipse views Perform the following steps to create a new IBM Workplace project: 1. In the Eclipse IDE, select File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. See Figure 3-2 on page 52. 2. Give the project a name, for example, com.ibm.wcttool.demviewer, and a Display Name, for example, DEM Viewer, as shown in Figure 3-3 on page 52. Select an icon to be associated with the application if necessary. Click Next. 3. Choose the two-pane view page layout highlighted in Figure 3-11. Make sure that the Automatically create default views option is not selected. Click Next. Figure 3-11 Selecting two-pane view and not automatically creating the default views 4. At this point, the application plug-in with the two views should be already present in the Eclipse workspace. Now, select the views that will be inserted into each of the place holders in the page layout. To do this: a. Click Browse Workspace. b. Choose the ID of the view to be placed in the layout. Click Next. c. Repeat step b for each view to be added to the page layout, and click Finish. This creates a page layout project, which can be manipulated using the Page Layout Editor, as shown in Figure 3-12 on page 73. 72 IBM Workplace Managed Client: ISV Integration Guide Figure 3-12 Page Layout Editor with two views arranged vertically 5. Specify the desired configuration parameters for each view using the Page Layout Editor. Table 2-3 on page 33 describes the available parameters. For a full description of all portlet variables, see: http://www.ibm.com/developerworks/lotus/library/wmc-layouts/index.html For the DEM Viewer sample, set the style parameter for the bottom view to NO_TITLE. This removes the title bar from the view. 6. Deploy the Workplace Managed Client application to the Workplace Collaboration Services server and provision it down to a client machine. Figure 3-13 on page 74 shows the Swing-based DEM Viewer application with separate Eclipse views provisioned to a client’s desktop. Chapter 3. ISVs with AWT or Swing applications 73 Eclipse View with Swing Slider Controls Eclipse View with Swing Graphics Control Figure 3-13 DEM Viewer application with multiple Eclipse views, arranged using a page layout 3.4.4 Converting Swing or AWT controls to SWT For complete user interface integration with the Workplace Managed Client, at some point all controls should be converted to SWT. This does not have to be done immediately. As seen in this chapter, a fully working application can be integrated in Workplace Managed Client with a minimal use of SWT. However, there are several compelling reasons to build and modify the Swing-based applications with the full integration in mind: From a visual standpoint, full integration removes a disconnect between the Swing or AWT interface and the SWT interface. The integrated application would appear the same as the rest of the platform. Attributes set globally by the platform, such as colors, fonts, and other “skin” elements, can be unintentionally inherited by Swing-based application. Doing an additional pass to render everything in SWT allows for the original richness to be reestablished. As explained earlier in this chapter, the differences in threading event models might also cause complications. Not all of these are readily apparent. When fully converted over to SWT, all the code resides in one model, and there are no interaction errors. From a functional standpoint, the Swing-based application integrated with SWT will perform faster and with less errors. The SWT libraries are based on native platform libraries, which are generally faster and less memory hungry than AWT and Swing. SWT gives the applications raw components for UI rendering. On top of that are JFace components that provide more abstract methods of dealing with certain, usually list-based, components. AWT/Swing contains a subset of the features of both solutions. If the original application was written using the model view controller (MVC) design pattern, it is not hard to replace just the view layer. The conversion process is relatively straightforward. 74 IBM Workplace Managed Client: ISV Integration Guide Notes: To learn more about Eclipse, see: http://www.eclipse.org/ To learn more about Eclipse SWT, see: http://www.eclipse.org/swt 3.5 Exploit As stated in the introduction, complete seamless integration occurs as an ISV chooses to fully exploit the capabilities of Workplace Managed Client. For example, if writing plug-ins that are more than simple wrappers, most or even all of the code is structured to the Workplace programming model in order to exploit the client technologies fully. By employing the APIs and available models, an ISV can write a matched set of portlets, plug-ins, EJB services, and data source definitions that take full advantage of all attributes of the IBM Workplace Client Technology infrastructure. Application components that are written in this manner gain several benefits, for example, the ability to dynamically share capabilities such as online awareness, and participate in spanning services, such as full text indexing. In most cases, ISVs that have existing applications or components are expected to gradually extend into this space as they match needs and requirements to the appropriate programming model constructs. Workplace Managed Client provides a number of features that enable an ISV to extend its application in very powerful ways: Document libraries for remote storage and document sharing Workplace Managed Client document libraries consist of both local and remote storage in a folder structure for sharing documents among a group or team. Workplace Managed Client provides an API for manipulating files and folders in a document library. Online awareness There is a online/offline awareness API that can be used to inform an application when the client is online, offline, or when it is about to transition between the two. This can be useful for completing transactions if connectivity is about to change and close down open connections. After the operation has completed, the connection to the database can be reestablished. Synchronizing client application data There is an API that taps into the client's synchronization framework. Based on timetables set in the client’s preferences, the application can be informed of when to synchronize its data. The actual data synchronization is performed by the application itself. Database access, both local and remote Workplace Managed Client comes with its own Cloudscape relational database. After the application is fully moved to the Workplace Managed Client platform, it does not need to always have a connection to the remote database; it simply needs to connect to the local Cloudscape database. The rest of the application code does not need to be changed. Messaging and notifications Workplace Managed Client provides a full mail API for sending and manipulating mail messages. Chapter 3. ISVs with AWT or Swing applications 75 Securing a client application The IBM Workplace Client Technology platform is a secure platform that protects application data. Single sign-on with the operating system capabilities are built into the rich client by default. The local Cloudscape database is encrypted using the users’ credentials, which must be retrieved using the credential store API. All of these features apply to any fully integrated Workplace Managed Client application. They are not specific to integrating an existing Swing or AWT application. We cover all of these points in detail in Chapter 6, “Exploiting IBM Workplace Managed Client” on page 139. 3.6 Summary This chapter has shown how an existing Swing or AWT application can be gradually merged with the Workplace Managed Client as time, finances, and resources allow. At each of the four levels of integration, we describe how a Swing or AWT application can benefit from an integration with Workplace Managed Client, what the integration points are, and what new features and services Workplace Managed Client offers to ISVs. 3.7 URLs referenced in this chapter Table 3-3 lists the URLs referred to in this chapter. Table 3-3 List of URLs referred to in this chapter 76 What Where IBM Workplace Managed Client Developer Toolkit http://www.alphaworks.ibm.com/tech/wmctool kit Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplac e/library/wmc-toolkit-basic To learn more about org.eclipse.ui.actionsets extension points http://help.eclipse.org/help31/index.jsp?t opic=/org.eclipse.platform.doc.isv/guide/w orkbench_basicext_actionSets.htm Information about mapping using an activityPatternBinding http://help.eclipse.org/help31/index.jsp?t opic=/org.eclipse.platform.doc.isv/referen ce/extension-points/org_eclipse_ui_activit ies.html Full description of portlet variables http://www.ibm.com/developerworks/lotus/li brary/wmc-layouts/index.html IBM Workplace Managed Client: ISV Integration Guide 4 Chapter 4. ISVs with Web and portal applications This chapter describes the various options for integrating Web and portal applications with the IBM Workplace Client Technology framework. We explain how, with very little effort or coding, Web and portal applications can take advantage of features such as: Wrapping a Web or portal application as an Eclipse application Authentication Web Services for Remote Portlets © Copyright IBM Corp. 2006. All rights reserved. 77 4.1 Overview This chapter discusses how a Web or portal application can take advantage of the features offered by the Workplace Managed Client. These include: Wrapping a Web application as a Workplace Managed Client application in order to present it in the same manner as all other applications in the platform. This removes the shift in context necessary for traditional Web-based applications where, for example, a user would have to go from a separate Web browser to a word processor, both of which are completely disconnected. In this case, they all run on the same platform, and all are simply applications that the user can use to perform their job with no distinction being made between them. Automatic authentication with the Web or portal server. Using the Workplace Managed Client as a Web Services for Remote Portlet consumer. 4.1.1 What are Web and portal applications? Web and portal applications are applications that run on an application or portal server. The user interface (UI) is rendered in a Web browser on the client machine. This type of application provides excellent reach and a low total cost of ownership compared to the expense of a rich native UI and experience. 4.1.2 What is WSRP? Web Services for Remote Portlets (WSRP) is a Web services standard that allows for the plug-and-play of portals, other intermediary Web applications that aggregate content, and applications from disparate sources. For more information about WSRP, see: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp 4.1.3 Web and portal integration levels Trade-offs must be made between how quickly an existing application can be deployed on a new platform and how well it can be integrated with that platform. This chapter describes how the Workplace Managed Client can be used to access portal applications. Multiple techniques are explained for accessing applications at different levels of integration. This includes the embedded Web browser to access Workplace Collaboration Services and WSRP to access JSR 168 portlets. We use the different techniques to explain the various stages of application integration. Table 4-1 on page 79 lists the benefits of the various integration levels and provides some examples of their application. 78 IBM Workplace Managed Client: ISV Integration Guide Table 4-1 The benefits of the various integration levels Increase of time, effort, and synergy → Coexist Accommodate Leverage Exploit Minimal to no development effort. Simple but effective blended user experience. Client management frameworks (HTTP authentication). Separate browser, interact using copy/paste and file storage. Component provisioning by policy. Exploitation of rich repository spanning services, UI components, and business components. Displayed in embedded browser. Authentication with Web or portal platform. Custom WSRP viewer and producer. Use document libraries, mail notification, data store, synchronization, and so on. Provisioned WSRP portlets. 4.2 Coexist The simplest level of integration is coexistence. This requires no changes at the code level. The application runs on the client’s desktop through a browser, just as it always has. Web and portal applications are accessed in a browser and operations such as copying to the clipboard can be used to share information. Two coexist integration options are: A separate browser can be launched from the user's desktop. The Workplace Managed Client can launch an embedded Web browser that provides access to the applications. Figure 4-1 on page 80 shows an application that is launched through a Web browser from within Workplace Managed Client. Chapter 4. ISVs with Web and portal applications 79 Embedded Browser Figure 4-1 The Web application launched within Workplace Managed Client 4.3 Accommodate In many cases, it might make sense to launch a Web or portal application from the application launcher side bar, rather than opening a browser and finding and selecting a bookmarked URL. For example, because many portal servers do not offer much support for bookmarking individual applications, if there is a Web application that people fulfilling a certain role use very frequently, it is useful to provide just those people with a custom Workplace Managed Client application that can launch a browser directly to the online application. Launching a Web or portal application using a switcher view Programmatically launching the Workplace Managed Client’s embedded browser and executing this code from a Workplace Managed Client application is most easily achieved using a switcher view. A switcher view is a very simple Eclipse view class that, upon receiving the window focus, transfers control to another Eclipse view or Composite class. In 2.3, “Accommodate” on page 21, we show how a switcher view can be used to display an Eclipse perspective. This section describes how a simple switcher view can be used to launch an embedded browser that opens the Workplace Collaboration Services server login page. Three simple steps are required in order to create a switcher view that loads a browser to a given URL: 1. Create an IBM Workplace project with a single, automatically generated view. 2. Launch the embedded browser from the view’s setFocus method. 3. Deploy the application to the Workplace Collaboration Services server. 80 IBM Workplace Managed Client: ISV Integration Guide 4.3.1 Creating a new IBM Workplace project To create a new IBM Workplace project, perform the following steps: 1. Select File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. See Figure 4-2. Figure 4-2 Creating a new IBM Workplace Eclipse project 2. Give the project a name, for example,. com.ibm.wcttool.web and a Display Name, such as MyWorkplace, as shown in Figure 4-3. If there is an icon that needs to be associated with the application, you can also select that in this window. Click Next. Figure 4-3 Setting the Project name and Display Name Note: The application Display Name and icon appear on the application switcher bar on the left side of Workplace Managed Client. See Figure 4-6 on page 85. 3. Choose the single view page layout and Automatically create default views, as shown in Figure 4-4 on page 82. Click Finish. Chapter 4. ISVs with Web and portal applications 81 Figure 4-4 Selecting the single view layout and to automatically create the default view class The result of these actions creates three new projects, a feature project, a page layout project, and a plug-in project, as shown in Figure 4-5 on page 83: – The feature project, com.ibm.wcttool.web, defines what plug-ins should be packaged as part of the Workplace Managed Client application. – The page layout project, com.ibm.wcttool.web.MainPage, manages the different pages and views (though only one of each is used in this example). – The plug-in project, com.ibm.wcttool.web.pane1, contains the Eclipse view class to be placed in the single page, com.ibm.wcttool.web.pane1.views.Pane1View. The view at the top left of Figure 4-5 on page 83 shows the standard Package Explorer view for the plug-in perspective with which many Eclipse users are familiar. At the bottom left is a view provided by the Workplace Managed Client Developer Toolkit, which nicely groups all the projects belonging to a single Workplace Managed Client application together and can be used either instead of, or in addition to, the Package Explorer. To show this view, select Window → Show → View → Other → WMC Tools → WMC Application Navigator. 82 IBM Workplace Managed Client: ISV Integration Guide Feature Project Page Layout Project Plug-in Project Workplace Managed Client Application Navigator View Figure 4-5 Initial project view of application project, showing both Package Explorer and Application Navigator views 4.3.2 Launching the embedded browser In the previous section, a default Eclipse view was created by the Developer Toolkit wizards called com.ibm.wcttool.web.pane1.views.Pane1View. This class contains a method, setFocus, that is called by the platform when the view receives the focus. In order to launch the embedded browser, this setFocus method must be augmented with the code in Example 4-1 on page 84. This particular example opens the Workplace Managed Client embedded browser at the URL of the Workplace Collaboration Services server to which the client is connected, but it can be opened at any valid URL: 1. First, an instance of the ILaunchContext interface is created using the LaunchBrowserFactory, passing the URL to be opened to the createLaunchContext method. 2. Second, an instance of the ILaunchBrowser interface is instantiated using the LaunchBrowserFactory.getBrowserInstance method. Chapter 4. ISVs with Web and portal applications 83 3. Finally, the ILaunchBrowser.launch method is called, with the launch context being passed to it. Example 4-1 Eclipse view class launches Workplace Managed Client browser import import import import import import org.eclipse.swt.widgets.Composite; org.eclipse.ui.part.ViewPart; com.ibm.rcp.platform.api.PlatformContext; com.ibm.rcp.ui.browser.core.api.ILaunchBrowser; com.ibm.rcp.ui.browser.core.api.ILaunchContext; com.ibm.rcp.ui.browser.core.api.LaunchBrowserFactory; public class Pane1View extends ViewPart { //constructor public Pane1View() { } //nothing to do in this method public void createPartControl(Composite parent) { } // public void setFocus() { handleLaunchSimple(); } private void handleLaunchSimple() { try { String portalUrl = PlatformContext.getPortalURL(); //make sure that the portal url points to the Workplace URL if(!portalUrl.endsWith("/lwp/workplace") && !portalUrl.endsWith("/lwp/myworkplace")){ portalUrl += "/lwp/myworkplace"; } portalUrl.replaceAll("//lwp","/lwp"); ILaunchContext launchContext = LaunchBrowserFactory. createLaunchContext ( portalUrl); // launch the WCT browser ILaunchBrowser launchBrowser = LaunchBrowserFactory.getBrowserInstance(); launchBrowser.launch(launchContext); } catch (Exception e) { e.printStackTrace(); } } ... } This code is all that is necessary to launch the embedded browser with a simple URL. One drawback of this method is that it does not authenticate with the portal server, so users are required to enter their credential information, as in Figure 4-6 on page 85. Given that the users are already logged in to the Workplace Managed Client, this should technically not be necessary. In the next section, we discuss mechanisms that allow automatic authentication with the portal server, which enable a browser to be opened directly to a Web or portal application without having to authenticate manually. 84 IBM Workplace Managed Client: ISV Integration Guide Figure 4-6 Embedded browser launched from a Workplace Managed Client application 4.3.3 Deploying the application to Workplace Collaboration Services server For instructions for how to export and deploy a Workplace Managed Client application to the Workplace Collaboration Services server, follow the instruction in the white paper Creating an application with the IBM Workplace Managed Client Developer Toolkit, available at: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Information is also provided by the Workplace Managed Client Developer Toolkit, accessible through Eclipse by clicking Help → Help Contents → IBM Workplace Managed Client Tool for Eclipse → Distributing applications and following the instructions. After completing this, the application is fully deployed to the server and will be provisioned down the next time the Workplace Managed Client is loaded. An alternative to doing a full deploy to a server is to test the application locally, using the IBM Workplace Managed Client Developer Toolkit. The Creating an application with the IBM Workplace Managed Client Developer Toolkit white paper also contains full instructions for testing a Workplace Managed Client application without deploying it to a Workplace Collaboration Services server. 4.3.4 Web Services for Remote Portlets (WSRP) WSRP support for the rich client is currently available as a Technology Preview for IBM Workplace Client Technology V2.5.1. It enables server-managed deployment and client-side aggregation of WSRP applications. This Technology Preview is the initial IBM Workplace offering of technology based on the WSRP standard. The Technology Preview consists of a WSRP viewer for the rich client. The WSRP viewer is an implementation of the WSRP consumer, as defined by the WSRP Version 1.0 specification. WSRP viewer runs on both the Microsoft Windows and Linux versions of the managed client. Using these components as Chapter 4. ISVs with Web and portal applications 85 building blocks, ISVs can build new features and applications by seamlessly aggregating remote WSRP application views with other types of rich client platform views. One of the benefits of the WSRP viewer is the ability to render JSR 168 portlets without Important: This section provides an overview and describes some of the important concepts of WSRP. The WSRP Technology Preview provides complete instructions and details. The Web Services for Remote Portlets (WSRP) Technology Preview for Workplace Managed Client will be made available for use with IBM Workplace Managed Client 2.6. The WSRP Technology Preview 2.5.1 is part of the IBM Workplace Managed Client 2.5.1 Technology Preview package. This package will remain at the 2.5.1 level and will not be updated for Release 2.6. Instructions of how to make the WSRP Technology Preview work with Release 2.6 will be posted on developerWorks at: http://www.ibm.com/developerworks/workplace/products/clienttechnology/ IBM Business Partners will be able to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package and the IBM Workplace Managed Client 2.6 through the IBM Software Access Catalog on IBM PartnerWorld at: http://www.developer.ibm.com/isv/welcome/guide/value.htm Clients who want to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package should contact their IBM Sales representative. developing or modifying any code. Instead, the viewer is provided and must be configured to render specific portlets in the appropriate layout. The Java Standardization Request 168 (JSR 168) defines a portlet specification, for example, the window state, portlet mode, or different mechanisms for the portlet to access transient and persistent data. The WSRP viewer is a Workplace Managed Client feature and can be configured and deployed like any other feature. Each WSRP viewer can access one JSR 168 portlet. Figure 4-7 on page 87 displays two WSRP viewers on a single page embedded within a Workplace Managed Client application. 86 IBM Workplace Managed Client: ISV Integration Guide WSRP Viewer 1 WSRP Viewer 2 Figure 4-7 WSRP viewers embedded in Workplace Managed Client In order to create these views in Workplace Managed Client, two new portlets need to be defined with WSRP viewer parameters. The portlets and page can be created using the Workplace Managed Client Developer Toolkit, as described in 4.3.1, “Creating a new IBM Workplace project” on page 81. The WSRP Technology Preview includes instructions and xmlaccess scripts for creating and provisioning two portlets stacked horizontally on a page. In addition to this setup, the following configuration is also required: Each portlet that is going to be consumed must be enabled for WSRP and its handle retrieved. For IBM WebSphere Portal server, refer to the WebSphere Portal for Multiplatforms Information Center, available at: http://publib.boulder.ibm.com/pvc/wp/502/ent/en/InfoCenter/index.html JSR 168 and WSRP must be enabled on the WebSphere Portal server included with Workplace Collaboration Services. After the WSRP equivalent portlets and the application page is created, the Web application needs to be deployed to the Workplace Collaboration Services server using the instructions described in 4.3.3, “Deploying the application to Workplace Collaboration Services server” on page 85. Chapter 4. ISVs with Web and portal applications 87 Notes: Learn more about Web Services for Remote Portlets (WSRP) in the following developerWorks article: http://www.ibm.com/developerworks/webservices/library/ws-wsrp/ For the final JSR 168 specification, see: http://www.jcp.org/aboutJava/communityprocess/final/jsr168/ http://developers.sun.com/prodtech/portalserver/reference/techart/jsr168/ 4.4 Leverage The next level of integration is to leverage more of the capabilities of the platform services that are available in IBM Workplace Client Technology. This involves using more fully the extra capabilities offered by Workplace Managed Client. Some of these include: Enabling server-side definition of an application’s view layout by creating one portlet per view Authentication Workplace Managed Client menus Search bar Custom UI widgets – Rich text editor – Alerts – Collapse bar Custom views – Shelf views Personalities and personality startup This chapter discusses server authentication and adding a search bar that integrates with a browser. For example, an ISV with a Web or portal application might want to add single sign-on capabilities for an HTTP service using the credential store, or they might want to use Workplace Managed Client custom controls such as search bar for a unique look and feel. We discuss the other features in the proceeding chapters. Note: Workplace Managed Client also contains support to run and develop applications for Workplace Client Technology, Micro Edition - Enterprise Offering. This includes an integrated Web application container to run servlets and JSPs locally. To learn more about how to develop applications using Workplace Client Technology, Micro Edition - Enterprise Offering, refer to the IBM Redbook IBM Workplace Client Technology Micro Edition Version 5.7.1: Application Development and Case Study, SG24-6496, available at: http://www.redbooks.ibm.com/abstracts/sg246496.html The steps explained in each of the following sections assume that an IBM Workplace application has already been created, as described in 4.3, “Accommodate” on page 80. Also, we assume that you created an Eclipse view class to launch the Embedded browser within 88 IBM Workplace Managed Client: ISV Integration Guide Workplace Managed Client, as described in 4.3.2, “Launching the embedded browser” on page 83. We also assume that you have read through and performed the Workplace Managed Client application configuration and provisioning steps, as described in 4.3.3, “Deploying the application to Workplace Collaboration Services server” on page 85. 4.4.1 HTTP authenticated application In 4.3, “Accommodate” on page 80, we discuss an example that launches the embedded browser directed at http://<workplaceServerURL>/lwp/myworkplace. As can be seen, the URL points to the protected site, and the user will be always prompted to supply a user name and password. This request for user credential information can be programmatically satisfied using the credential store, form-based authentication, and the LTPA token support provided by the Workplace Managed Client. Note: Lightweight Third Party Authentication (LTPA) is specific to IBM Lotus Domino and IBM WebSphere products. The LTPA token is a cookie that can be added to the embedded browser to authenticate with a Domino or WebSphere server. For more information, see: http://www.ibm.com/developerworks/ibm/library/it-0101art2 To authenticate with other platforms, see the documentation that comes with those products. IBM Workplace rich client products use the local credential store to store user name and password credentials. Credentials stored within the local store are available only to the system that hosts the file, making it particularly suitable for sensitive credentials. The first time a user successfully authenticates with Workplace Managed Client, which also authenticates with Workplace Collaboration Services, the user name and password are stored in the credential store. This credential is used in the next example, where the browser is launched to open the Workplace Collaboration Services home page. By using the LTPA token, the user is not challenged for their user name and password. The LTPA token is retrieved from IHttpFormLoginContext, which is then assigned to the browser ILaunchContext. Note: By storing the credential, a user is only prompted once for a user name and password and all subsequent logins can be accomplished programmatically. We use the application example described in 4.3.2, “Launching the embedded browser” on page 83 as a starting point for the following examples. To log in to an HTTP authenticated application programmatically, perform the following steps: 1. Add com.ibm.rcp.security.core and com.ibm.rcp.apache.httpclient as plug-in dependencies in the Eclipse plugin.xml file. This plugin.xml file was generated when the Workplace Managed Client application project was created, as described in 4.3.1, “Creating a new IBM Workplace project” on page 81. Example 4-2 on page 90 shows the Eclipse plugin.xml file with the added dependency for these plug-ins. Chapter 4. ISVs with Web and portal applications 89 Example 4-2 Partial Eclipse plugin.xml file with dependencies <requires> <import plugin="com.ibm.rcp.security.core"/> <!-- needs to import the plugin com.ibm.rcp.net.apache.httpclient to work with httpclient Cookie. --> <import plugin="com.ibm.rcp.net.apache.httpclient"/> <!-- needs to add the browser dependencies to launch the embedded browser --> <import plugin="com.ibm.rcp.ui"/> <import plugin="com.ibm.rcp.ui.browser"/> <import plugin="com.ibm.rcp.ui.browser.core"/> ... </requires> 2. Modify the Eclipse view class that was created in 4.3.2, “Launching the embedded browser” on page 83 to retrieve the credentials for the HTTP form-based application. This Eclipse view class was automatically generated when the Workplace Managed Client application project was created. The method retrieveCredential() in Example 4-3 shows how to get the user credentials for the HTTP host. Example 4-3 Partial implementation of view class with method to retrieve credentials for HTTP host //Pane1View.java import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; import javax.security.auth.login.LoginException; import com.ibm.rcp.platform.api.PlatformContext; import com.ibm.rcp.platform.api.PlatformContext.NoDataAvailableException; import com.ibm.rcp.security.api.cred.ICredential; import com.ibm.rcp.security.api.cred.ICredentialManagerFactory; import com.ibm.rcp.security.api.cred.IHostCredentialManager; import com.ibm.rcp.security.api.cred.IPasswordCredential; import com.ibm.rcp.security.api.http.login.IHttpFormLoginContext; import com.ibm.rcp.security.api.http.login.IHttpFormLoginContextFactory; import com.ibm.rcp.security.api.login.LtpaCookieCallback; import org.apache.commons.httpclient.Cookie; //... public class Pane1View extends ViewPart { private String private char[] mUser; mPassword; // Callback handler used for http form-based authentication private CallbackHandler mHandler; // LTPA token retreived from loginContext and then assigned to launchContext private Cookie mCookie; public Pane1View() { } private void retrieveCredential(String host) { try { // get password credential from credential store for the current host IHostCredentialManager manager = ICredentialManagerFactory.INSTANCE .getHostCredentialManager(); ICredential[] creds = manager.findByHost(host); 90 IBM Workplace Managed Client: ISV Integration Guide // validate credential Assert.isNotNull(creds); if (creds.length == 0) { throw new IllegalStateException( "Unable to find any credentials for host "+ host + "\n\n" + "Possible cause: the login server has been changed after the credential was created"); } Assert.isTrue(creds[0] instanceof IPasswordCredential, "Credential is not a password credential"); // get username and password from credential IPasswordCredential cred = (IPasswordCredential) creds[0]; mUser = cred.getUsername(); mPassword = cred.getPassword(); } catch (Exception ex) { ex.printStackTrace(); } } ... } The retrieveCredential() method can access the credential store because the store was unlocked by the IBM Workplace personality. The findByHost() method is used to retrieve the credential for this host that was created by the Workplace Managed Client the first time the user logs in. The user name and password are retrieved and assigned as instance data to be used in CallbackHandler. Note: Workplace Managed Client uses a local credential store to store user name and password credentials. Workplace Managed Client applications can access the local credential store by decrypting it using the password supplied by the user at sign-on and can create password credentials for authenticating with remote servers.Workplace Client Technology also provides security APIs that enable an application to log in to a Web or portal application programmatically. 3. Add a getCallBackHandler() method in the same Eclipse view class shown in Example 4-3 on page 90. This method creates the javax.security.auth.callback.CallbackHandler instance used by form-based authentication to provide the user name and password. Example 4-4 shows the partially implemented Eclipse view class with a method to create a CallBackHandler instance. Example 4-4 Partially implemented Eclipse view class with method to create CallBackHandler instance //Pane1View.java //... public class Pane1View extends ViewPart { //... private void createHandler() { // build J2EE callback mHandler = new CallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { Chapter 4. ISVs with Web and portal applications 91 for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback nc = (NameCallback) callbacks[i]; nc.setName(mUser); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback pc = (PasswordCallback) callbacks[i]; pc.setPassword(mPassword); } else if (callbacks[i] instanceof LtpaCookieCallback) { LtpaCookieCallback cookie = (LtpaCookieCallback) callbacks[i]; // could pass in a cookie if we had one with this call // back // however the goal of this sample is to get the cookie // after a successful login } } } }; } ... } This callback can also provide an LTPA cookie, but it is not included in this example because the LTPA token has not been retrieved. The mHandler instance data is set and used by the retrieveCookie method to log in and then retrieve the LPTA token. 4. Add a retriveCookie() method in the same Eclipse view class shown in Example 4-4 on page 91. This method logs in to a special servlet defined by the URL, /lwp/j_security_check. This servlet is used by form-based authentication to authenticate a user. Example 4-5 shows the partially implemented Eclipse view class with a method to retrieve credential cookies for the HTTP form application. Example 4-5 Partially implemented Eclipse view class with a method to retrieve credential cookies //Pane1View.java //... public class Pane1View extends ViewPart { //... // login to j_security_check using name and password to get the LTPA cookie private void retrieveCookie(String host) { IHttpFormLoginContext context = IHttpFormLoginContextFactory.INSTANCE.create(); try { context.login(host, 80, "/lwp/j_security_check", false, mHandler,null); } catch (LoginException ex) { MessageDialog.openWarning(null, "SSO Browser Login", ex.getMessage()); } // get cookie from the context (an exception would have occurred if // login was unsuccesful) mCookie = context.getCredentialCookie(IHttpFormLoginContext.CREDENTIAL_LTPA); Assert .isNotNull(mCookie,“Authentication with host was successful, but no LTPA cookie was found"); } } 92 IBM Workplace Managed Client: ISV Integration Guide When authenticated, the LTPA token can be retrieved from IHttpFormLoginContext. It can then be assigned to a browser launch context. 5. Add a launchBrowser() method in the same Eclipse view class shown in Example 4-5 on page 92. This method assigns the LTPA token to ILaunchContext using the setSingleSignOnCookie() method. This allows access to a portal or Web application without additional user name and password prompts. Example 4-6 shows the partially implemented Eclipse view class with a method to create a launch context to the desired URL and launch the embedded browser within Workplace Managed Client with single sign-on enabled. Example 4-6 Partially implemented Eclipse view class with method to create launch context to URL //Pane1View.java //... public class Pane1View extends ViewPart { //... // create a launch context to the desired URL private void launchBrowser(String url) { // create a launch context to the snoop servlet ILaunchContext launchContext = LaunchBrowserFactory.createLaunchContext(url); // assign the LTPA cookie launchContext.setSingleSignOnCookie(mCookie.getValue(), ILaunchContext.CREDENTIAL_LTPA); // launch the WCT browser ILaunchBrowser launchBrowser = LaunchBrowserFactory .getBrowserInstance(); try { launchBrowser.launch(launchContext); } catch (Exception ex) { ex.printStackTrace(); } } } Note: In the Workplace Managed Client 2.5.1 release, LTPA cookies set by the ILaunchBrowser API are persisted. The user might need to manually clear the cookies for the Web applications that do not want the cookies to be persisted. The Workplace Managed Client 2.6 release has a support for both persistent and non-persistent LTPA cookies. 6. Create a handleLaunchLTPA() method in the same Eclipse view class shown in Example 4-6. This method brings together all the methods defined in the previous steps to launch the embedded browser enabled with form-based authentication and the LTPA token support provided by Workplace Managed Client. Call the handleLaunchLTPA() method when the Eclipse view receives the window focus. See Example 4-7 on page 94 for the handleLaunchLTPA implementation. Chapter 4. ISVs with Web and portal applications 93 Example 4-7 Partially implemented Eclipse view class to launch embedded browser with SSO enabled //Pane1View.java //... public class Pane1View extends ViewPart { //... private void handleLaunchLTPA() { try { // get the current host, used to retrieve the credential and then // login String host = PlatformContext.getJNDIHostName(); // Retrieve the credential which will be used in the callback // handler retrieveCredential(host); // Create the Callback handler needed to login to j_security_check createHandler(); // login to the j_security_check using name and password to // retrieve the LTPA cookie retrieveCookie(host); // Launch the browser at the URL using the LTPA token String portalUrl = PlatformContext.getPortalURL(); if(!portalUrl.endsWith("/lwp/workplace") && !portalUrl.endsWith("/lwp/myworkplace")){ portalUrl += "/lwp/myworkplace"; } portalUrl.replaceAll("//lwp","/lwp"); launchBrowser(portalUrl); } catch (IllegalStateException ex) { MessageDialog.openWarning(null, "SSO Browser Login", ex .getMessage()); } catch (Exception ex) { ex.printStackTrace(); } } // Launch Embedded browser on setFocus public void setFocus() { // comment the method to launch simple browser and call the method to launch the // browser with HTTP form authentication and LTPA support enabled // handleLaunchSimple(); handleLaunchLTPA(); } } 7. Deploy the application to the Workplace Collaboration Services server and provision it down to a client. Figure 4-8 on page 95 shows the Workplace Managed Client Web-based application that is launched within the embedded browser. The user is not prompted for a user name and password as SSO is enabled for HTTP form-based application. 94 IBM Workplace Managed Client: ISV Integration Guide Figure 4-8 HTTP form-based application with LTPA support launched in Workplace Managed Client More complex business logic might require storing credentials for multiple systems that support form-based authentication over HTTP and browser access using LTPA tokens. In this case, the application must prompt the user for additional credentials and store them using the createPassword method on the IHostCredentialManager interface. A user name and password is not passed into the createPassword method, instead a CallbackHandler, as defined in createHandler, is used. The findByHost method can be used to retrieve the required credential. In 6.7, “Securing a client application” on page 166, we describe how to create the HTTP credentials and store them to local credential store. Note: Currently, Workplace Managed Client only supports form-based authentication over HTTP and browser access using an LTPA token. 4.4.2 Adding a Workplace Managed Client search bar Workplace Managed Client exposes an extension point that any application can implement in order to place a search bar above the main view. The search bar consists of: A combo box listing search categories A text box for the string to be searched A button to activate the search The Web applications can extend the Workplace Managed Client search bar and perform the Web search to display search results within Workplace Managed Client using an embedded Web browser. Chapter 4. ISVs with Web and portal applications 95 Figure 4-9 shows the Web application embedded in Workplace Managed Client that uses the Workplace Client search bar. Figure 4-9 The search bar extended by a Workplace Managed Client Web application The searchbarAdapters extension point adds a custom contribution to the search menu that performs a customized search and displays the results in a custom view. In order to create a search bar in Workplace Managed Client, perform the following steps: 1. Populate the search menu with the custom contribution. 2. Contribute code to perform a custom search that is triggered when the corresponding menu action is selected. 3. Display the search results in a custom view. Follow these steps to add a custom search bar contribution: 1. Add com.ibm.rcp.ui.searchbar and com.ibm.rcp.platform as plug-in dependencies in the Eclipse plugin.xml file. This plugin.xml file was generated when the Workplace Managed Client application project was created, as described in 4.3.1, “Creating a new IBM Workplace project” on page 81. Example 4-8 shows the Eclipse plugin.xml file with the added dependency for these plug-ins. Example 4-8 Eclipse plugin.xml code with plug-in dependencies for a search bar extension <plugin> <requires> <import plugin="com.ibm.rcp.ui.searchbar"/> <import plugin="com.ibm.rcp.platform"/> </requires> ... </plugin> 96 IBM Workplace Managed Client: ISV Integration Guide 2. Extend the searchbarAdapters extension point defined in the com.ibm.rcp.ui.searchbar.api code and provide values for the required attributes as tags, as shown in Example 4-9. Example 4-9 Eclipse plugin.xml code to extend the searchBarAdapters <plugin> <extension id="com.ibm.wcttool.web.search.IBMSearch.internet" name="searchbar extension point" point="com.ibm.rcp.ui.searchbar.searchbarAdapters"> <adapter label="IBM Internet" data="1" class="com.ibm.wcttool.web.search.IBMSearch" id="com.ibm.wcttool.web.search.IBMSearch.internet" /> </extension> ... </plugin> 3. Map the adapter id parameter in Example 4-8 on page 96 with the Web application activity pattern binding. Example 4-10 shows how to do this. Example 4-10 Eclipse plugin.xml code to map the id parameter <plugin> <extension point="org.eclipse.ui.activities"> <activity description="This is web activity" name="com.ibm.wcttool.web.activity" id="com.ibm.wcttool.web.activity"/> <activityPatternBinding activityId="com.ibm.wcttool.web.activity" pattern="com\.ibm\.wcttool\.web\.pane1/com\.ibm\.wcttool\.web\..*" /> </extension> ... </plugin> 4. Create a new class that implements the ISearchDataAdapter interface. The class and package should match the class parameter defined in the searchbarAdapters extension created in step 2. In the Workplace Managed Client Web application example, we use the com.ibm.wcttool.web.search.IBMSearch class, as shown in Example 4-11. Example 4-11 Partial implementation of the ISearchDataAdapter interface in IBMSearch.java import import import import //... public com.ibm.rcp.ui.browser.core.api.ILaunchBrowser; com.ibm.rcp.ui.browser.core.api.ILaunchContext; com.ibm.rcp.ui.browser.core.api.LaunchBrowserFactory; com.ibm.rcp.ui.searchbar.api.ISearchDataAdapter; class IBMSearch implements ISearchDataAdapter { public boolean isMenuVisible() { return true; } public void run(String arg0, String arg1) { final String search = arg0; Display.getDefault().asyncExec(new Runnable(){ public void run() { handleLaunchSimple(search); Chapter 4. ISVs with Web and portal applications 97 } }); } // create a launch context to the desired URL private void handleLaunchSimple(String searchString) { try { ILaunchContext launchContext = LaunchBrowserFactory .createLaunchContext("www.mycmpny.com/Search?searchString=" + searchString + """); // launch the WCT browser ILaunchBrowser launchBrowser = LaunchBrowserFactory .getBrowserInstance(); launchBrowser.launch(launchContext); } catch (Exception e) { e.printStackTrace(); } } //... } Note: While implementing the run() method for ISearchDataAdaper, make sure that the UI operations are performed using the syncExec() or asyncExec() thread. Perform the non-UI operations using normal Java Thread. 5. Deploy the application to the Workplace and provision it, as described in 4.3.3, “Deploying the application to Workplace Collaboration Services server” on page 85. 4.4.3 Enhancing WSRP and converting servlet and JSP applications Converting servlet and JavaServer™ Pages™ (JSP™) applications to JSR 168 portlets is another technique for integrating applications into Workplace Managed Client. After being converted to portlets, they can be accessed from the WSRP viewer, as described in 4.1.2, “What is WSRP?” on page 78. WSRP can also be extended using container-specific markup, allowing customization and personalization on the glass. The WSRP specification is defined by a producer, consumer, and end user. The producer is responsible for implementing the following interfaces: service description, markup, portlet management, and registration. The WSRP viewer implements both the consumer and end user and calls the interfaces on the producer to render the appropriate UI. Figure 4-10 on page 99 shows a graphic representation of the WSRP viewer. 98 IBM Workplace Managed Client: ISV Integration Guide Figure 4-10 WSRP Viewer - Producer and consumer architecture Container-specific markup can be added by a WSRP producer and interpreted by some WSRP viewers while being ignored by other WSRP viewers that cannot process the markup. To maximize extensibility, externally developed plug-ins can be developed that process this container-specific markup to improve integration with Workplace Managed Client and the WSRP viewer. This markup can be used for light UI integration, enabling some bridging of state and data between the Web container and the client container contexts. For example, this can enable a portlet to have custom Eclipse Java menu entries or Workplace Managed Client action bar items. This technique can also be used for deeper client integration and would be considered appropriate for the exploit phase. 4.5 Exploit When the ISV seeks to fully exploit IBM Workplace Client Technology and to reuse shared UI components or publish capabilities to other applications, the approach would be nearly identical to what IBM itself did when enhancing Workplace Messaging from being a portal Web application to also having a rich desktop mode. For Web and portal applications to exploit Workplace Managed Client, the first step is to write Eclipse plug-ins that make remote calls to the same back-end services that existing portlets do. This might suffice, particularly if offline operation is not a requirement. Figure 4-11 on page 100 illustrates this. Chapter 4. ISVs with Web and portal applications 99 Figure 4-11 Client-side applications accessing server-side services in online mode If offline support is required, a single-user version of the business logic and its corresponding local data store can be straightforwardly derived from the existing server versions. Figure 4-12 shows this configuration. Figure 4-12 Client-side applications accessing local services that synchronize data Example The end result of extending a portlet-based application can be seen by examining what IBM did with IBM Workplace Messaging. In IBM Workplace Messaging, it has a full, rich desktop 100 IBM Workplace Managed Client: ISV Integration Guide experience that has the TCO of a browser combined with a secure store and rich cross-platform integration framework. ISVs that have written portlet applications can look at this example as a precedent for what is possible if they choose to completely exploit all options of IBM Workplace Client Technology. It is worth reiterating, however, that such exploitation can be done in stages, and in many cases, might never need to go to through to full exploitation. Features provided by Workplace Managed Client that enable an ISV to extend their application in very powerful ways include: Document libraries for remote storage and document sharing Workplace Managed Client document libraries consist of both local and remote storage in a folder structure for sharing documents among a group or team. Workplace Managed Client provides an API for manipulating files and folders in a document library. Online awareness There is a online/offline awareness API that can be used to inform an application when the client is online, offline, or when it is about to transition between the two. This can be useful for completing transactions if connectivity is about to change and close down open connections. After the operation has completed, the connection to the database can be reestablished. Synchronizing client application data There is an API that taps into the client's synchronization framework. Based on timetables set in the client’s preferences, the application can be informed of when to synchronize its data. The actual data synchronization is performed by the application itself. Database access, both local and remote Workplace Managed Client comes with its own Cloudscape relational database. After the application is fully moved to the Workplace Managed Client platform, it does not need to always have a connection to the remote database; it simply needs to connect to the local Cloudscape database. The rest of the application code does not need to be changed. Messaging and notifications Workplace Managed Client provides a full mail API for sending and manipulating mail messages. Securing a client application The IBM Workplace Client Technology platform is a secure platform that protects application data. Single sign-on with the operating system capabilities are built into the rich client by default. The local Cloudscape database is encrypted using the users’ credentials, which must be retrieved using the credential store API. All of these features apply to any fully integrated Workplace Managed Client application. They are not specific to integrating a Web or portal application. We cover all of these points in detail in Chapter 6, “Exploiting IBM Workplace Managed Client” on page 139. 4.6 Summary IBM Workplace Client Technology framework provides for a variety of ISV integration paths for Web and portal applications. These paths range from simple coexistence to full-blown exploitation of the Workplace Client Technology infrastructure. Following this path balances the amount of time needed to convert these applications with the greater flexibility and Chapter 4. ISVs with Web and portal applications 101 seamlessness of the newly ported application. ISVs can start at any point along the spectrum and more fully integrate as your schedule and needs change. 4.7 URLs referenced in this chapter Table 4-2 lists the URLs referenced in this chapter. Table 4-2 Table of URLs used in this chapter 102 What Where Information about WSRP http://www.oasis-open.org/committees/tc_ho me.php?wg_abbrev=wsrp Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplac e/library/wmc-toolkit-basic IBM WebSphere Portal Information Center http://publib.boulder.ibm.com/pvc/wp/502/e nt/en/InfoCenter/index.html More information about WSRP http://www.ibm.com/developerworks/webservi ces/library/ws-wsrp/ Final JSR 168 specification http://www.jcp.org/aboutJava/communityproc ess/final/jsr168/ http://developers.sun.com/prodtech/portals erver/reference/techart/jsr168/ IBM Redbook IBM Workplace Client Technology, Micro Edition Version 5.7.1: Application Development and Case Study, SG24-6496 http://www.redbooks.ibm.com/abstracts/sg24 6496.html More information about LTPA http://www.ibm.com/developerworks/ibm/libr ary/it-0101art2 IBM Workplace Managed Client: ISV Integration Guide 5 Chapter 5. ISVs with Lotus Notes and Domino applications This chapter introduces the steps you can take to integrate an IBM Lotus Notes or Lotus Domino application into the Workplace Client Technology framework. Even if there is neither the time nor the resources to do a full Eclipse Rich Client Platform (RCP) conversion, significant benefits can be quickly gained from the central management and security that Workplace Client Technology offers. ISVs that build and sell Lotus Notes/Domino-based applications can approach the integration spectrum using methods discussed in this chapter. These include: Deploying and provisioning Workplace Managed Client applications Integrating with the Workplace Managed Client framework Fully exploiting Workplace Managed Client features such as security, storage, and synchronization © Copyright IBM Corp. 2006. All rights reserved. 103 5.1 Overview This chapter describes how an ISV can migrate an existing Lotus Notes/Domino application to the Workplace Managed Client framework. Benefits of such a migration include: Integration with other applications provided by the application switcher Leveraging the features and functionality provided by Workplace Client Technology This chapter uses the example of a book merchant application, booklist.nsf. Booklist.nsf stores information about the merchant’s current book inventory. We shows how this application changes as it is moved through the various stages of integration with Workplace Managed Client. 5.1.1 What is Lotus Domino? IBM Lotus Domino provides enterprise-grade collaboration capabilities, including a host of integrated messaging and directory services that provide world-class e-mail, calendar and scheduling capabilities, discussion databases, and address books in a unified, easy-to-manage architecture. Lotus Domino is a member of the IBM Workplace product family. Version 7 supports more users with fewer servers to simplify administration and to provide tighter integration with Web standards. Beyond messaging, the Lotus Domino server provides a robust platform for developing and deploying collaborative applications on a wide variety of operating systems. With IBM Lotus Notes and Lotus Domino software, collaborative solutions can be built and executed, such as project management tracking and customer support processes, that can help an organization to be more responsive and productive. With Version 7, IBM extends the reach of Lotus Notes and Lotus Domino messaging and collaboration solutions while continuing to leverage existing IT and application investments. The new and advanced administrative, performance, and security features of Lotus Domino 7 server can help lower your total cost of ownership. Native support for Web services and enhanced support for industry standards can extend the reach of rapid application development and deployment. 5.1.2 IBM Lotus Domino Web Access With Lotus Domino Web Access, users can access traditional Notes features, such as e-mail and discussion forums, from a variety of clients using a Web browser. Lotus Domino Web Access is a Web client that provides access to Domino-based .nsf files through browsers such as Mozilla Firefox, Mozilla, and Microsoft Internet Explorer through Dynamic HTML (DHTML). Lotus Domino Web Access 7 combines access to a robust, reliable, enterprise-class messaging and collaboration platform, with the ease of simply opening a browser. Highlights of Lotus Domino Web Access 7 include: Opportunity for improved client and server performance Enhanced security features Expanded presence awareness and instant messaging integration Updated user interface Added mail and calendar productivity features Enhanced support for Linux 104 IBM Workplace Managed Client: ISV Integration Guide New administration and management features Improved offline access to personal data 5.1.3 Domino integration options As stated in the introduction, there are trade-offs involved when deciding the level of integration between an existing Lotus Notes/Domino application and the Workplace Managed Client. Table 5-1 highlights some of the considerations when examining the different integration paths. Table 5-1 Integration paths for Lotus Notes/Domino applications Increase of time, effort, and synergy → Coexist Accommodate Leverage Exploit Copy and paste data from any existing Notes/Domino application. Access NSFs using the Notes 7.0 plug-in. Access Domino databases through Web services and native APIs. Make use of advanced Workplace Managed Client features such as document libraries, single sign-on, secure data store, and so on. Wrap Domino Web applications in portlets, and then display using Notes plug-in. Add new features specific to Workplace Managed Client. Provisioning. Why integrate? Achieving the first two levels of integration is a relatively simple task, because IBM has done much of the groundwork by developing the Notes 7.0 plug-in for the Workplace Managed Client. After the Notes 7.0 plug-in is provisioned to Workplace Managed Client, a check is performed to determine whether Notes Version 7.0 is installed on the client machine. If it is, the Notes 7.0 UI is dynamically “reparented” to operate within the Workplace Managed Client UI. At a very high level, the architecture of Notes consists of several independent processes, for example, managing user interactions, the Notes desktop, displaying views, and editing Notes documents. Together, all the processes make use of a private interprocess communication (IPC) facility for coordinating their activities. Figure 5-1 shows the high-level architecture of Notes. Figure 5-1 High-level architecture of Notes In order to run Notes applications in Workplace Managed Client, the Notes application plug-in interfaces with the main Notes process using the private IPC already built into Notes. See Figure 5-2 on page 106. The plug-in is implemented as a standard Eclipse view extension, written in Java, and uses JNI to call into a DLL with the Notes IPC facility written in C. Chapter 5. ISVs with Lotus Notes and Domino applications 105 Figure 5-2 Notes Eclipse plug-in and the Notes IPC 5.1.4 Reparenting Notes applications using the Notes plug-in Workplace Managed Client provides an extremely powerful and simple to use tool for integrating with Lotus Notes 7.0 called the Notes plug-in. The Notes plug-in enables developers to extend their Notes applications—applications designed specifically to run in the Lotus Notes client—to IBM Workplace Managed Clients, with no additional coding work required. The plug-in enables any Notes application to run with full capability and fidelity in Workplace Managed Client without any need for code modification. Notes applications can be run seamlessly with a variety of other applications through the unified UI provided by Workplace Managed Client. Developers leverage their existing LotusScript and other Domino skills while taking advantage of the benefits of the Workplace Managed Client Eclipse-based platform. In addition, all of the Notes 7 out-of-the-box templates are supported from within Workplace Managed Client. The plug-in also provides the option to integrate Lotus Notes applications with the instant messaging capabilities of IBM Workplace Collaboration Services software. Highlights of the Lotus Notes plug-in for Workplace Managed Client include: Lotus Notes is accessible through the application switcher of the Workplace Managed Client. Lotus Notes has its own “page/perspective” with bookmarks and tabs for documents, similar to Notes tabs. Lotus Notes menus are integrated in the Managed Client. Lotus Notes status bar messages appear as usual in Workplace Managed Client. Lotus Notes server and local databases are accessible and work the same as within the Lotus Notes client. 5.2 Coexist The simplest level of integration is coexistence. This requires no changes at the code level. Lotus Notes remains installed and runs on the client’s desktop just as it always has. For Notes and Workplace Managed Client, a user opens Lotus Notes and copies and pastes data into a Workplace Managed Client document. Prior to Notes Version 7, this was the only 106 IBM Workplace Managed Client: ISV Integration Guide option for coexistence. If a user has Version 7 or later, the Notes plug-in automatically bypasses the coexist stage and goes straight to accommodate. 5.3 Accommodate At the accommodate level, there are three paths that you can follow: Running Domino applications within Workplace Managed Client using the Notes plug-in. Launching a Notes/Domino application in its native window using Workplace Managed Client. Using the Workplace Managed Client Developer Toolkit to create a Workplace Managed Client application that displays a Domino application in one or more Eclipse views. This feature is available in Version 2.6 and later of Workplace Managed Client. This section discusses all these approaches, which can be achieved with little to no coding work. 5.3.1 Running Domino applications in Workplace Managed Client using the Lotus Notes plug-in To run a Domino application in Workplace Managed Client using the Notes plug-in, perform the following three steps: 1. Install the Notes 7.0 client if not already installed. 2. Enable the Notes plug-in to be provisioned to clients on the Workplace Collaboration Services server form which Workplace Managed Client was installed. 3. Open the Domino application using the Workplace Managed Client Notes plug-in. Installing the Notes 7.0 client A trial version of the Notes 7.0 client is available at: http://www.ibm.com/developerworks/downloads/ls/lsds/?S_TACT=105AGX13&S_CMP=LSDL For more information, see: http://www.ibm.com/software/sw-lotus/products/product4.nsf/wdocs/noteshomepage Configuring and provisioning the Notes application plug-in Follow these steps to deploy the Notes application plug-in: 1. Log in to the WebSphere administrative console using the following link: http://<your_server>:<admin_port>/admin Note that <admin_port> is by default 9091. Note: Administrator access rights are required to use the administrative console. Figure 5-3 on page 108 shows the administrative console login page for WebSphere Portal server. Chapter 5. ISVs with Lotus Notes and Domino applications 107 Figure 5-3 WebSphere Portal Administrative Console 2. In the side navigation bar, click Lotus Workplace → Users → Manage User Policies → Default User Policy. See Figure 5-4. 3. Scroll through the list of General Properties and select Allow Notes application plug-in, as shown in Figure 5-4. Figure 5-4 Select Allow Notes application plug-in 4. Click Apply → Save → Save to save the administrative changes. 5. Provision the Workplace Managed Client from a Workplace Collaboration Services server. See the following link for instructions: http://publib.boulder.ibm.com/infocenter/iwphelp/v2r5m1/index.jsp?topic=/com.ibm.wcs.ic. doc_2.5.1/infocenter/i_inst_t_install_rich_client_user.html Opening the Domino application using the Notes plug-in To open the booklist.nsf Domino application using the Notes plug-in, perform the following steps: 1. Log in to Workplace Managed Client. 108 IBM Workplace Managed Client: ISV Integration Guide 2. Click the Lotus Notes icon in the application switcher side bar to open the Notes plug-in, as shown in Figure 5-5. 3. Open the database in the usual manner. Click File → Database → Open to open the usual Notes dialog box for opening a database, just as in the normal Notes client. Notes Plug-in Application Switcher Figure 5-5 The booklist.nsf application displayed using the Notes plug-in 5.3.2 Launching a Notes/Domino application in its native window using Workplace Managed Client Another option for accommodating a Lotus Notes application within Workplace Managed Client is to programatically launch a Notes application in its native window. Perform the following steps: 1. Create a Workplace Managed Client application project with a single Eclipse view using the Workplace Managed Client Developer Toolkit. 2. Modify the auto-generated Eclipse view to launch a separate Notes application when the user clicks a button. 3. Deploy the application to a Workplace Collaboration Services server. Creating a Workplace application project To create a Workplace Managed Client application project using the Workplace Managed Client Developer Toolkit, perform the following steps: 1. Select File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. See Figure 5-6 on page 110. Chapter 5. ISVs with Lotus Notes and Domino applications 109 Figure 5-6 Creating a new IBM Workplace Eclipse project 2. Give the project a name, for example, com.ibm.wcttool.bookdatabase, and a Display Name, such as Book Database, as shown in Figure 5-7. 3. Associate the book.png file with the projects icon by clicking Browse next to the icon text box and choosing the file. Click Next. Figure 5-7 Setting the Project name and Display Name Note: The application Display Name and icon appear on the application switcher bar on the left side of Workplace Managed Client. See Figure 3-6 on page 57 for an illustration of this. 4. Choose the single view page layout and select Automatically create default views, as shown in Figure 5-8 on page 111. Click Finish. 110 IBM Workplace Managed Client: ISV Integration Guide Figure 5-8 Auto-generating a single Eclipse view These steps create three projects in the Eclipse workspace: Eclipse feature project Workplace Managed Client page layout project Eclipse view project Modifying the Eclipse view to launch a Notes native window The previous step created an Eclipse view project named com.ibm.wcttool.bookdatabase.pane1 containing an Eclipse view class com.ibm.wcttool.bookdatabase.pane1.views.Pane1View and a class called MyComposite that extends the org.eclipse.swt.widgets.Composite class. The MyComposite class defines the user interface layout. You must now modify the MyComposite class to launch the Notes database within its native application window. The following steps outline how this is accomplished: 1. Add a button to the UI. 2. Add a listener to the button that launches the Book Manager Notes application in the native Notes window when a user clicks the button. Example 5-1 shows the MyComposite class after these changes have been made. Example 5-1 MyComposite class with single button that launches Book Manager Notes database //MyComposite.java //... public class MyComposite extends Composite { private Button mLaunch = null; public MyComposite(Composite parent, int style) { super(parent, style); initialize(); } private void initialize() { //create a new Button mLaunch = new Button(this, SWT.PUSH); mLaunch.setText("Launch"); mLaunch.setBounds(new Rectangle(10,45,60,25)); Chapter 5. ISVs with Lotus Notes and Domino applications 111 //add a SelectionListener that launches the native notes application mLaunch.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent ev) { widgetSelected(ev); } public void widgetSelected(SelectionEvent ev) { Program.launch("notes://<your-server>/booklist.nsf/Books?OpenView"); } }); setSize(new org.eclipse.swt.graphics.Point(300,200)); } } Deploying the application to Workplace Collaboration Services server For instructions about how to export and deploy a Workplace Managed Client application to the Workplace Collaboration Services server, follow the instructions in the white paper Creating an application with the IBM Workplace Managed Client Developer Toolkit, available at: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Information is also provided by the Workplace Managed Client Developer Toolkit, accessible through Eclipse by clicking Help → Help Contents → IBM Workplace Managed Client Tool for Eclipse → Distributing applications and following the instructions. After accomplishing this, the application is fully deployed to the server and will be provisioned down the next time Workplace Managed Client is loaded. An alternative to doing a full deploy to a server is to test the application locally, using the IBM Workplace Managed Client Developer Toolkit. The Creating an application with the IBM Workplace Managed Client Developer Toolkit white paper also contains instructions about how to test a Workplace Managed Client application without deploying it to a Workplace Collaboration Services server. Figure 5-9 on page 113 shows the Book Database launched from a launch button. 112 IBM Workplace Managed Client: ISV Integration Guide Launch Button Figure 5-9 Using a button to launch a Notes application in its native window 5.3.3 Displaying a Notes application in an Eclipse View Workplace Client Technology Version 2.6 and later provides an enhanced version of the Notes plug-in that enables specific template views of Notes applications to be displayed as Eclipse views. Perform the following steps to display a Notes application in an Eclipse view: 1. Install Workplace Managed Client Developer Toolkit Version 2.6. 2. Provision the Notes application plug-in. 3. Create a Workplace Managed Client application and create an Eclipse view that displays a Domino application. 4. Deploy the application to a Workplace Collaboration Services server. Installing Workplace Managed Client Developer Toolkit Version 2.6 IBM Workplace Managed Client Developer Toolkit is an Eclipse toolkit designed for application developers who want to extend IBM Workplace Managed Client with new applications. The toolkit provides a developer who has little to no Workplace experience with the tools needed to create and deploy an application. Developers can test and debug directly on the client without needing extensive knowledge of the deployment process for server-provisioned applications. In addition, the toolkit provides features that simplify server deployment. By using wizards to guide the developer, the toolkit reduces the time needed to create and deploy applications. For more information, see Introduction to the IBM Workplace Managed Client Developer Toolkit, available at: http://www.ibm.com/developerworks/lotus/library/wmc-toolkit Chapter 5. ISVs with Lotus Notes and Domino applications 113 To install the Workplace Managed Client Developer Toolkit Version 2.6, download the Workplace Managed Client 2.6 SDK from the following site and follow the installation instructions: http://www.ibm.com/software/workplace/products/product5.nsf/wdocs/2c8a33e47eef8d0585256e e60054ddf2 Provisioning the Notes application plug-in See steps 1 and 2 in 5.3.1, “Running Domino applications in Workplace Managed Client using the Lotus Notes plug-in” on page 107 for the actions required to enable the Notes plug-in. Adding a Notes application to a Workplace Managed Client view Follow these steps to use the toolkit wizards to create a Workplace Managed Client application with a single view that points to an existing Notes application, booklist.nsf. Important: The Notes plug-in feature is designed to work with Lotus Notes Version 7 and Workplace Managed Client V2.6 and later. It will not work as expected with earlier releases of either product. 1. Open the Eclipse IDE. 2. Click File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. 3. Type com.ibm.wcttool.bookdatabase in the Project Name field. 4. Type Book Database in the Display Name field. This is the name that will appear in the application switcher bar in Workplace Managed Client. 5. Click Browse next to the icon field to choose an icon to display in the switcher bar. Click Next. 6. Choose the single view page layout and clear the Automatically create default views option, as shown in Figure 5-10. Click Next. Figure 5-10 Select a page layout for the Notes application view 7. Click Create New → Notes Template. Click Next. See Figure 5-11 on page 115. 114 IBM Workplace Managed Client: ISV Integration Guide Figure 5-11 Select Notes Template 8. Under View Type, select Data View → Get Database. Note: Data View allows different Notes elements, such as a particular view, to be opened. Another useful option is the Opened Item View, which displays any opened item. 9. Provide the appropriate information in the Server Name, User Name and Password fields and click Get Databases to retrieve a list of databases available on the server, as shown in Figure 5-12. Note: Clicking Get Databases without inputting any information in the Server Name, User Name, and Password fields retrieves local databases. Figure 5-12 Select Database window 10.Click OK → Finish → Finish. The Notes URL field is filled with the appropriate Notes URL, for example: notes:///<your-server>/booklist.nsf/Books?OpenView As an alternative to using the Developer Toolkit you can build a view from scratch using Eclipse. Refer to the following article, Creating a Notes/Domino plug-in with Eclipse, available at: http://www.ibm.com/developerworks/lotus/library/notes-plugin-eclipse Deploying the application to a Workplace Collaboration Services server See “Deploying the application to Workplace Collaboration Services server” on page 112 for information about how to deploy the Workplace application to a Workplace Collaboration Services server. Chapter 5. ISVs with Lotus Notes and Domino applications 115 Figure 5-13 shows the Book Database application as reparented through Workplace Managed Client. Figure 5-13 Book Database launched as a Workplace Managed Client application 5.4 Leverage The next level of integration with the Workplace Managed Client is leverage. As previously described in 5.3, “Accommodate” on page 107, in order to display a Notes/Domino natively within Workplace Managed Client, it can be wrapped with the Notes plug-in. This displays the application in its original form and, in addition, integrates it with the Workplace Managed Client toolbars, status bar, and so on. In many instances, the accommodate level of integration will be more than adequate. There are many other features of Workplace Managed Client available to an application that are not available through the Notes plug-in however. These include: Enabling server-side definition of an application’s view layout by creating one portlet per view Tabbed views Action bars Search bar Custom UI widgets – Rich text editor – Alerts – Collapse bar Custom views – Shelf views To leverage these components, you must implement a Java-based user interface. All data remains in a Domino database, with the Workplace Managed Client application accessing it either locally or remotely. There are two methods for remotely accessing a Domino server from a Java application: Using the public Notes/Domino Java APIs Exposing a Domino application using Web services For additional information regarding using the Notes Java APIs, see: http://www.higs.net/85256C89006A03D2/web/pageDominoJavaToolkit 116 IBM Workplace Managed Client: ISV Integration Guide We perform five steps to write a Workplace Managed Client application that accesses a Domino server for its storage needs: 1. Expose the Domino application using Web services. 2. Write the code for receiving and sending data to and from the Domino Web service. 3. Create a Workplace application project. 4. Write user interface code to display the data retrieved from the Web service. 5. Deploy the application on the Workplace Collaboration Services server. We describe these steps in the following sections. 5.4.1 Exposing a Domino application using Web services Web services are a new design element in Lotus Domino 7 that ISVs can develop using either the LotusScript or Java programming languages. ISVs can find Web services in the Shared Code section of the database design pane. The Web services design element implementation looks much like regular Domino agent design and has the same programming logic. The same basic security rules apply to Web services as apply to agents: A database access control list (ACL) for verifying access Run as Web User, as Signer, on Behalf of Restricted/unrestricted access to resources Public Access option Perform the following steps to expose the Notes/Domino database as a simple Web service. For these steps, we assume that you already created the Notes/Domino database Booklist.nsf, which stores information about a merchant’s current book inventory. Notes: To learn more about Lotus Notes and Domino 7 Web services, including how to expose a Notes/Domino database as a Web service, see the Redpaper Lotus Domino 7 Application Development, REDP-4102, at: http://www.redbooks.ibm.com/abstracts/redp4102.html For more information about using Notes APIs from Eclipse, refer to the developerWorks article, Creating a Notes/Domino plug-in with Eclipse, available at: http://www.ibm.com/developerworks/lotus/library/notes-plugin-eclipse/ 1. Open an existing Notes/Domino database using Domino Designer 7. Figure 5-14 on page 118 shows the Booklist.nsf database opened using Domino Designer 7. Chapter 5. ISVs with Lotus Notes and Domino applications 117 The action button to create Web service Link to create Web service Figure 5-14 The existing Notes/Domino database opened with Domino Designer 7 2. Click the Web Services link in the booklist database panel. Figure 5-14 shows the Web Services link in the booklist database panel to the left. This opens the Web services designer panel tab on the right side. 3. Click New Web Service in the action bar of the Web services designer panel to expose the Notes/Domino database application as a Web service. Figure 5-14 shows the New Web Service button on top of the Web services designer panel. This opens the Web Service properties dialog box. 4. On the Basic tab, specify the Web service's Name, Alias, and PortType class. Figure 5-15 on page 119 shows the Basic tab for the booklist application. The value set for Name, Alias, and PortType fields is BookManager for this example. Note: Selecting the option Warn if the WSDL interface is modified causes the service to display a message if the implied WSDL structure changes, such as revised class names, changed names of methods or functions, or added or removed class variables. In a production environment, such changes can cause existing software clients consuming your Web service to stop working because of errors in parsing the changed Web service response structure. Setting this option also prevents you from saving such changes and gives you a chance to review and change your code back. ISVs do not need to set this option during the creation and testing period. 118 IBM Workplace Managed Client: ISV Integration Guide Figure 5-15 Web Service dialog box: Basic tab 5. Click the Security tab. The Security tab, shown in Figure 5-16, looks the same as the Security tab in an agent's properties. Here, you can set the security options for the Web service. Figure 5-16 Web Service dialog box: Security tab 6. Go to the Advanced tab to specify the programming model and SOAP message format. Figure 5-17 shows the Advance tab properties set for the booklist application. Figure 5-17 Web Service dialog box: Advanced tab 7. Configuring the Web service parameters as explained in steps 4, 5, and 6 opens the Web Service tab for the Notes/Domino application. In the Web Service Options section, select LotusScript as the programming language. Note that LotusScript is set as the default language. Figure 5-18 on page 120 shows the Web Service Options section for the BookManager Web service. Chapter 5. ISVs with Lotus Notes and Domino applications 119 Figure 5-18 BookManager Web Service Options 8. Copy the simple LotusScript Web service code from Example 5-2 and paste it into the Declarations section of the Web service, as shown in Figure 5-19. Figure 5-19 BookManager Web Service Declarations Example 5-2 shows the code for the simple LotusScript Web service. Example 5-2 Code for the simple LotusScript Web service %INCLUDE "lsxsd.lss" Class BookManager Public Function getBookList () As String Dim Dim Dim Dim session As New NotesSession db As NotesDatabase dc As NotesDocumentCollection doc As NotesDocument Dim count As Integer count = 0 Set db = session.CurrentDatabase Set dc = db.AllDocuments Set doc = dc.GetFirstDocument() While Not(doc Is Nothing) If doc.booktitle(0) <> "" Then If count <> 0 Then getBooklist = getBooklist + "," getBooklist = getBooklist + doc.booktitle(0) count = count + 1 End If Set doc = dc.GetNextDocument(doc) Wend End Function 120 IBM Workplace Managed Client: ISV Integration Guide Function getBookInfo(bookTitle As String) As String Dim session As NotesSession Set session = New NotesSession Dim db As notesdatabase Dim view As notesview Dim doc As notesdocument Set db = session.GetDatabase("","booklist.nsf") Set view = db.GetView("Books") Dim doccol As NotesDocumentCollection Set doccol =db.FTSearch(bookTitle,1) If doccol.Count =0 Then getBookInfo = "" End If Set doc = doccol.GetFirstDocument If doc Is Nothing Then getBookInfo = "" Else getBookInfo = doc.booktitle(0)+","+doc.bookauthor(0)+"," +doc.bookdescription(0)+","+"12345678" End If End Function End Class 9. Save the Web service and validate the WSDL file for the Web service using the following link: http://<your-server>/<database-name>/<WebService-name>?WSDL Figure 5-20 on page 122 shows the WSDL file created for the BookManager Web service. Chapter 5. ISVs with Lotus Notes and Domino applications 121 Figure 5-20 Partial WSDL file for BookManager Web service 5.4.2 Communicating with Web service from Workplace Managed Client As shown in 5.4.1, “Exposing a Domino application using Web services” on page 117, an agent is exposing a Domino database using a Web service called BookManager. Two remote calls are supported: GETBOOKLIST: This returns a comma-separated string of book titles. GETBOOKINFO: This accepts a single parameter, a book title, and returns a single book record in a comma-separated string. For the more technically minded, Example 5-3 shows the WSDL snippet describing the methods and parameters. This is auto-generated by Domino and is not necessary to comprehend. Example 5-3 WSDL snippet describing the two methods exposed by the Domino BookManager agent <wsdl:message name="GETBOOKLISTRequest"/> <wsdl:message name="GETBOOKLISTResponse"> <wsdl:part name="GETBOOKLISTReturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="GETBOOKINFORequest"> <wsdl:part name="BOOKTITLE" type="xsd:string"/> </wsdl:message> <wsdl:message name="GETBOOKINFOResponse"> <wsdl:part name="GETBOOKINFOReturn" type="xsd:string"/> </wsdl:message> 122 IBM Workplace Managed Client: ISV Integration Guide Perform the following steps to access the Web service: 1. Set up the development environment, including installing the Workplace Managed Client Developer Toolkit, setting the target platform, and so on. For complete instructions about how to do this, refer to: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Download the toolkit from: http://www.alphaworks.ibm.com/tech/wmctoolkit It also comes as part of the Workplace Managed Client 2.6 SDK. 2. Create a new plug-in project: a. Click File → New → Project → Plug-in Development → Plug-in Project. b. Give the project a name, for example, com.ibm.wcttool.bookdatabase.delegate. c. Click Finish. This creates a new plug-in project with a plug-in class called DelegatePlugin. This project contains all the code that communicates with the Web service. 3. Add a dependency on the com.ibm.rcp.websphere.runtime plug-in. This contains all the classes that will be used to communicate with the Web service server. a. Open the plug-in descriptor file. This is either the plugin.xml file or the META-INF/MANIFEST.MF file, depending on whether or not the plug-in was created with an OSGI manifest or not. b. Click the Dependencies tab. c. Click Add and type com.ibm.rcp.websphere.runtime, as shown in Figure 5-21. Click OK. Add button Plug-in descriptor Plug-in dependency Figure 5-21 Adding the com.ibm.rcp.websphere.runtime plug-in as a dependency 4. Create a simple class to contain the information for a single book: a. Click File → New → Class. b. Give the class a name, for example, BookInfo, and a package, com.ibm.wcttool.bookdatabase.delegate. c. Add four private instance variables, title, author, description, and datePublished, as shown in Example 5-4 on page 124, as well as getter and setter methods for each of the variables. Chapter 5. ISVs with Lotus Notes and Domino applications 123 Example 5-4 Partial implementation of the BookInfo value object //BookInfo.java package com.ibm.wcttool.bookdatabase.delegate; import java.util.Date; public class BookInfo { private String title private String author private String description private Date datePublished = = = = null; null; null; null; //getter and setter methods go here.... } 5. Create an interface that contains all the methods exposed by the Web service. This is more of a design choice, and not absolutely necessary. However, it is good practice to hide the details of the type of communication used. a. Select File → New → Interface b. Give it a name, for example, IBookDatabaseDelegate, and a package, com.ibm.wcttool.bookdatabase.delegate. Click Finish. c. Add two methods, getTitles and getInfo, as shown in Example 5-5. Example 5-5 The Java interface class listing the methods that the Web service exposes //IBookDatabaseDelegate.java package com.ibm.wcttool.bookdatabase.delegate; import java.util.List; public interface IBookDatabaseDelegate { List getTitles(); BookInfo getInfo(String title); } 6. Create an implementation of the IBookDatabaseDelegate interface that communicates with the Web service and returns the requested information: a. Select File → New → Class. b. Give it a name, for example, BookDatabaseDelegateImpl, and a package, com.ibm.wcttool.bookdatabase.delegate.impl. c. Select IBookDatabaseDelegate as an interface that it implements. Click Add and type in IBookDatabaseDelegate. Click OK. The two required methods will be automatically created. d. Click Finish. 7. Add a generic method to the BookDatabaseDelegateImpl class that accepts the following values: – URL of the Web service – Operation name to invoke – Return type of the operation – Names of the parameters to pass to the Web service if any – Types of the parameters – Modes of the parameters 124 IBM Workplace Managed Client: ISV Integration Guide – Values of the parameters Example 5-6 shows the implementation of this method. Example 5-6 Generic method to invoke a Web service //BookDatabaseDelegateImpl.java import com.ibm.ws.webservices.engine.client.Call; import com.ibm.ws.webservices.engine.client.Service; import com.ibm.ws.webservices.engine.encoding.XMLType; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; //... private Object call(String url, QName opName, QName retType, String[] paramNames, QName[] paramTypes, ParameterMode[] paramModes, Object[] paramValues) throws RemoteException, ServiceException{ Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress (url); call.setOperationName( opName ); call.setReturnType(retType); //this method makes the assumption that the four arrays are all of the same length if(paramNames!=null && paramTypes!=null && paramModes!=null && paramValues!=null){ for(int i = 0; i < paramNames.length; i++){ call.addParameter(paramNames[i], paramTypes[i], paramModes[i]); } } if(paramValues == null){ paramValues = new Object[]{}; } Object responseObj = call.invoke(paramValues); return responseObj; } 8. Write the implementation of the getTitles method, which invokes the call method defined in the previous step. The GETBOOKLIST Web service returns a comma-separated list of book titles, and this is tokenized with a StringTokenizer. Note how, because no parameters are being passed to the Web service, the last four parameters of the call method are null. Example 5-7 Using call method to invoke getBookList Web service and tokenizing the resulting string //BookDatabaseDelegateImpl.java //... public List getTitles(){ List titles = new ArrayList(); try { Object responseObj = call(url,new QName("urn:DefaultNamespace", "getBooklist"),XMLType.XSD_STRING,null,null,null,null); //The response type is a String, as defined by the WSDL as shown earlier //The String contains a comma-separated list of book titles, which must be //tokenized String titlesString = (String) responseObj; Chapter 5. ISVs with Lotus Notes and Domino applications 125 if (titlesString != null){ StringTokenizer tok = new StringTokenizer(titlesString,","); while(tok.hasMoreTokens()){ titles.add(tok.nextToken()); } } } catch (Exception e) { e.printStackTrace(); } return titles; } 9. Implement the getBookInfo method of the BookDatabaseDelegateImpl class. This method takes a string as a parameter, passes that parameter to the getBookInfo Web service. The value returned is a comma-separated string containing the title, author, description, and date published, in that order. Example 5-8 gives the full implementation of this method. Note how the parameter name is BOOKTITLE, the parameter type is XMLType.XSD_STRING, the parameter mode is IN, and the value is the title parameter. Note: Java API for XML (JAX)-RPC uses pass by value semantics for parameter passing in a remote method invocation. Object-by-reference mode is not supported for remote method invocations. JAX-RPC specifies three rules for parameter passing and return values, IN, OUT, and INOUT: An IN parameter is passed as copy. The parameters value is copied before the remote method invocation.The return value is created as a copy and returned to the caller. The OUT and INOUT parameters are also passed by value. JAX-RPC uses the Holder classes to support the OUT and INOUT parameters. The client provides an instance of a Holder class that is passed by value for either the OUT or INOUT parameter. The contents of the Holder class are modified in the remote method invocation and the client uses the changed contents after the method invocation returns. Example 5-8 Implementation of getInfo method public BookInfo getInfo(String title) { BookInfo bookinfo = null; try { Object responseObj = call( url, // url of the web service new QName("urn:DefaultNamespace", "getbookinfo") , //name of web service XMLType.XSD_STRING, // return type new String[]{"BOOKTITLE"}, // parameter name new QName[]{XMLType.XSD_STRING}, // parameter type new ParameterMode[]{ParameterMode.IN}, // parameter mode new Object[]{title} ); // parameter value String titlesString = (String) responseObj; if (titlesString != null){ bookinfo = new BookInfo(); StringTokenizer tok = new StringTokenizer(titlesString,","); if(tok.countTokens() < 4){ return null; } 126 IBM Workplace Managed Client: ISV Integration Guide bookinfo.setTitle(tok.nextToken()); bookinfo.setAuthor(tok.nextToken()); bookinfo.setDescription(tok.nextToken()); bookinfo.setDatePublished(new Date(Long.parseLong(tok.nextToken()))); } } catch (Exception e) { e.printStackTrace(); } return bookinfo; } 10.Add a method to the DelegatePlugin class to return an instance of the BookDatabaseDelegateImpl class. All other plug-ins will use this method to retrieve the delegate. In this sample implementation, one delegate instance is created for each Web service URL, with the delegate storing the URL in a private instance variable. Example 5-9 shows the partial implementation of the DelegatePlugin class and the BookDatabaseDelegateImpl class. Example 5-9 Partial implementations of the DelegatePlugin and BookDatabaseDelegateImpl classes //DelegatePlugin.java public class DelegatePlugin extends Plugin { private Map delegates = new HashMap(); //... public IBookDatabaseDelegate getDelegate(String notesUrl){ IBookDatabaseDelegate delegate = (IBookDatabaseDelegate)delegates.get(notesUrl); if(delegate == null){ delegate = new BookDatabaseDelegateImpl(notesUrl); delegates.put(notesUrl,delegate); } return delegate; } } //---------------------------------------------------------------------------------------//BookDatabaseDelegateImpl.java import com.ibm.wcttool.bookdatabase.delegate.IBookDatabaseDelegate; public class BookDatabaseDelegateImpl implements IBookDatabaseDelegate { private String url = null; //... public BookDatabaseDelegateImpl(String url) { this.url = url; } //... } 11.Export the com.ibm.wcttool.bookdatabase.delegate package so that other plug-ins can access the classes contained in it: a. Open the plug-in descriptor file. This is either the plugin.xml file or the META-INF/MANIFEST.MF file, depending on whether or not the plug-in was created with an OSGI manifest or not b. Click the Runtime tab. c. Click Add and choose the com.ibm.wcttool.bookdatabase.delegate package. Click OK. Figure 5-22 on page 128 shows these steps. Chapter 5. ISVs with Lotus Notes and Domino applications 127 Click Add and choose package com.ibm.wcttool.bookdatabase.delegate Plug-in descriptor Runtime tab Figure 5-22 Exporting a package to make it visible to other plug-ins After completing these tasks, the com.ibm.wcttool.bookdatabase.delegate plug-in will contain a fully functional, albeit not precisely enterprise-ready, Web services client. 5.4.3 Creating a Workplace application project The next step is to create a new Workplace application project. To create the project, perform the following steps: 1. Select File → New → Project → IBM Workplace → Workplace Managed Client Application Project, and click Next. See Figure 5-23. Figure 5-23 Creating a new IBM Workplace Eclipse project 2. Give the project a name, for example, com.ibm.wcttool.bookdatabase, and a Display Name, such as Book Database, as shown in Figure 5-24 on page 129. 3. Associate the book.png file with the projects icon by clicking Browse next to the icon text box and choosing the file. Click Next. 128 IBM Workplace Managed Client: ISV Integration Guide Figure 5-24 Setting the Project name and Display Name Note: The application Display Name and icon appear on the application switcher bar on the left side of Workplace Managed Client. See Figure 3-6 on page 57 for an illustration of this. 4. Choose the multiple view page layout and do not select Automatically create default views, as shown in Figure 5-25. Click Next. Figure 5-25 Selecting the multiple view layout and to not Automatically create the default view classes 5. Now, create the three views. For the topmost view: a. Click Create New, choose the Basic Template, and click Next. b. Set the project name to com.ibm.wcttool.bookdatabase.address. c. Set the view ID to com.ibm.wcttool.bookdatabase.views.AddressView and click Finish. Chapter 5. ISVs with Lotus Notes and Domino applications 129 For the leftmost view: a. Click Create New, choose the List View template, and click Next. b. Set the project name to com.ibm.wcttool.bookdatabase.titlelist. c. Set the view ID to com.ibm.wcttool.bookdatabase.views.TitlelistView and click Finish. For the rightmost view: a. Click Create New, choose the Basic Template, and click Next. b. Set the project name to com.ibm.wcttool.bookdatabase.bookinfo. c. Set the view ID to com.ibm.wcttool.bookdatabase.views.BookinfoView and click Finish. This creates five new projects, a feature project, a page layout project, and three plug-in projects representing the three views to be shown, as shown in Figure 5-26: – The feature project, com.ibm.wcttool.bookdatabase, defines what plug-ins should be packaged as part of the application. – The page layout project, com.ibm.wcttool.bookdatabase.MainPage, manages the different pages and views (though only one of each is used in this example). – The three plug-in projects, com.ibm.wcttool.bookdatabase.address, com.ibm.wcttool.bookdatabase.titlelist, and com.ibm.wcttool.bookdatabase.bookinfo, contain the Eclipse view classes to be displayed. 6. For each of the three views, set the style to NO_TITLE, as shown in Figure 5-26. This removes the title bars from all three Eclipse views and gives the application a less segregated look and feel. View projects Page layout descriptor Feature descriptor Style set to NO_TITLE Figure 5-26 Initial layout of the projects for the Book Database sample application 130 IBM Workplace Managed Client: ISV Integration Guide 5.4.4 Creating the user interface The previous section showed how to create a Workplace Managed Client application project and how to automatically generate three view projects based on existing templates, with a single view (AddressView) on top, and two views (TitlelistView and BookinfoView) horizontally laid out below, as shown in Figure 5-26 on page 130. For the user interface: AddressView will contain a label, a text box, and a button. The user will enter the URL of the Notes Web service in the text box and click the button to submit it. TitlelistView will contain a list of all available books. This is populated when the user clicks the Submit button in AddressView. BookinfoView will display the information for a single book when the user double-clicks a boot title in TitlelistView. Inter-view communication Communication between views is performed using property listeners. For a quick introduction to using property listeners, see: http://www.ibm.com/developerworks/opensource/library/os-ecllink/ Or: http://java.sun.com/developer/onlineTraining/Beans/beans02/page3.html The central concept to take from this article is that there is a central object, called PropertyChangeSupport, on which listeners can be registered. These listeners are notified when a particular property is changed, a property that is identified by a String name. Each view has the ability to register one or more listeners and also to fire PropertyChangeEvents that other views will receive. In this sample application, we use two properties: PROPERTY_NOTES_URL, which contains the URL of the Web service being accessed PROPERTY_CURRENT_TITLE, which contains the title of the book being displayed This sample project uses a simple wrapper around the PropertyChangeSupport class, called PCSBean, as shown in Example 5-10. Use a single instance of this class, and to ensure this, the PCSBean class is instantiated by DelegatePlugin, and all views retrieve it from there. Example 5-10 shows this. Note that PCSBean caches all values in a HashMap object called propertyValues. Example 5-10 The PCSBean class //PCSBean.java public class PCSBean{ private java.beans.PropertyChangeSupport pcs; private Map propertyValues = new HashMap(); public PCSBean(){ pcs = new java.beans.PropertyChangeSupport(this); } public void addListener(String prop, java.beans.PropertyChangeListener pcl){ pcs.addPropertyChangeListener(prop, pcl); } public void firePropertyChange(String name, Object newVal){ pcs.firePropertyChange(new java.beans.PropertyChangeEvent(this,name,null,newVal)); } public Object getPropertyValue(String name){ return propertyValues.get(name); Chapter 5. ISVs with Lotus Notes and Domino applications 131 } } //--------------------------------------------------------------------------------------//DelegatePlugin.java public class DelegatePlugin extends Plugin { public static final String PROPERTY_NOTES_URL = "notesurl"; public static final String PROPERTY_CURRENT_TITLE = "currenttitle"; //... public PCSBean getSession() { if(session == null){ session = new PCSBean(); } return session; } } Implementing the address view The address view user interface is specified using a Composite class. In 5.4.3, “Creating a Workplace application project” on page 128, a Composite class was automatically generated in the com.ibm.wcttool.bookdatabase.address project called MyComposite. Rename this by right-clicking the file, selecting Refactor → Rename, and typing the new name AddressComposite. This helps avoid confusion later in the chapter, because the other two auto-generated views also contain classes named MyComposite. AddressComposite is a visual class that can be altered using the Visual Editor for Eclipse. Note: Download Visual Editor for Eclipse from the following site if it is not already installed: http://www.eclipse.org/vep For numerous documents explaining its use, refer to: http://www.eclipse.org/vep/WebContent/docs/doc.html Perform the following steps to complete the AddressComposite class: 1. The three controls, a label, a text box and a button, must be added to the UI. To do this, use the palette located on the right of the Eclipse window. Figure 5-27 shows the controls. Figure 5-27 The AddressComposite as seen in the Visual Editor 2. Add a SelectionListener to the Submit button, which retrieves the text typed into the text box and fires a property change event. Example 5-11 shows how to do this. Note the parameters passed to the firePropertyChange method. The first parameter specifies the property that has changed, and the second specifies the new value of the property. Listeners for this property change will be notified of this new value. Example 5-11 Adding a SelectionListener to the Submit button to fire a property change event //AddressComposite.java //... public class AddressComposite extends Composite { //.. btnSubmit.addSelectionListener(new SelectionListener(){ 132 IBM Workplace Managed Client: ISV Integration Guide public void widgetSelected(SelectionEvent ev) { if(textAddr.getText() != null ){ DelegatePlugin.getDefault().getSession(). firePropertyChange(DelegatePlugin.PROPERTY_NOTES_URL,textAddr.getText()); } } public void widgetDefaultSelected(SelectionEvent ev) {widgetSelected(ev);} }); //... } Implementing the title list view In 5.4.3, “Creating a Workplace application project” on page 128, we created the project com.ibm.wcttool.bookdatabase.titlelist, which contains one Eclipse view class, TitlelistView, and a SWT Composite class, MyComposite. As mentioned in the previous section, it is advisable to rename MyComposite. Right-click the file, select Refactor → Rename, and enter the new name TitleComposite. TitleComposite already contains an org.eclipse.swt.widgets.List widget, because it was created using the List template by the Workplace Managed Client Developer Toolkit. Three simple tasks must now be performed: 1. Add a PropertyChangeListener that listens for a change to the PROPERTY_NOTES_URL property. 2. Populate the list box with the titles of the books when the PROPERTY_NOTES_URL property changes. 3. Modify the existing listener on the list box to fire a property change event, notifying all listeners that the currently selected book has changed. Adding a PropertyChangeListener for the PROPERTY_NOTES_URL property In the createPartControl method of the TitlelistView class, place the code shown in Example 5-12 to refresh the list of books when the URL to the Web service changes. Note how the first parameter of the addListener method specifies the property change being listened for, while the second parameter specifies the action to be taken when the event occurs. Example 5-12 Adding a listener for a change in the PROPERTY_NOTES_URL property //TitlelistView.java public class TitlelistView extends ViewPart { //... public void createPartControl(Composite parent) { composite = new TitleComposite(parent, parent.getStyle()); composite.redraw(); DelegatePlugin.getDefault().getSession().addListener( DelegatePlugin.PROPERTY_NOTES_URL, //the property change to listen for new PropertyChangeListener(){ //the action to perform when the event occurs public void propertyChange(PropertyChangeEvent ev) { refreshList(ev.getNewValue());//refreshes the list. Shown in next section } } ); } } Chapter 5. ISVs with Lotus Notes and Domino applications 133 Populating the list box To populate the list box with the titles of the books in the database, the Web service must be accessed using the delegate plug-in. Define two methods: refreshList in the TitlelistView class to access the delegate plug-in and retrieve the list of books setList in the TitleComposite class to add the list of books to the list box Example 5-13 shows both these methods. Example 5-13 Retrieve the list of book titles from the Web service and populate the list box with them //TitlelistView.java public class TitlelistView extends ViewPart { //... private void refreshList(Object value){ if(value == null || value.toString().equals("")){ composite.setList(new ArrayList()); return; } IBookDatabaseDelegate delegate = DelegatePlugin.getDefault().getDelegate(value.toString()); composite.setList(delegate.getTitles()); } //---------------------------------------------------------------------------------------//TitleComposite.java public class TitleComposite extends Composite { //... public void setList(java.util.List newlist) { this.list.removeAll(); //clear any items currently in the list box for(Iterator it = newlist.iterator(); it.hasNext();){ this.list.add((String)it.next()); } } } Modifying the existing list box listener Example 5-14 shows how to add a listener to the list box that fires a PropertyChangeEvent for the PROPERTY_CURRENT_TITLE property when the user double-clicks an item in the list box. Example 5-14 Adding a listener that fires a property change for PROPERTY_CURRENT_TITLE //TitleComposite.java //... public class TitleComposite extends Composite { private org.eclipse.swt.widgets.List list; //... private void addListeners(){ list.addListener(SWT.MouseDoubleClick, new Listener() { public void handleEvent(Event event) { String item = list.getItem(list.getSelectionIndex()); if (item != null) { DelegatePlugin.getDefault().getSession(). firePropertyChange(DelegatePlugin.PROPERTY_CURRENT_TITLE,item); } } }); } } 134 IBM Workplace Managed Client: ISV Integration Guide Implementing the book information view The book information view displays four pieces of information about the currently selected book: Title Author Date published Description The project com.ibm.wcttool.bookdatabase.bookinfo was automatically generated when creating the Workplace Managed Client application project in 5.4.3, “Creating a Workplace application project” on page 128 and contains a Composite class called MyComposite. Perform the following steps to design the view to display the book information: 1. Rename the file InfoComposite. 2. Design the layout. 3. Add listeners for property changes. 4. Retrieve book information for a single book and update the view with it. Renaming the MyComposite class As with the previous two views, rename this class: 1. Right-click the MyComposite file. 2. Select Refactor → Rename and type the name InfoComposite. Designing the layout InfoComposite is a visual class that can edited using the visual editor. Using the palette bar to the right of the Eclipse workbench, design the layout similar to that shown in Figure 5-28. Figure 5-28 Layout of the InfoComposite class Adding listeners for property changes The book information view listens for a change in the DelegatePlugin.PROPERTY_CURRENT_TITLE property. When this property changes, it retrieves the information for a single book using DelegatePlugin and updates the InfoComposite class. Example 5-15 shows how this is implemented in the sample code. Example 5-15 Adding a PropertyChangeListener for the property PROPERTY_CURRENT_TITLE //BookinfoView.java public class BookinfoView extends ViewPart { //... public void createPartControl(Composite parent) { Chapter 5. ISVs with Lotus Notes and Domino applications 135 mycomposite = new InfoComposite(parent, parent.getStyle()); mycomposite.redraw(); DelegatePlugin.getDefault().getSession().addListener( DelegatePlugin.PROPERTY_CURRENT_TITLE,//The property to listen for new PropertyChangeListener(){ //The action to perform public void propertyChange(PropertyChangeEvent ev) { setInfo(ev.getNewValue()); //This is defined in the next section } } ); } } Retrieving book information and updating the view The code that uses DelegatePlugin to retrieve book information is placed inside the setInfo method, which is invoked when the PROPERTY_CURRENT_TITLE property changes, as shown in Example 5-15 on page 135. Example 5-16 shows the changes necessary in the BookinfoView and InfoComposite classes. Example 5-16 Retrieving book information and updating the user interface //BookinfoView.java public class BookinfoView extends ViewPart { //... private void setInfo(Object val){ String url = (String)DelegatePlugin.getDefault().getSession(). getPropertyValue(DelegatePlugin.PROPERTY_NOTES_URL); BookInfo info= DelegatePlugin.getDefault().getDelegate(url).getInfo(val.toString()); mycomposite.setInfo(info); } } //-------------------------------------------------------------------------------------//InfoComposite.java public class InfoComposite extends Composite { //... public void setInfo(BookInfo newInfo){ this.info = newInfo; labelTitle2.setText(info.getTitle()); labelAuthor2.setText(info.getAuthor()); labelDate2.setText(info.getDatePublished().toString()); labelDesc2.setText(info.getDescription()); } } 5.4.5 Deploying the application to a Workplace Collaboration Services server See “Deploying the application to Workplace Collaboration Services server” on page 112 for information about how to deploy the Workplace application to a Workplace Collaboration Services server. After completing all the necessary tasks, the user interface should look similar to the one shown in Figure 5-29 on page 137. 136 IBM Workplace Managed Client: ISV Integration Guide Address View List View Book Info View Figure 5-29 Final Workplace Managed Client acting as Web service client to Domino database 5.5 Exploit As stated in the introduction, complete seamless integration occurs as an ISV chooses to fully exploit the capabilities of Workplace Managed Client. One option for exploitation of Workplace Managed Client is to create Eclipse plug-in views as alternative front ends to a Domino portlet. If continued evolution is desired, the Notes data also can be accessed by custom server-side adaptors, with a complete re-implementation of the experience and service logic as IBM Workplace Managed Client parts. For example, Notes workflow agents contained in server-side databases can be activated as remote Web services. For more information about fully exploiting the Workplace Managed Client, see Chapter 6, “Exploiting IBM Workplace Managed Client” on page 139. 5.6 Summary There are several options for integrating an existing Lotus Notes/Domino application. Workplace Managed Client V2.6 comes with a prebuilt plug-in to help ease the speed and seamlessness of a Notes integration, which might prove to be more than enough to fill many ISV business needs. Further integration options include keeping the data stored on a Notes database while creating a Java front end. 5.7 URLs referenced in this chapter Table 5-2 on page 138 lists the URL referenced in this chapter. Chapter 5. ISVs with Lotus Notes and Domino applications 137 Table 5-2 List of URLs referred to in this chapter 138 What Where Creating a Notes/Domino plug-in with Eclipse http://www.ibm.com/developerworks/lotus/li brary/notes-plugin-eclipse/ IBM Workplace Collaboration Services http://www.ibm.com/lotus/workplace Introduction to the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/lotus/li brary/wmc-toolkit/index.html IBM Workplace Managed Client Developer Toolkit http://www.alphaworks.ibm.com/tech/wmctool kit A quick introduction to using property listeners http://java.sun.com/developer/onlineTraini ng/Beans/beans02/page3.html Visual Editor for Eclipse http://www.eclipse.org/vep Document library for using Visual Editor for Eclipse http://www.eclipse.org/vep/WebContent/docs /doc.html IBM Workplace Managed Client: ISV Integration Guide 6 Chapter 6. Exploiting IBM Workplace Managed Client This chapter describes a number of the ways in which you can enhance an application to fully exploit the many services that the IBM Workplace Managed Client platform offers. ISVs that want to tightly integrate their applications with Workplace Managed Client can then use the numerous features that add greatly to the functionality of any application. These include: Document libraries for sharing documents with team members Messaging and notification Online awareness Synchronization between local and remote data stores, enabling offline operation Secure database access Security through the client credential store © Copyright IBM Corp. 2006. All rights reserved. 139 6.1 Overview The Workplace Managed Client platform offers numerous powerful features to applications that run on the platform. You can achieve a full, seamless integration of an existing application into Workplace Managed Client by exploiting all the elements of the framework that add value and functionality to the product. What services should be used will vary from product to product. Some of the most useful services are: Document libraries for sharing documents with teammates Messaging and notification Online awareness Secure database access Synchronization between local and remote data stores, enabling offline operation Securing the client application A number of the code samples in this chapter use the IBM Workplace Software Development Kit (formerly IBM Workplace Collaboration Services API Toolkit), which can be downloaded at: http://www.lotus.com/ldd/lwpapi By following the instructions that come with the kit after it is installed, you must add it as a dependency to the application. Define two dependencies: Add the com.ibm.workplace.api plug-in as a dependency in the plugin.xml file. This ensures that the API class files can be found both at compile and run time. Example 6-1 shows how this is done. Example 6-1 Partial plugin.xml file defining the dependency on the com.ibm.workplace.api plug-in <!--plugin.xml--> <requires> <import plugin="com.ibm.workplace.api"/> ... </requires> Add the com.ibm.workplace.api.feature feature as a dependency in the feature.xml file that defines the plug-ins included in the application. This ensures that when the application is provisioned from the server to the client, the com.ibm.workplace.api.feature feature will also be provisioned. This is necessary because the server only sends the features that are required. Therefore, if no feature specifies that it requires the public APIs, they will not be downloaded and installed. See Example 6-2. Example 6-2 XML snippet from the feature.xml file adding com.ibm.workplace.api.feature <!--feature.xml--> <requires> <import feature="com.ibm.workplace.api.feature" version="2.5.1"/> ... </requires> Figure 6-1 on page 141 shows the location of the two XML files that must be modified. 140 IBM Workplace Managed Client: ISV Integration Guide Figure 6-1 The feature.xml and plugin.xml files 6.2 Working with document libraries Document libraries enable users to store files in a shared file store, organized into folders and secured using access control policies. Document libraries can work in both offline and online modes and can greatly enhance and simplify the secure sharing of files among a group of users. Users can create libraries both locally on their workstation and remotely on a Workplace Collaborative Services server. They can also choose to make any document library available in offline mode, which results in remote libraries being replicated to the client machine. The Workplace Collaborative APIs for document libraries support both online and offline modes of operation and present a single interface for applications using the API. Adding support for document libraries to an application is a relatively easy task. There are a number of operations that can be performed with the Workplace Collaborative APIs. These include: Create document library Create document Create folder List the contents of a library or folder This list is far from complete, and it merely lists the aspects that we discuss in this chapter. For a complete list, see the documentation that comes with the kit. The examples in this section build on the Delivery Manager application described in Chapter 2, “ISVs with Eclipse applications” on page 17. The document library functionality is built into its report generation facility, where a generated report can be saved into any document library to which the user has access. Figure 6-2 on page 142 shows how the Delivery Manager application can store reports in an existing document library, create a new library, and create folders in a library. The user also has the option of creating a new document library by opening the Warehouse view, clicking the Report button, clicking the Create Library button, and giving the library a name. Chapter 6. Exploiting IBM Workplace Managed Client 141 Click to generate a report List of available document libraries Click to save to a document library Click to create a new document library Figure 6-2 The Delivery Manager application with document libraries 6.2.1 Creating a document library A document library is a specialized type of IBM Workplace application; others are team spaces, chat rooms, and so on. For this reason, the ApplicationService class is used to create a document library rather than the DocumentLibraryService class. To create a document library using the Delivery Manager sample application, select a warehouse in the navigation pane, click the Report button in the Warehouse view, and then click the Create Library button. Note: For more information about IBM Workplace collaborative applications, see: http://publib.boulder.ibm.com/infocenter/iwphelp/v2r5m1/index.jsp?topic=/com.ibm.wcs. ic.doc_2.5.1/infocenter/i_ovr_r_whatsnew.html Perform the following steps to create a document library. 1. Create the factory and service classes. Example 6-3 on page 143 shows how to do this. 142 IBM Workplace Managed Client: ISV Integration Guide Example 6-3 Creating the service and factory classes //DlgReport.java import com.ibm.workplace.api.app.service.ApplicationService; import com.ibm.workplace.api.app.service.ApplicationTemplateService; //... ApplicationService appService = mServiceFactory.createApplicationService(); ApplicationFactory appFactory = FactoryCreator.createApplicationFactory(); 2. Retrieve the application template for document libraries. A template is defined by both a category and a name within that category. The default template categories and names are defined in the com.ibm.workplace.api.app.template.data.ApplicationTemplateConstants class. As shown in Example 6-4, ApplicationTemplateRetrievalOptions can be created for more fine-grained control over how much data is pulled from the server. Tip: For more information about IBM Workplace templates, see the Redpaper Building a Component for IBM Workplace, REDP-3952: http://www.redbooks.ibm.com/abstracts/redp3952.html Example 6-4 Retrieving the document library standard template //DlgReport.java import com.ibm.workplace.api.app.template.data.ApplicationTemplate; import com.ibm.workplace.api.app.template.data.ApplicationTemplateConstants; import com.ibm.workplace.api.app.template.data.ApplicationTemplateRetrievalOptions; //... ApplicationTemplateService appTemplateService = mServiceFactory.createApplicationTemplateService(); ApplicationTemplateFactory appTemplateFactory = FactoryCreator.createApplicationTemplateFactory(); ApplicationTemplateRetrievalOptions atro = appTemplateFactory.createApplicationTemplateRetrievalOptions(); atro.setIncludeUsers(false); atro.setIncludeEditors(false); atro.setRetrieveCompleteMembers(false); // Retrieve the ApplicationTemplate using the TEMPLATE_CATEGORY_DOCUMENTLIBRARY // and TEMPLATE_NAME_DOCUMENTLIBRARY constants from the // ApplicationTemplateConstants class ApplicationTemplate template = appTemplateService.getTemplateByName( ApplicationTemplateConstants.TEMPLATE_CATEGORY_DOCUMENTLIBRARY, ApplicationTemplateConstants.TEMPLATE_NAME_DOCUMENTLIBRARY, atro); 3. Use the application template to create the document library. An ApplicationCreationOptions object is used to specify the various parameters for the library, such as its name, description, and template ID, as shown in Example 6-5. Example 6-5 Setting the library parameters and creating the document library application //DlgReport.java import com.ibm.workplace.api.app.application.data.ApplicationCreationOptions; //... String name = “NewLibrary”; String description = “New Library Description”; Chapter 6. Exploiting IBM Workplace Managed Client 143 ApplicationCreationOptions opt = appFactory.createApplicationCreationOptions(); opt.setName(name); opt.setDescription(description); opt.setTemplateId(template.getId());//set the template id retrieved earlier opt.setAlias(name); appService.createApplication(opt);//create the document library Important: The com.ibm.workplace.api.document.service.DocumentLibraryService interface contains the method addLibrary(DocumentLibrary). It is worth noting that this does not create a document library that a user can access through the user interface. To create a proper document library application, follow the steps outlined in this section. 6.2.2 Creating a new document in a document library Workplace Managed Client allows files to be created programmatically and stored in a document library. In the Delivery Manager sample application, this can be seen when generating and saving a warehouse report. To do this: 1. Select a warehouse from the navigation pane on the left. 2. In the Warehouse view, click Report → Save. 3. Choose a document library and optionally a folder in which to save the document from the list that is presented. If the user has selected a document library, a folder named WarehouseReports is created, for instructional purposes, and the report saved to that folder. If the user has selected a folder, the report is simply saved to that folder. Perform the following steps to create a new document in a document library: 1. Instantiate DocumentLibraryService and DocumentFactory objects. DocumentLibraryService provides services to manage IBM Workplace document libraries. You can use this service to create, delete, and modify folders and documents. DocumentFactory creates data objects used by the Workplace Collaboration Services DocumentLibraryService API. Example 6-6 shows how to create these two objects. Example 6-6 Creating DocumentLibraryService and DocumentFactory objects //DlgReport.java import com.ibm.workplace.api.document.service.DocumentLibraryService; import com.ibm.workplace.api.factory.DocumentFactory; import com.ibm.workplace.api.factory.FactoryCreator; //... DocumentLibraryService mDocLibService = FactoryCreator.createServiceFactory().createDocumentLibraryService(); DocumentFactory mDocFactory = FactoryCreator.createDocumentFactory(); 2. Create a new Document object using the DocumentFactory object and save it using the DocumentLibraryService object created earlier, as shown in Example 6-7 on page 145. 144 IBM Workplace Managed Client: ISV Integration Guide Example 6-7 Creating a new document in a document library //DlgReport.java import com.ibm.workplace.api.document.data.Document; //.... private boolean createDocument(String libId,String folderId,String docName,byte[] contents) { try { //First create the document Document doc = mDocFactory.createDocument(); //Set the various parameters on the document doc.setLibraryId(libId); doc.setParentFolderId(folderId); doc.setContent(mHTML.getBytes()); doc.setName(docName); doc.setFileName(docName); doc.setDescription("This is a Warehouse Report created on "+ (new Date()).toString()); //Tell the DocumentLibraryService to add the new document to the library mDocLibService.addEntry(doc); return true; } catch (WorkplaceException e) { e.printStackTrace(); return false; } } 6.2.3 Creating a new folder in a document library You can create folders programmatically in Workplace Managed Client using the DocumentLibraryService class. In the Delivery Manager sample application, a folder named WarehouseReports is created when the user saves a report to the root folder of a document library. To do this: 1. Select a warehouse from the navigation pane on the left. 2. In the Warehouse view, click Report → Save. 3. Choose a document library in which to save the document from the list that is presented. To programmatically create a new folder in a document library: 1. Instantiate DocumentLibraryService and DocumentFactory objects, as shown in Example 6-6 on page 144. 2. Create a new DocumentFolder object and add it to the document library, as shown in Example 6-8. Example 6-8 Creating a new folder in a document library //DlgReport.java import com.ibm.workplace.api.document.data.DocumentFolder; //... private DocumentFolder createFolder(String libId, String folderId, String parentFolder,String description) throws WorkplaceException{ DocumentFolder reportFolder = mDocFactory.createDocumentFolder(); reportFolder.setLibraryId(libId); reportFolder.setName(REPORT_FOLDER); Chapter 6. Exploiting IBM Workplace Managed Client 145 reportFolder.setDescription("Folder for storing Warehouse Reports"); reportFolder.setParentFolderId("/");//place it at the root folder mDocLibService.addEntry(reportFolder); return reportFolder; } 6.2.4 Listing the contents of a library or folder Whether to display the contents of a document library in a tree or list view, or perhaps to scan for a particular file, there are many reasons why you might want to list the contents of a library or a folder within a library. There are three different methods for listing the contents of document libraries: Listing all the document libraries to which the current user has access Listing the contents of the base folder of a library Listing the contents of any subfolder of a library Each of these is performed slightly differently, and we explain each in the following three sections. All of the examples use the same retrieval options, specified in a DocumentRetrievalOptions object. In Example 6-9, the object is instantiated and set up to retrieve just the child objects one level down from the currently retrieved entries. This allows a programmer to fill the list of contents of a document library gradually as required. Example 6-9 shows a partial implementation of the ITreeContentProvider interface, which a JFace TreeViewer uses to request data for its tree display. Example 6-9 Partial implementation of the ITreeContentProvider interface //DocLibContentProvider.java import com.ibm.workplace.api.document.service.DocumentLibraryService; import com.ibm.workplace.api.factory.DocumentFactory; import com.ibm.workplace.api.factory.FactoryCreator; import org.eclipse.jface.viewers.ITreeContentProvider; public class DocLibContentProvider implements ITreeContentProvider{ private DocumentFactory mFactory; private DocumentRetrievalOptions mRetrievalOptions; private DocumentLibraryService mService; public DocLibContentProvider(){ try { mFactory = FactoryCreator.createDocumentFactory(); mRetrievalOptions = mFactory.createDocumentRetrievalOptions(); //don’t download the contents of files. If just the metadata is required //then this is a much faster option mRetrievalOptions.setIncludeDocumentContent(false); mRetrievalOptions.setRetrieveCompleteMembers(true); //only get one more level of information each time it is requested mRetrievalOptions.setDescendantDepth(DocumentRetrievalOptions.DEPTH_CHILDREN); } catch (WorkplaceException e){ e.printStackTrace(); } } public void inputChanged(Viewer viewer, Object oldInput, Object newInput){ mService = (DocumentLibraryService)newInput; } //.... } 146 IBM Workplace Managed Client: ISV Integration Guide Listing all document libraries To get a list of the available document libraries, use the DocumentLibraryService.getLibraryDescriptions method. Example 6-10 shows how an array of DocumentLibraryDescription objects is retrieved in the Delivery Manager application. Example 6-10 Retrieving a list of document library description objects //DocLibContentProvider.java //.... public class DocLibContentProvider implements ITreeContentProvider{ //... private DocumentLibraryDescription[] getDocumentLibraryDescriptions( DocumentLibraryService dls) throws WorkplaceException{ //get the list of DataObjectList dol = dls.getLibraryDescriptions(); List objs = dol.getObjects(); DocumentLibraryDescription[] contents = new DocumentLibraryDescription[objs.size()]; for(int i = 0; i< contents.length; i++){ contents[i] = (DocumentLibraryDescription)objs.get(i); } return contents; } //... } Listing the contents of a document library root folder To retrieve the list of files and folders in a document library’s root folder, use DocumentLibraryService.getEntries(String libraryId, DocumentRetrievalOptions). This returns a DataObjectList value object containing a list of DocumentFolderEntry objects, each of which can be either a folder or a file. Example 6-11 shows how this is performed in the Delivery Manager application. To see this in effect in the Delivery Manager application: 1. Select a warehouse from the navigation pane on the left. 2. In the Warehouse view, click Report → Save. 3. Click the + sign beside a document library to expand its root folder contents. This assumes that document libraries exist to which the user has access and that folders exist within that document library. Example 6-11 Retrieving the list of files and folders in a document library’s root folder //DocLibContentProvider.java //.... public class DocLibContentProvider implements ITreeContentProvider{ //... private DocumentFolderEntry[] getDocumentLibraryContents(DocumentLibraryDescription desc) throws WorkplaceException{ String libraryId = desc.getId(); //get the list of library entries in a library DataObjectList dol = mService.getEntries(libraryId, mRetrievalOptions); List newList = dol.getObjects(); DocumentFolderEntry[] contents = new DocumentFolderEntry[newList.size()]; int pos = 0; Chapter 6. Exploiting IBM Workplace Managed Client 147 for (Iterator i = newList.iterator(); i.hasNext(); pos++){ DocumentLibraryEntry entry = (DocumentLibraryEntry)i.next(); contents[pos] = entry; } return contents; } //... Listing the contents of a subfolder of a document library Retrieving the contents of a folder differs from retrieving the contents of the root folder of a document library. The DocumentFolder.getEntries method is used to get a list of DocumentFolderEntry objects. DocumentFolderEntry is a super interface of both Document and DocumentFolder, and therefore getEntries can return both documents and folders. Example 6-12 shows how a list of DocumentFolders contents are retrieved in the Delivery Manager application. To list the contents of a subfolder in the Delivery Manager application: 1. Select a warehouse from the navigation pane on the left. 2. In the Warehouse view, click Report → Save. 3. Click the + sign beside a document library to expand its root folder contents. 4. Click the + sign beside one the folders to display its subfolders. This assumes that document libraries exist to which the user has access and that folders exist within that document library that have other folders within them. Example 6-12 Getting the content list of a folder in the Delivery Manager application //DocLibContentProvider.java //.... public class DocLibContentProvider implements ITreeContentProvider{ //... private DocumentFolderEntry[] getDocumentFolderContents(DocumentFolder folder){ if(folder == null || folder.getEntries().size() == 0){ return new DocumentFolderEntry[0]; } List newList = folder.getEntries(); DocumentFolderEntry[] contents = new DocumentFolderEntry[newList.size()]; int pos = 0; for (Iterator i = newList.iterator(); i.hasNext(); pos++){ DocumentFolderEntry entry = (DocumentFolderEntry)i.next(); contents[pos] = entry; } return contents; } //... 6.3 Messaging and notification You can use the mail service API provided in the Workplace Software Development Kit (formerly Workplace Collaboration Services API Toolkit) to manage the mailbox on the Workplace Managed Client. 148 IBM Workplace Managed Client: ISV Integration Guide In order to use the mail APIs in a Workplace Managed Client application: A dependency must be created between the application’s feature Workplace API feature. This ensures that the Software Development Kit is provisioned down to the client, because it will only be installed if another application requires it. See Example 6-2 on page 140 for more information. A dependency must be created between each plug-in using the API and the API plug-in. This ensures both that the application will compile and that it can find the Collaborative API classes at run time. See Example 6-1 on page 140 for more details about how to do this. Example 6-13 shows how the Delivery Manager application sends mail notifications when a warehouse report is generated. This requires the following steps: 1. Import the required classes. 2. Instantiate a ServiceFactory class. This class is used to create all other service classes in the Collaborative APIs, for example, MailService, DocumentLibaryService, and DiscussionService. 3. Instantiate a MailService class. MailService provides access to IBM Workplace Messaging services. It can be used to send mail messages and to create, delete, and modify folders and messages in the currently-authenticated user's mailbox. 4. Instantiate a MailFactory class. MailFactory creates data objects used by the Workplace Collaboration Services MailService API such as mail messages, folders, and attachments. 5. Create a MailMessage object using the MailFactory, and set the values of the To, Subject, Body, and Sender fields. A number of other fields can also be set, for example, the attachments and CC list. 6. Send the message using the MailService object. Note: At no point is it necessary to log in to the mail server. This is because the mail API uses the credentials of the currently authenticated user, and the ability to access or modify data is determined by that user’s permissions. Example 6-13 Sending a mail message using the Collaborative APIs //DlgReport.java import org.eclipse.jface.viewers.ITreeContentProvider; import com.ibm.workplace.api.factory.FactoryCreator; import com.ibm.workplace.api.factory.MailFactory; import com.ibm.workplace.api.factory.ServiceFactory; import com.ibm.workplace.api.mail.data.MailMessage; import com.ibm.workplace.api.mail.data.MailSendOptions; import com.ibm.workplace.api.mail.service.MailService; //... public class DocLibContentProvider implements ITreeContentProvider{ private ServiceFactory mServiceFactory = null; private MailService mMailService = null; private MailFactory mMailFactory = null; //... private void sendEmail(String to,String from,String subject,String body,boolean saveMsg) throws WorkplaceException{ if(mServiceFactory == null){ mServiceFactory = FactoryCreator.createServiceFactory(); } Chapter 6. Exploiting IBM Workplace Managed Client 149 if(mMailService mMailService } if(mMailFactory mMailFactory } MailMessage msg == null){ = mServiceFactory.createMailService(); == null){ = FactoryCreator.createMailFactory(); = mMailFactory.createMailMessage(); msg.setBodyText(body); msg.getTo().add(to); msg.setSubject(subject); msg.setSender(sender); MailSendOptions opt = mMailFactory.createMailSendOptions(); opt.setSaveMessage(saveMsg); mMailService.sendMessage(msg,opt); } } Note: When using methods in MailService that create or update resources, the objects are not automatically synchronized with the corresponding resources. This means that the objects do not necessarily reflect the current state of their corresponding resources, even if no other user has made changes to those resources since they were retrieved. If the updated objects are intended to be used in future operations, they should be retrieved again after they have been altered. For example, after calling addEntry(MailFolderEntry) or updateEntry(MailboxEntry), the MailFolderEntry or MailboxEntry objects should be retrieved again if they are to be used again. Important: Note the following caveats to using the mail APIs: The mail API methods cannot access a user's mailbox until the mailbox has been created, for example, when the user accesses the mailbox for the first time in the IBM Workplace user interface. Mailbox updates made using these methods might not be visible in the user interface until the next time the user logs in. There is a defect in the 2.5.1 IBM Workplace Collaboration Services API Toolkit where certain internal initialization steps are not performed correctly until the messaging application has been opened. Therefore, before the mail API can be used each time the client is booted, the messaging application must be opened; otherwise, the APIs will not function correctly. This has been fixed for the 2.6 release. See the Release Notes in the toolkit for more information. For more information about the mail API, see the documentation that comes with the Workplace Software Development Kit. 6.4 Online and offline awareness IBM Workplace Client Technology supports building applications that are able to operate while disconnected from a network. Applications that are disconnected from a network use data stored locally on the client to seamlessly interact with users. The local data is a replica of 150 IBM Workplace Managed Client: ISV Integration Guide data stored on the server and that is synchronized using the data synchronization facilities provided by the Workplace Client Technology platform. Taking the Workplace Managed Client offline is a user-initiated and controlled process. The offline capability is not designed to react to unplanned network connection losses. The offline capabilities of the client are provided by the following APIs: Offline Manager: This provides a public API for initiating transitions in the client’s disconnected operating mode and is responsible for coordinating the transition of the client to a disconnected state and for notifying applications of such state changes so that applications can prepare for the change. Some applications need to complete tasks before the client can go offline. For example, an application using a remote store must switch to using a local one or another application that is relying on network resources or services, such as instant messaging, must disable those functions. Applications register for offline state change notifications by implementing the IOfflineService interface. The Offline Manager generates a sequence of state-change events to prompt any applications registered to receive such notifications to transition to the next state. Table 6-1 shows the series of states through which the Offline Manager transitions. Table 6-1 The various states of an offline aware application State Description Online The client is connected to the network and applications are operating in a connected operating mode. OfflineRequested The user requests to disconnect from the network. On entry into this state, the OfflineRequested event is signaled to notify applications of the request. This is a transient state. OfflinePending The Offline Manager has finished notifying applications of the OfflineRequested event and the request has not been cancelled. On entry into this state, the GoOffline event is signaled to notify applications to switch to disconnected operating mode. This is a transient state. Offline The client is connected to the network and applications are operating in a disconnected operating mode. OnlineRequested A user requests to go online. On entry into this state, the OnlineRequested event is signaled to notify applications of the request. This is a transient state. OnlinePending The Offline Manager has finished notifying applications of the OnlineRequested event and the request has not been cancelled. On entry into this state, the GoOnline event is signaled to notify applications to switch to connected operating mode. This is a transient state. Figure 6-3 on page 152 shows the state transitions sequence. Chapter 6. Exploiting IBM Workplace Managed Client 151 Figure 6-3 The offline life cycle Offline Service: This provides interfaces and helper classes, including IOfflineService, that an application can use to identify what state it is currently in and what tasks it can perform in the current state. Offline User Interface: This adds a File → Work Offline menu option or an Offline toggle button in the status bar that triggers the transition in the state of the application from online to offline. When a user clicks the Offline button or selects the Work Offline menu item, the Offline User Interface API calls the Offline Manager to start transitioning the client to a disconnected state. This class is provided in the com.ibm.workplace.offline plug-in. 6.4.1 The Offline API The Workplace Managed Client’s offline capability is provided by the following APIs, available in the com.ibm.rcp.offline plug-in. OfflineManager The OfflineManager API is responsible for controlling the offline state of Workplace Managed Client. It includes the following interface and factory class: IOfflineManager. An interface for managing the offline state of Workplace Managed Client. It defines methods to get and set the client’s offline state. IOfflineManagerFactory. A factory for creating an instance of the OfflineManager. OfflineService The OfflineService API is used to build offline aware components that behave appropriately depending on the Workplace Managed Client’s offline state and that are capable of responding to offline state changes. It includes the following interfaces and classes: IOfflineService. An interface that must be implemented by the class that is representing the offline aware component. It defines the event handlers for offline events. 152 IBM Workplace Managed Client: ISV Integration Guide IOfflineServiceHelper. An interface provided by a helper class that registers offline events and manages a component’s offline state. IOfflineServiceHelperFactory. A factory for creating an offline helper for business delegates. OfflineServiceBase. An abstract base class that implements the IOfflineService interface from which you can derive concrete offline-aware service classes. 6.4.2 Building offline-aware components The OfflineHelper interface written for offline-capable applications is responsible for determining the following items: Does the component currently have access to a server? Can the component access services? To build an offline-aware component, create a component class and include code designed to perform the following tasks: 1. Create an instance of a IOfflineHelper interface to handle business delegates or user interface components. The helper interfaces register component offline event handlers and manage component offline states. Example 6-14 shows instantiating the IOfflineManager and IOfflineServiceHelper implementations in the Delivery manager application. Example 6-14 Instantiating the IOfflineManager and IOfflineServiceHelper implementations //WarehouseView.java import com.ibm.rcp.offline.api.manager.*; import com.ibm.rcp.offline.api.service.*; //... public class WarehouseView extends ViewPart implements IOfflineService { private IOfflineManager mOfflineMgr = IOfflineManagerFactory.INSTANCE.create(); /** Enables form to respond to offline events via Offline Manager. */ private IOfflineServiceHelper offlineHelper = IOfflineServiceHelperFactory.INSTANCE.create(this); //... public IOfflineServiceHelper getOfflineServiceHelper() { return offlineHelper; } } 2. Implement the IOfflineService interface with event handler methods to provide custom offline behavior to respond to offline events signaled by the OfflineManager. Example 6-15 shows how the Delivery Manager application enables or disables UI controls depending on the online state of the client. Example 6-15 Implementation of the IOfflineService interface in Delivery Manager application //WarehouseView.java //... public class WarehouseView extends ViewPart implements IOfflineService { //.. //When the client goes online, enable the Report button public void goOnline() { if(mActReport != null){ mActReport.setEnabled(true); Chapter 6. Exploiting IBM Workplace Managed Client 153 } } //When the client goes offline, disable the “Report” button public void goOffline() { if(mActReport != null){ mActReport.setEnabled(false); } } public boolean offlineRequested() {return true;} public void offlineRequestCancelled() {} public void offlineStateChanged() {} public boolean onlineRequested() {return true;} public void onlineRequestCancelled() {} 3. At any point, an application can check the online status of the client in order to determine its execution flow. The OfflineManager.isOffline method can be used for this, as shown in Example 6-16. Example 6-16 Checking the online status of the client //WarehouseView.java //... public class WarehouseView extends ViewPart implements IOfflineService { private Action mActReport; //.... public void setWarehouse(WarehouseBean warehouse){ //... //only enable the Report button if we are online mActReport.setEnabled(mOfflineMgr.isOnline()); } } 4. An application can force the client of go online or offline using the OfflineManager.goOnline and OfflineManager.goOffline methods, as shown in Example 6-17. Example 6-17 Requesting Workplace Managed Client to go online based on its current state //DlgReport.java public class DlgReport extends MessageDialog{ private DocumentLibraryService mDocLibService; private IOfflineManager mOfflineMgr = IOfflineManagerFactory.INSTANCE.create(); //... private boolean init(){ //... if(mOfflineMgr.isOffline()){ MessageBox msg = new MessageBox(getShell(),SWT.YES | SWT.NO); msg.setText("Error"); msg.setMessage("You are currently offline. Would you like to go online?"); if(msg.open() == SWT.YES){ try { //Use the OfflineManager to request that the client switch to online mode mOfflineMgr.goOnline(); //... } catch (OfflineException e) { e.printStackTrace(); return false; } //... 154 IBM Workplace Managed Client: ISV Integration Guide 6.5 Implementing database support IBM Workplace Managed Client supports creating, accessing, and migrating database data to and from the client. Workplace Managed Client supports the use of any JDBC™-compliant database. Workplace Managed Client comes with an embedded IBM Cloudscape database, currently at Version 10. Although it is not obligatory for Workplace Managed Client applications to use the IBM Cloudscape database, it is well worth considering because it provides a number of advantages, including: Pure Java relational database. Requires no administration on the client system. Has a very compact size of approximately 2 MB. Can embed database. Fully supports SQL-92. Provides its own tools such as ij to simplify data manipulation. The IBM Workplace Client Technology platform adds additional functionality to the standard Cloudscape database, such as encrypted access to the database using keys stored in the local credential store. Useful links: For Cloudscape information, see: http://www.ibm.com/software/data/cloudscape IBM developerWorks Cloudscape information http://www.ibm.com/developerworks/db2/zones/cloudscape/ The IBM Cloudscape Information Center provides in-depth details about Apache Derby (open source Cloudscape) and Cloudscape: http://publib.boulder.ibm.com/infocenter/cscv/v10r1/index.jsp The Delivery Manager application uses a relational database on the server to manage its data and post updates. After the application is fully moved to the Workplace Managed Client platform, it does not need to always have a connection to the remote database; it can simply connect and access the local Cloudscape database for local data storage and can further use the Workplace Managed Client synchronization capability, as described in 6.6, “Synchronizing client application data” on page 160, to synchronize the data between a data store running on the client and a secondary data store running on the client or running on the server. Note: The majority of the mechanics of database access in Workplace Managed Client are identical to everyday JDBC usage. This section is, therefore, not intended as a tutorial on JDBC or SQL, and it focuses instead on the details particular to Workplace Managed Client. Chapter 6. Exploiting IBM Workplace Managed Client 155 6.5.1 Creating a local database Creating a database is an operation that is usually performed once. It is standard to place it in some initialization code, either during installation or in a plug-in start() method. To create a local database, perform the following steps: 1. Import the plug-ins com.ibm.workplace.database.db2j.jdbc, com.ibm.rcp.database and com.ibm.rcp.database.db2j as required plug-ins in the Eclipse plugin.xml file, as shown in Example 6-18. Example 6-18 Partial plugin.xml file with plug-in dependencies for database access and initialization <requires> <import plugin="com.ibm.workplace.database.db2j.jdbc" /> <import plugin="com.ibm.rcp.database"/> <import plugin="com.ibm.rcp.database.db2j"/> ... </requires> 2. Create a class called DatabaseUtil with a method to load the Workplace Managed Client database driver com.ibm.workplace.db2j.jdbc.WCTDB2jDriver required during the database initialization. Example 6-19 does this using the loadDbDriver method. Example 6-19 Partial implementation of DatabaseUtil.java to load the database driver import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseUtil { private static final String CSDRIVER = "com.ibm.workplace.db2j.jdbc.WCTDB2jDriver"; //The loadDbDriver //using the String public static void java.sql.Driver } method loads the WMC specific JDBC database driver specified in CSDRIVER loadDbDriver() throws Exception { driver = (java.sql.Driver) Class.forName(CSDRIVER).newInstance(); public static Connection getConnection(String dbname,boolean isCreateDB) throws Exception { loadDBDriver(); // database connection code goes here //..... } public static void shutdownDbDriver() throws Exception { // database shutdown code goes here } } 3. In the same DatabaseUtil class, create a method to retrieve the database connection. In the connection URI, set the value for the connection property create to true in order to create the new database. If the local data store must be encrypted, the value for connection property encryption should be set to true. Otherwise, set it to false. Format the connection URI as follows, delimiting the properties with semicolons, where connection_property can be one or more of the properties described in Table 6-2 on page 157: jdbc:wct:<database_name>;<connection_property1>; <connection_property2> 156 IBM Workplace Managed Client: ISV Integration Guide Table 6-2 Database connection URI properties available to Workplace Managed Client applications Connection property Description create Boolean value that specifies whether or not the JDBC driver should create the specified database if it does not exist. The default value is false. shutdown Boolean value that specifies whether or not the database should be unloaded from the Java virtual machine. The default value is false. encryption Boolean value that specifies whether or not the JDBC driver should open or create an encrypted database. If the value of this property is true, the JDBC driver retrieves the encryption key from the local credential store to open the database and encrypt the it. Example 6-20 shows the partial implementation of the DatabaseUtil class with a method that creates the DeliveryManager database. Example 6-20 Partial implementation of DatabaseUtil.java with method to create the database import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseUtil { private static final String CSDRIVER = "com.ibm.workplace.db2j.jdbc.WCTDB2jDriver"; public static void loadDbDriver() throws Exception { java.sql.Driver driver = (java.sql.Driver) Class.forName(CSDRIVER).newInstance(); } public static Connection getConnection(String dbname,boolean isCreateDB) throws Exception { loadDbDriver(); String createStr = “false”; if (isCreateDB){ createStr = “true”; } return DriverManager.getConnection("jdbc:wct:" + dbname + ";create=” + createStr + “;encryption=" + "false" +";"); } } Note: The local database will be automatically created in the Workplace Managed Client run-time workspace. The default location for the Workplace Managed Client run-time workspace is <user-home>\IBM\RCP\<identifier>\<user name>. For example, in Microsoft Windows, this location is generally C:\Documents and Settings\<user name>\IBM\RCP\<identifier>\<user name>. 4. Call the method getConnection() of the DatabaseUtil class from the Eclipse plug-in code where the database creation code is to be executed. Example 6-21 on page 158 gives an example of an Eclipse Action class retrieving the database connection and initializing the database. Chapter 6. Exploiting IBM Workplace Managed Client 157 Example 6-21 Sample Eclipse Action class to create local database import java.sql.*; public class DBCreateAction extends Action implements IWorkbenchWindowActionDelegate{ public void run(){ Thread dbCreation = new Thread(){ Public void run(){ try { DatabaseUtil.getConnection("DeliveryManager",true); } catch (Exception e) { e.printStackTrace(); } } }; dbCreation.start(); } } Note: The database creation should always be performed in the background using a non-UI thread. 5. Finally, the database connection should always be cleanly closed using the connection.close() method after the database operation has completed. 6.5.2 Accessing the database A database designed for Workplace Managed Client can be encrypted to secure the data contained within it. Workplace Managed Client databases are encrypted with a key derived from the password of the authenticated user. Developers can access an encrypted IBM Cloudscape database using the standards-based Java Database Connectivity (JDBC) connector driver that the client provides in the com.ibm.workplace.database.db2j.jdbc plug-in. To access the encrypted database, the client JDBC driver retrieves the authenticated user's key from the local credential store, uses it to decrypt the database, and then accesses the decrypted database. To connect to a local, encrypted IBM Cloudscape database using the client JDBC driver, perform the following steps: 1. Add the required plug-ins com.ibm.workplace.database.db2j.jdbc, com.ibm.rcp.database, and com.ibm.rcp.database.db2j to the Eclipse plugin.xml file. See Example 6-18 on page 156 for detailed instructions. 2. Create the DatabaseUtil class with a method to load the Workplace Managed Client database driver com.ibm.workplace.db2j.jdbc.WCTDB2jDriver required for database access. Use the same DatabaseUtil class created during database initialization. See Example 6-19 on page 156 for more details. 3. In the DatabaseUtil class, create a method to get the database connection. In the connection URI set the value for connection property create as false since the database already exists. See Example 6-20 on page 157 for more details. 4. Call the method getConnection() of the DatabaseUtil class to retrieve the database connection object. All operations that use the connection object to access the database are written using all the standard JDBC method calls, such as Connection.createStatement, Statement.executeQuery, and Statement.executeUpdate. 158 IBM Workplace Managed Client: ISV Integration Guide 5. After finishing accessing the database, close the database connection using connection.close(). The method should look similar to the method shown in Example 6-22. Example 6-22 Sample Java class to access the Delivery Manager database using DatabaseUtil class import import import import import java.sql.Connection; java.sql.Driver; java.sql.DriverManager; java.sql.SQLException; com.ibm.wcttool.sldlv2.sync.Van; public class DlvMgrDBUtil { public void storeVanInfo(String VanID,Van vanObj){ final Van vanObj = vanObj; final Connection connection; Thread dbCreation = new Thread(){ Public void run(){ try { connection = DatabaseUtil.getConnection("DeliveryManager",false); String SELECT_QUERY = " SELECT * from VAN where VANID='" + VanID + "'"; Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery(SELECT_QUERY); while (rs.next()) { // the application logic goes here vanObj.setVanID(rs.getString(“VANID“)); vanObj.setOwner(rs.getString(“OWNER“)); ... } } catch (Exception e) { e.printStackTrace(); } finally { //Connection cleanup should always be in a finally block, so it //will always be executed if(connection != null)connection.close(); } } }; dbCreation.start(); } } Note: The database access operation must always be performed in the background using a non-UI thread. 6.5.3 Shutting down the database The database connection must be shut down when the user exits from Workplace Managed Client. Perform the following steps in order to shut down the database: 1. As in the previous examples, include the required plug-ins com.ibm.workplace.database.db2j.jdbc, com.ibm.rcp.database, and com.ibm.rcp.database.db2j. See Example 6-18 on page 156. Chapter 6. Exploiting IBM Workplace Managed Client 159 2. Add a method in the DatabseUtil class to shut down the local database. Use the same DatabaseUtil class created during database initialization. In the connection URI, set the value for connection property shutdown as true, as shown in Example 6-23. Example 6-23 Partial implementation of DatabaseUtil.java with method to shut down the database import import import import java.sql.Connection; java.sql.Driver; java.sql.DriverManager; java.sql.SQLException; public class DatabaseUtil { public static void loadDbDriver() throws Exception { // Load the WMC cloudscape Driver } public static Connection getConnection(String dbname,boolean isCreateDB) throws Exception { // Db connection code goes here } public static void shutdownDbDriver() throws Exception { try { Connection conn= java.sql.DriverManager.getConnection("jdbc:wct:;shutdown=true"); } catch (SQLException e) { } } } 3. Call the DatabaseUtil.shutdownDbDriver() method. In a generic Java application, this can be from a shutdown hook. However, in Eclipse, it generally makes sense to place this code in the plug-in’s stop() method, as shown in Example 6-24. Example 6-24 Sample Eclipse plug-in class to shut down the Workplace Managed Client database import java.sql.SQLException; public class SldlvPlugin extends AbstractUIPlugin { public void stop(BundleContext context) throws Exception{ try { DatabaseUtil.shutdownDbDriver(); } catch (SQLException e) { } } //... } 6.6 Synchronizing client application data A Workplace Managed Client application can be enabled to synchronize data between a data store running on the client and a secondary data store also running locally on the client or running remotely on a server. Workplace Managed Client provides extensions for triggering 160 IBM Workplace Managed Client: ISV Integration Guide the synchronization of its data. The client provides a framework that schedules the execution of application-specific synchronization code: Synchronization Manager UI The Workplace Client Technology Synchronization Manager UI enables a user to initiate and control synchronization of local data stores through one or more application-supplied data synchronization services. The local data stores to be synchronized are registered by an application using the Workplace Client Technology Synchronization Manager API. Synchronization Manager The Workplace Client Technology Synchronization Manager provides a programmatic interface for registering, initiating, and controlling the synchronization of local data stores through one or more application-supplied data synchronization services. Synchronization Service An application-supplied software component that handles all aspects of data synchronization using a well-defined service protocol. This includes registration of local data stores to be synchronized, as well as initiation and control of synchronization sessions. Figure 6-4 shows the Workplace Client Technology synchronization framework and application-specific components. Workplace Client Technology Framework Layer Application Layer Figure 6-4 Synchronization framework and application-specific components The synchronization framework supports the following APIs: Synchronization Manager API A public interface for managing data synchronization that contains the following interfaces: – SynchronizationManager Public interface to the Workplace Client Technology Synchronization Manager. The Workplace Client Technology SynchronizationManager provides methods to: • Define which client replica data stores are available to be synchronized • Initiate and terminate synchronization of one or all known replica data stores • Determine the status of synchronization tasks in progress Chapter 6. Exploiting IBM Workplace Managed Client 161 – IReplicaSubscription Interface type for a data object representing a protocol-specific replica subscription, that is, a synchronizable data store on the client. Synchronization protocol agents that implement the ISyncService interface must supply a concrete implementation of IReplicaSubscription to represent the protocol-specific data store replicas that it handles. Synchronization Service SPI A service API for adding a custom data synchronization service or protocol agent to an application that contains the following items: – An extension point called com.ibm.rcp.sync.syncservices that implements the ISyncServiceFactory interface. – ISyncServiceFactory An interface implemented by the factories that create instances of a synchronization service or protocol agent. – SyncService An interface implemented by a synchronization service or protocol agent. Note: Workplace Managed Client does not provide the code that handles the synchronization itself. A synchronization factory class must be implemented that defines the application-specific synchronization logic, including creating service-specific IReplicaSubscription objects representing individual data stores that can be synchronized using the service. The Workplace Managed Client Synchronization Manager initializes the synchronization of all registered data stores. It is not possible to just replicate a single data store or document. When Workplace Managed Client synchronization is triggered either manually or automatically, all data stores registered with the Synchronization Manager are replicated. The Delivery Manager application can be enabled to synchronize the data between a data store running on the client and a secondary data store running on the server after it is fully moved to the Workplace Managed Client platform and is enabled to use the local data store. Implementing a custom synchronization engine Workplace Managed Client must be instructed how to handle data synchronization by providing a protocol agent. In the protocol agent, the behavior specific to the synchronization engine is defined. This tells the com.ibm.rcp.sync.api code how to handle application-specific data to be synchronized. The ReplicationSubscription object represents a protocol-specific synchronizable data store and is used by the API to identify what data needs synchronizing. To add a custom synchronization protocol agent to the platform, perform the following steps: 1. Add the dependency for the com.ibm.rcp.sync plug-in to the Eclipse plugin.xml file, as shown in Example 6-25. Example 6-25 Partial plugin.xml file with the plug-in dependency on com.ibm.rcp.sync plug-in <requires> <import plugin="com.ibm.rcp.sync"/> ... </requires> 162 IBM Workplace Managed Client: ISV Integration Guide 2. Extend the com.ibm.rcp.sync.syncservices extension point in the plugin.xml file to add a custom synchronization engine, as shown in Example 6-26. Example 6-26 Partial eclipse plugin.xml file with com.ibm.rcp.sync.syncservices extension point <extension point="com.ibm.rcp.sync.syncservices"> <servicefactory type="com.ibm.wcttool.sldlv2.sync.StoreSyncService" factoryClass= "com.ibm.wcttool.sldlv2.sync.StoreSyncServiceFactory" id=" com.ibm.wcttool.sldlv2.sync.StoreSyncService"> </servicefactory> </extension> 3. Implement a factory class that creates the custom synchronization protocol agent by implementing the ISyncServiceFactory interface. As shown in Example 6-26, the factoryClass parameter must be identical to the absolute class name of the ISyncServiceFactory implementation contained in the plug-in. Example 6-27 shows the example code for implementing the ISyncServiceFactory interface. Example 6-27 Example code for implementing the ISyncServiceFactory implementation package com.ibm.wcttool.sldlv2.sync; import import import import com.ibm.rcp.sync.api.exception.SyncException; com.ibm.rcp.sync.api.service.ISyncService; com.ibm.rcp.sync.api.service.ISyncServiceFactory; com.ibm.wcttool.sldlv2.sync.StoreSyncService; public class StoreSyncServiceFactory implements ISyncServiceFactory { public ISyncService getSyncService() throws SyncException { return new StoreSyncService(); } public String getServiceType() { return StoreSyncService.SERVICE_TYPE; } } 4. As shown in Example 6-28, implement the ISyncService interface to add replication subscriptions that identify what data to replicate. Remember, in Example 6-26, the type parameter must be identical to the absolute class name of the ISyncService implementation. Example 6-28 Example code for implementing the ISyncService interface implementation package com.ibm.wcttool.sldlv2.sync; import com.ibm.rcp.sync.api.data.*; import com.ibm.rcp.sync.api.service.ISyncService; import com.ibm.wcttool.sldlv2.sync.*; public class StoreSyncService implements ISyncService { private static String SERVICE_TYPE = "com.ibm.wcttool.sldlv2.sync.StoreSyncService"; private int syncState = 0; public void addReplicaSubscription(IReplicaSubscription arg0) throws Exception, RemoteException { } public void cancelSync(String arg0) throws Exception, RemoteException { } public void cancelSyncAll() throws Exception, RemoteException { Chapter 6. Exploiting IBM Workplace Managed Client 163 } public void deleteReplicaSubscription(IReplicaSubscription arg0) throws Exception, RemoteException { } public String getLastError(String arg0) throws Exception, RemoteException { return null; } public IReplicaSubscription getReplicaSubscription(String arg0) throws Exception, RemoteException { return null; } public int getSyncStatus(String arg0) throws Exception, RemoteException { //return an actual sync status instead of always 0 return syncState; } public IReplicaSubscription[] getUserReplicaSubscriptions(String arg0) throws Exception, RemoteException { StoreReplicaSubscription[] repSub = new StoreReplicaSubscription[1]; repSub[0] = new StoreReplicaSubscription(null,null,null,null,null); return repSub; } public void sync(IReplicaSubscription arg0, boolean arg1) throws Exception, RemoteException { syncState = ISyncStatus.STATUS_IN_PROGRESS; // Initialize and execute the syncManager that will // perform the custom synchronization //... syncState = ISyncStatus.STATUS_OK; } public void syncAll(String arg0, String arg1, boolean arg2) throws Exception, RemoteException { } public void updateReplicaSubscription(IReplicaSubscription arg0, boolean arg1) throws Exception, RemoteException { } } As mentioned earlier in this section, Workplace Managed Client does not provide the code that handles the synchronization itself. There are a few approaches an ISV can take for data management, read-only, queued writing, and local cache, as shown in Table 6-3. Table 6-3 Considerations for using the data management options 164 Scenario Consideration Read-only Synchronize into the local database the minimum data with which application wants to work when disconnected. Only read-only operations are supported. In the Delivery Manager example, a replica of the Warehouse, Van, and Store data can be created, but not the Orders or Stock data when synchronization occurs. If offline, the local database can be queried for data display, but operations such as New and Edit are disabled. This can be done with very little code change. Synchronization conflicts cannot occur, because the database is read-only. IBM Workplace Managed Client: ISV Integration Guide Scenario Consideration Queued writing This scenario builds on the read-only scenario. Still only synchronize the basic data, but instead of disabling write operations when offline, they can take place. Instead of writing the results to the normal tables, queue them up in different tables. When back online, those queue tables are emptied and the contents are pushed to the corporate server just as though they had all been entered at that moment. More code needs to be written for this approach, but Workplace Client Technology provides the structures to organize it all. Conflicting business logic is managed server-side when the client is back online and each modification is processed. Local cache In this scenario, the application always reads and writes from the local database. Parity is maintained with the corporate servers through synchronization when online. This is a very good option for circumstances where the data set to which any individual has access is not very large and real-time information is not required, for example, when a user is likely to be disconnected much more than they are connected. This does not require a lot of code to be changed in the application. The bulk of the code for supporting this goes into the handlers registered with the synchronization API. Conflicting business logic must accommodate changes to both the local and remote database. 5. Create a class that implements the IReplicaSubscription interface to represent the application-specific data. The getUserReplicaSubscriptions() method in the synchronization service class refers to the IReplicaSubscription implementation, as shown in Example 6-29. Example 6-29 Example code for implementing the IReplicaSubscriptionBasr interface import com.ibm.rcp.sync.api.data.ReplicaSubscriptionBase; import com.ibm.wcttool.sldlv2.sync.StoreSyncService; public class StoreReplicaSubscription extends ReplicaSubscriptionBase { public StoreReplicaSubscription(String arg0, String arg1, String arg2, String arg3, String arg4) { super(arg0, arg1, arg2, arg3, arg4); } public String getType() { return StoreSyncService.SERVICE_TYPE; } } The Workplace Client Technology Synchronization Manager UI calls the Workplace Client Technology Synchronization Manager to synchronize all registered data stores. The Workplace Client Technology Synchronization Manager calls each registered Synchronization Service to synchronize the data stores registered with them. Chapter 6. Exploiting IBM Workplace Managed Client 165 6.7 Securing a client application Workplace Client Technology provides a secured platform that protects application data. Capabilities for single sign-on (SSO) with the operating system are built into Workplace Managed Client by default. Workplace Client Technology uses the local credential store to store user name and password credentials. Workplace Managed Client applications can access the local credential store by decrypting the store with the password supplied by the user at sign-on and can create password credentials for authenticating with remote servers. Workplace Client Technology also provides the security APIs that enable you to log in to the HTTP-authenticated application programmatically. 6.7.1 Logging in to the local credential store Workplace Client Technology uses the local credential store to store user name and password credential information. The local credential store is a local encrypted XML file. Credentials stored within the local store are available only to the system that hosts the file. Users are prompted for the IBM Workplace user name and password when they start a rich client product. After the user name and password are verified, IBM Workplace creates a local credential store. The security API provided in the com.ibm.rcp.security.core plug-in enables an application to log in to the local credential store programmatically. To log in to the local credential store programmatically, perform the following steps: 1. Add the dependency on the com.ibm.rcp.security.core plug-in in the Eclipse plugin.xml file, as shown in Example 6-30. Example 6-30 Partial plugin.xml file with the added depends on com.ibm.rcp.security.core plug-in <requires> <import plugin="com.ibm.rcp.security.core"/> ... </requires> 2. Use the login() method of an ICredentialStoreLoginContext instance to log in to the local credential store, as shown in Example 6-31. Example 6-31 Partial implementation for MyCredentialStore.java class to log in to local credential store import java.io.IOException; import java.util.Properties; import com.ibm.rcp.security.api.cred.login.ICredentialStoreLoginContext; import com.ibm.rcp.security.api.cred.login.ICredentialStoreLoginContextFactory; import import import import import javax.security.auth.callback.Callback; javax.security.auth.callback.CallbackHandler; javax.security.auth.callback.NameCallback; javax.security.auth.callback.PasswordCallback; javax.security.auth.callback.UnsupportedCallbackException; public class MyCredentialStore { String usr = "wpsadmin"; String passwd = "wpsadmin"; 166 IBM Workplace Managed Client: ISV Integration Guide public MyCredentialStore(String userName, String password){ usr = userName; passwd = password; } protected void accessLocalCredentialStore() { try { ICredentialStoreLoginContext loginContext = ICredentialStoreLoginContextFactory.INSTANCE.create(); loginContext.login(getLoginCallback(usr,passwd),new Properties()); } catch (Exception e) { e.printStackTrace(); } } private CallbackHandler getLoginCallback(final String username, final String password) { CallbackHandler callbackHandler = new CallbackHandler() { public void handle(Callback[] cb) throws IOException, UnsupportedCallbackException { for (int i = 0; i < cb.length; i++) { if (cb[i] instanceof NameCallback) { ((NameCallback) cb[i]).setName(username); } else if (cb[i] instanceof PasswordCallback) { ((PasswordCallback) cb[i]).setPassword(password.toCharArray()); } else { throw new UnsupportedCallbackException(cb[i]); } } } }; return callbackHandler; } } 3. Call the method accessLocalCredentialStore() of class MyCredentialStore from the Eclipse plug-in class that wants to access the local credential store, as shown in Example 6-32. Example 6-32 Partial implementation of MyCredCheck.java class import com.ibm.wcttool.sldlv2.security.MyCredentialStore; ... public class MyCreadCheck { public void loginToLocalCredStore() { new MyCredentialStore("wpsadmin", "wpsadmin") .accessLocalCredentialStore(); } } 6.7.2 Creating a password credential for remote server authentication Using com.ibm.rcp.security.core APIs, the password credentials can be created to authenticate with the remote servers. The user must be prompted to supply a user name and password the first time that user tries to access the remote server. The application can store the user name and password in the credential store. On subsequent use, the application provides this credential to the remote server by retrieving it from the credential store. Chapter 6. Exploiting IBM Workplace Managed Client 167 Note: Creating credentials prevents the user from being repeatedly prompted for authentication information. To create a password credential for a remote server, perform the following steps: 1. Add the dependency on the com.ibm.rcp.security.core plug-in in the plugin.xml file of the Eclipse plug-in project created for the application that wants to use Workplace Client Technology security APIs. See Example 6-30 on page 166 for further details. 2. Use the login() method of an ICredentialStoreLoginContext instance to log in to the local credential store. See Example 6-31 on page 166 for further details. 3. Call the method accessLocalCredentialStore() of class MyCredentialStore from the Eclipse plug-in class that wants to access the local credential store. See Example 6-32 on page 167 for further details. 4. As shown in Example 6-33, create a password credential using the IHttpCredentialManager.createPassword() method in the MyCredentialStore.java class. Modify the existing MyCredentialStore.java class shown previously in Example 6-31 on page 166. Example 6-33 Partial implementation of MyCredentialStore.java to create password credentials import import import import import .... com.ibm.rcp.security.api.cred.IPasswordCredential; com.ibm.rcp.security.api.cred.login.ICredentialStoreLoginContext; com.ibm.rcp.security.api.cred.login.ICredentialStoreLoginContextFactory; com.ibm.rcp.security.internal.CredentialStore; com.ibm.rcp.security.internal.CredentialStoreFactory; public class MyCredentialStore { String usr = "wpsadmin"; String passwd = "wpsadmin"; public MyCredentialStore(String userName, String password) { usr = userName; passwd = password; } protected void accessLocalCredentialStore() { // The code to access local credential store goes here } private CallbackHandler getLoginCallback(final String username, final String password) { // The callback handler implementation } public void createMyPasswordCredential() { try { CallbackHandler callbackHandler = getLoginCallback(usr, passwd); IPasswordCredential cred = CredentialStoreFactory.getCredentialStore( ). getHttpCredentialManager().createPassword( new URL("http://authenticationHost.com"), "AuthRealm", new URL[] { new URL("ibm.com") }, CredentialStore.SCOPE_LOCAL, callbackHandler); cred.remove(); } catch (Exception e) { e.printStackTrace(); } } } 168 IBM Workplace Managed Client: ISV Integration Guide 5. Call the method createMyPasswordCredential() of class MyCredentialStore.java from the Eclipse plug-in class that wants to create the password credentials to access the remote server, as shown in Example 6-34. Example 6-34 Partial implementation of MyCredCheck.java class import com.ibm.wcttool.sldlv2.security.MyCredentialStore; ... public class MyCreadCheck { public void createRemoteCredentials(){ new MyCredentialStore().createMyPasswordCredential(); } } 6.7.3 Logging in to an HTTP-authenticated application The communication between Workplace Managed Client and an IBM Workplace Collaboration Services server is authenticated automatically. The security APIs provided with the com.ibm.rcp.security.core plug-in enable a Workplace Managed Client application to log in to an alternate HTTP-authenticated application. The security APIs provided with the com.ibm.rcp.security.core plug-in also enable the single sign-on (SSO) capability for remote HTTP applications. To log in to an HTTP-authenticated application programmatically, perform the following steps: 1. Add the dependencies on the com.ibm.rcp.security.core and com.ibm.rcp.apache.httpclient plug-ins in the Eclipse plugin.xml file, as shown in Example 6-35. Example 6-35 Partial Eclipse plugin.xml file with added dependencies <requires> <import plugin="com.ibm.rcp.security.core"/> <!-- needs to import the plugin com.ibm.rcp.net.apache.httpclient to work with httpclient Cookie. --> <import plugin="com.ibm.rcp.net.apache.httpclient"/> <!-- needs to add the browser dependancies to launch the embedded browser --> <import plugin="com.ibm.rcp.ui"/> <import plugin="com.ibm.rcp.ui.browser"/> <import plugin="com.ibm.rcp.ui.browser.core"/> ... </requires> 2. Use the login() method of the IHttpFormLoginContext instance to log in to an HTTP form-based application, as shown in Example 6-36. Example 6-36 Partial implementation of MyCredentialStore.java class import com.ibm.rcp.security.api.http.login.IHttpFormLoginContext; import com.ibm.rcp.security.api.http.login.IHttpFormLoginContextFactory; import com.ibm.rcp.security.api.login.LtpaCookieCallback; ... public class MyCredentialStore { String usr = "wpsadmin"; Chapter 6. Exploiting IBM Workplace Managed Client 169 String passwd = "wpsadmin"; String host = "myworkplace.ibm.com"; public MyCredentialStore(String userName, String password) { usr = userName; passwd = password; } public MyCredentialStore() { // The empty constructor } private CallbackHandler getLoginCallback(final String username, final String password) { CallbackHandler callbackHandler = new CallbackHandler() { public void handle(Callback[] cb) throws IOException, UnsupportedCallbackException { for (int i = 0; i < cb.length; i++) { if (cb[i] instanceof NameCallback) { ((NameCallback) cb[i]).setName(username); } else if (cb[i] instanceof PasswordCallback) { ((PasswordCallback) cb[i]).setPassword(password .toCharArray()); } else if (cb[i] instanceof LtpaCookieCallback){ // do nothing } else { throw new UnsupportedCallbackException(cb[i]); } } } }; return callbackHandler; } protected void HTTPLogin() { IHttpFormLoginContext loginContext = IHttpFormLoginContextFactory. INSTANCE.create(); try { loginContext.login( host, 80, "/lwp/j_security_check", false, getLoginCallback(usr,passwd), null); } catch ( Exception e) { e.printStackTrace(); } } } 3. As shown in Example 6-37 on page 171, retrieve the LTPA token from the authenticated HTTP login context using the getCredentialCookie() method. This returns the LTPA token encoded as a cookie.This token can be used further to enable the single sign-on (SSO) capability for remote HTTP applications using the method launchContext.setSingleSignOnCookie(cookie.getValue(), ILaunchContext.CREDENTIAL_LTPA). Update the existing HTTPLogin() method in the MyCredentialStore.java class shown previously in Example 6-22 on page 159 to achieve the same result. 170 IBM Workplace Managed Client: ISV Integration Guide Example 6-37 Partial implementation of MyCredentialStore.java class to retrieve the LTPA token import javax.security.auth.callback.*; import javax.security.auth.login.LoginException; import org.apache.commons.httpclient.Cookie; mport com.ibm.rcp.platform.api.PlatformContext; import com.ibm.rcp.security.api.cred.*; import com.ibm.rcp.security.api.http.login.IHttpFormLoginContext; import com.ibm.rcp.security.api.http.login.IHttpFormLoginContextFactory; import com.ibm.rcp.security.api.login.LtpaCookieCallback; import com.ibm.rcp.ui.browser.core.api.*; //... public class MyCredentialStore { private String usr = "wpsadmin"; private String passwd = "wpsadmin"; private String host = "myworkplace.ibm.com"; private String url = "http://myworkplace.ibm.com/lwp/myworkplace"; public MyCredentialStore(String userName, String password) { usr = userName; passwd = password; } public MyCredentialStore() { // The empty constructor } private CallbackHandler getLoginCallback(final String username, final String password) { // impmement the callback handler } protected void HTTPLogin() { IHttpFormLoginContext loginContext = IHttpFormLoginContextFactory.INSTANCE.create(); try { loginContext.login( host, 80, "/lwp/j_security_check", //servlet used to authenticate a user false, getLoginCallback(usr,passwd), null); Cookie ltpaCookie = loginContext .getCredentialCookie(IHttpFormLoginContext.CREDENTIAL_LTPA); String ltpaData = ltpaCookie.getValue(); Date expiryDate = ltpaCookie.getExpiryDate(); ILaunchContext launchContext = LaunchBrowserFactory.createLaunchContext(url); launchContext.setSingleSignOnCookie(ltpaCookie.getValue(), ILaunchContext.CREDENTIAL_LTPA); ILaunchBrowser launchBrowser = LaunchBrowserFactory.getBrowserInstance(); launchBrowser.launch(launchContext); } catch ( Exception e) { e.printStackTrace(); } } } Note: Retrieving the LTPA token from the authenticated HTTP login context and using the same enables single sign-on (SSO) for the remote HTTP application. Chapter 6. Exploiting IBM Workplace Managed Client 171 Note: The /lwp/j_security_check servlet is used by form-based authentication to authenticate a user. 4. Call the HTTPLogin() method of the MyCredentialStore class from the Eclipse plug-in class that wants to retrieve the LTPA token from the authenticated HTTP login context, as shown in Example 6-38. Example 6-38 Partial implementation of MyCredCheck.java file import com.ibm.wcttool.sldlv2.security.MyCredentialStore; ... public class MyCreadCheck { public void getLTPAToken(){ new MyCredentialStore().HTTPLogin(); } } 6.7.4 Single sign-on interoperating with the operating system Using single sign-on (SSO) with the operating system enables a Workplace Managed Client user to access resources protected by the client without having to reauthenticate after they have logged in to their workstation. If the user name and password provided by the user while logging in to the operating system are identical to the ones stored in the local credential store, the client grants access to secure client resources without prompting the user to provide credentials a second time. Using single sign-on with the operating system is enabled for rich client products and supported on the following operating systems: Microsoft Windows 2000 Professional with Service pack 2 Microsoft Windows XP with Service Pack 1 Red Hat Enterprise Linux WS 3.0 with Update 3 Important: Before enabling the single sign-on (SSO) feature provided by Workplace Managed Client on Windows and Linux, ensure that: The user name and password credentials for the Windows or Linux operating system are the same as the user name and password credentials for the local credential store. The operating system user has sufficient access permissions to modify the Windows registry and add services to the system. Single sign-on with Microsoft Windows After Workplace Managed Client is installed on the desktop, perform the following steps to configure the client for single sign-on (SSO) with Microsoft Windows: 1. Go to the Workplace Managed Client installation location and navigate to the following directory: <WMC_HOME>\rcp\eclipse\features\com.ibm.rcp.security.sso.win32.feature_1.2.1\os\wi n32\x86 2. Run the ssoinstall.cmd file, as shown in Figure 6-5 on page 173. 172 IBM Workplace Managed Client: ISV Integration Guide Execute this command Need to reboot Figure 6-5 Command execution to enable SSO on windows 3. Restart the system. Important: To verify that the single sign-on service is running, click Start → Settings → Control Panel, open the Administrative Tools folder and click Services. The single sign-on feature is running if the list of services includes IBM Rich Client Platform Single Logon with a status of Started, a startup type of Automatic, and the Log On As value set to LocalSystem, as shown in Figure 6-6. Chapter 6. Exploiting IBM Workplace Managed Client 173 Workplace Managed Client SSO enablement Figure 6-6 Workplace Managed Client single sign-on (SSO) verification for Windows Single sign-on with Linux The following instructions assume that you have some understanding of Linux system administration and Linux security administration, especially the configuration of Pluggable Authentication Modules (PAM). See the following site for the Linux PAM configuration: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html#toc4 After Workplace Managed Client is installed on the desktop, perform the following steps to configure the client for SSO with Linux: 1. Log in as the user (su) to root in Linux shell. 2. Go to the Workplace Managed Client installation location and navigate to the following directory: <WMC_HOME>\rcp\eclipse\features\com.ibm.rcp.security.sso.win32.feature_1.2.1\os\lin ux\x86 3. Run the installsso script. 4. Open the /etc/pam.d/gdm file and add the extra lines shown in bold italics in Example 6-39. Example 6-39 Modified /etc/pam.d/gdm file to enable SSO on linux #%PAM-1.0 auth auth auth auth account password password session session session 174 required required required required required required required required optional required pam_unix2.so nullok #set_secrpc pam_env.so pam_stack.so service=system-auth pam_nologin.so pam_stack.so service=system-auth pam_rcpsso.so debug pam_stack.so service=system-auth pam_stack.so service=system-auth pam_console.so pam_rcpsso.so debug IBM Workplace Managed Client: ISV Integration Guide 5. Open the /etc/pam.d/xdm file and add the extra lines shown in bold italics in Example 6-39 on page 174. 6. Open the /etc/pam.d/passwd file and add the extra lines shown in bold italics in Example 6-40. Example 6-40 Modified /etc/pam.d/passwd file to enable SSO on linux #%PAM-1.0 auth account password password required required required required pam_stack.so pam_stack.so pam_stack.so pam_rcpsso.s service=system-auth service=system-auth service=system-aut debug 7. Restart the system. The Workplace Managed Client security aspects described throughout this section were done by the Redpaper team for an example application. To fully implement all Workplace Managed Client security features, see the documentation that comes with the kit. 6.8 Summary This chapter has shown a number of ways in which an application can be enhanced to fully exploit the many services offered by Workplace Managed Client, such as document libraries, messaging and notification, online/offline awareness, local data storage, synchronization, and securing Workplace Managed Client application. ISVs that want to tightly integrate their applications with Workplace Managed Client can use the numerous features that greatly add to the functionality of any application. Chapter 6. Exploiting IBM Workplace Managed Client 175 176 IBM Workplace Managed Client: ISV Integration Guide A Appendix A. IBM Workplace Managed Client Version 2.6 This appendix discusses the various changes and additions that the IBM Workplace Managed Client Version 2.6 provides. These include: Provisioning Personalities Online and network awareness Live names File type registry Branding IBM Workplace Managed Client Tool for Eclipse Managed provisioning component The calendar service API Alias password credential The following topics address new features, feature enhancements, or changes since Version 2.5.1. © Copyright IBM Corp. 2006. All rights reserved. 177 Note: The Web Services for Remote Portlets (WSRP) Technology Preview for Workplace Managed Client is available for use with IBM Workplace Managed Client 2.6. The WSRP Technology Preview 2.5.1 is part of the IBM Workplace Managed Client 2.5.1 Technology Preview package. This package will remain at the 2.5.1 level and will not be updated for Release 2.6. For instructions to make the WSRP Technology Preview work with Release 2.6, see: http://www.ibm.com/developerworks/workplace/products/clienttechnology/ IBM Business Partners are able to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package and the IBM Workplace Managed Client 2.6 through the IBM Software Access Catalog on PartnerWorld at: http://www.developer.ibm.com/isv/welcome/guide/value.htm Clients who want to obtain the IBM Workplace Managed Client 2.5.1 Technology Preview package should contact their IBM Sales representative. Provisioning the application from CD or HTTP server Customers can deploy the client and custom applications from a CD or HTTP server without having to first install Workplace Collaboration Services. Using this mechanism, ISVs can do initial deployments with low bandwidth connectivity. To learn more about how to create the installation image of an application and how to deploy and provision the application from CD or HTTP server, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit at: http://www.lotus.com/ldd/lwpapi Platform and custom personalities Eclipse has a nice mechanism involving pluggable applications and workbench advisors, enabling consumers of the Eclipse platform to customize the life cycle and the look and feel of the platform. The problem is that there is only one instance of the WorkbenchAdvisor per Eclipse instance. Workplace Managed Client must support multiple, simultaneous applications running, each with one or more window of their own, with customized look and feel. The term application is already used in the Eclipse platform, so Workplace Managed Client defines the term personality instead, that is, a window with a set of widgets, a life cycle, and other such features. Personalities are classes contributed by extension point. Each personality extends the base class com.ibm.platform.Personality. The personality class corresponds to a subset of the functionally available on the org.eclipse.ui.applications.WorkbenchAdvisor class. 178 IBM Workplace Managed Client: ISV Integration Guide Note: The IBM Workplace personality is the default personality applied to a provisioned application if no other personality is specified. It builds the perspective used by the application based on the RCPML it retrieves from the server. To test the application in the IDE, specify -personality com.ibm.workplace.personality as a program argument to make it run within a Workplace Managed Client runtime environment. Workplace Managed Client provides the API that ISVs can use to implement a custom personality and it also provides a standard Platform personality that you can extend to create a custom personality. The advantage of extending the Platform personality instead of creating a personality from scratch is that the Platform personality implements the following features: Enables the ISV to plug into the IBM Workplace Managed Client provisioning framework. The provisioning framework requires support for dynamic perspectives built by RCPML. Note: There are no public APIs exposing the RCPML mechanism for building pages, so ISVs cannot implement RCPML-derived perspectives on the platform unless the ISV application uses the IBM Workplace personality or a custom personality that extends the Platform personality. Populates the switcher bar with applications having RCPML-based or standard Eclipse perspectives. Builds the following user interface components for an application: – Menu bar – Toolbar – Banner area – Status bar – Switcher bar – Side bar – Tabbed view – Embedded browser The base personality framework is only good for creating stand-alone Workplace Managed Client applications. Support for custom personalities is provided in the com.ibm.rcp.platform plug-in. The IBM Workplace Client Technology com.ibm.rcp.platform.api code supports running multiple applications, each with its own frameset and look and feel, simultaneously in the same JVM. To learn more about how to use the Platform personality com.ibm.rcp.platform.PlatformPersonality and custom personality com.ibm.rcp.platform.personality, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit at: http://www.lotus.com/ldd/lwpapi Appendix A. IBM Workplace Managed Client Version 2.6 179 Offline and network awareness The platform’s offline capability is provided by the following APIs: OfflineManager Responsible for controlling the offline state of the platform. It includes the following interface and factory class: – IOfflineManager An interface for managing the offline state of the platform. It defines methods to get and set the platform’s offline state. – OfflineManagerFactory A factory for creating an instance of OfflineManager. NetworkAware Used to build offline-aware components that behave appropriately depending on the platform’s offline state and that are capable of responding to offline state changes. It includes the following interfaces and classes: – INetworkAware An interface that must be implemented by the class that is representing the offline-aware component. It defines the event handlers for offline events. – OfflineServiceHelper An interface provided by a helper class that registers offline events and manages a component’s offline state. – IOfflineServiceHelperFactory A factory for creating an offline helper for business delegates. – NetworkAwareBase An abstract base class that implements the INetworkAware interface from which you can derive concrete offline-aware service classes. Note: The INetworkAware interface replaces the IOfflineService in Version 2.6. To learn more about how to enable the Workplace Client Technology platform’s offline and network awareness capability using the com.ibm.rcp.offline plug-in, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Live names component The live names component adds presence awareness to user interface components. It adds presence information to data items that you identify as name objects, such as user names and e-mail address, and enables other users to interact with the name object to get information, such as the user’s online status. It also enables users to initiate tasks, such as chats. 180 IBM Workplace Managed Client: ISV Integration Guide The Workplace Managed Client LiveNames API consists of the following interfaces and classes: LiveNameController A class that implements a single lightweight live name object on a page. Instantiate an object of this class instead of the LiveNameViewer class when it is required to display a large number of live names on a single page. This class requires you to implement the ILiveNameListener interface to listen for status changes and that you draw the user interface. LiveNameViewer A class that implements each live name in a list of live name objects on a page. Instantiate an object of this class instead of the LiveNameController class when it is required to display a finite list of live names on a page. The advantage of using the LiveNamesViewer class instead of the LiveNameController class is that the API does the work of drawing the user interface and is therefore easier to implement. ILiveNameListener An interface that returns the status of a user represented by a live name and that must be implemented by consumers of the LiveNameController API. This interface must be implemented before instantiating a LiveNameController object because the implemented listener must be passed, along with a user name or e-mail address, into the LiveNameController class. When the LiveNameController object receives an object containing user data, it returns the user data to the listener, so the listener methods have access to the data they need to draw the user interface. ILiveNameSelection An interface identifying live name objects to which you can define object contributions to contribute actions to the live names context menu by extending the org.eclipse.ui.popupMenus extension point. To learn more about how to use the Workplace Client Technology platform’s live name component using the com.ibm.rcp.ui.livenames and com.ibm.rcp.ui.livenames.widgets plug-ins, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. File type registry component The file type registry component provides a repository for storing file types supported by the platform. The IBM Workplace Messaging, IBM Workplace Documents, and IBM Workplace productivity tools can only view and edit documents with file types defined in the registry. The file type registry API enables an ISV application to add custom file types to the registry. After adding a file type in the Workplace Managed Client registry, and associated actions and handlers for it to the registry, the application needs to establish support for files of that type in the registry. Other IBM Workplace applications can use the handlers provided to perform actions on documents having the same file type in their own implementations. To learn more about how to add the file type in the registry and how to access it using the com.ibm.rcp.registry.filetype and com.ibm.rcp.registry.filetype.ui plug-ins, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Appendix A. IBM Workplace Managed Client Version 2.6 181 Customizing the application look and feel along with branding An important step in designing a custom application is to apply a look and feel to the application user interface that makes the application identifiable as your product. The look and feel is determined by the window titles, banner graphics, background colors, and font styles the application uses. A custom theme to an application can be applied using the org.eclipse.ui.themes extension point to customize the appearance of the user interface. Themes allow the applications to define color and font entities and theme entities and they allow applications to selectively override default color and font specifications. The IBM Workplace Managed Client platform uses the org.eclipse.core.runtime.products extension point to define the com.ibm.rcp.platform plug-in as the core product plug-in for the platform. It also specifies the plugin_customization.ini file stored in this plug-in as the initialization file. The client retrieves the window preference settings from the core products plug-in’s initialization file. To customize the brand identify of an application, do one of the following actions: Use the product plug-in defined for the IBM Workplace Managed Client platform by default, and overwrite the preferences that it sets using org.eclipse.ui.themes extension point. Identify a new application plug-in as the product plug-in and provide an initialization file to define the color and font settings. To learn more about how to change the application look and feel using the custom branding and custom theme supported by the com.ibm.rcp.platform plug-in, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Changing the embedded browser’s default Web address The rich client embedded browser always opens the http://www.ibm.com Web site when a user first starts the browser. Users can click the home button to switch to a Web address that they have defined as the default address in the browser preferences, but the next time they start the embedded browser, it again defaults to the IBM site. You can change the default Web address setting for the embedded browser to display your own Web address instead of the IBM Web address. To learn more about how to change the embedded Web browser’s default Web address, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Workplace Managed Client Toolkit The name of this product has changed from IBM Workplace Managed Client Toolkit to IBM Workplace Managed Client Tool for Eclipse. The following features are new: When you choose a graphic to serve as the application branding icon, it is displayed in the dialog box, so you can verify that it is the correct graphic file. All page RCPML parameters can be edited, except the rcpView parameter. The feature-related parameters that were not editable previously can now be edited. 182 IBM Workplace Managed Client: ISV Integration Guide More than one application can be exported at a time. Multilingual display names can be provided for applications and views. RCPML parameters can be added to the application as well as the views. You can use the WMC Properties pane to edit application settings made using the New Application wizard. You can define a desktop icon to enable an application to be started in stand-alone mode and to be selected from the switcher bar in Workplace Managed Client. You can resize panes in a page layout by dragging the pane separators in the Layout properties editor, instead of having to change the ratio parameter values of the views occupying the panes. A perspective can be generated from an application. An application can be packaged for deployment and installed on an IBM WebSphere Portal server using a single wizard. Any personality available from the target platform can be applied to the application when setting up the launch configuration. Samples of using live names, document library APIs, and databases have been provided with the SDK. Managed provisioning component The managed provisioning component provides a means for installing, updating, and managing client applications from a central administrative server. To learn more about how to use the managed provisioning component, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Using XML Access scripts to create the page and portlet To use XML Access scripts to create the page and portlet that represent the Workplace Collaboration Services API component on IBM WebSphere Portal, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Implementing the calendar service API You can use the calendar service API provided with the IBM Workplace Software Development Kit to manage a calendar on the client. Keep the following things in mind when managing a calendar: The IBM Workplace Software Development Kit APIs use a model that depends on factories that create data and services. The FactoryCreator class creates these factories. Use an appropriate service and data factory for the task you want to perform. For example, to manage the contents of a calendar, use the CalendarService and the CalendarFactory. When you make a request to the calendar service, it provides a snapshot of the current state of the calendar. Before you implement an action that requires the current calendar state information, you must explicitly retrieve the latest information from the calendar. Appendix A. IBM Workplace Managed Client Version 2.6 183 To learn more about implementing the calendar service API, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Creating an alias password credential You can use an “alias” to identify credentials. The only credentials currently supported in the platform credential store are password credentials that consist of a user name and password combination. Using an alias to identify the credential helps to protect it. To learn more about creating an alias password credential, refer to IBM Workplace Managed Client API Toolkit User’s Guide, Version 2.6, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. 184 IBM Workplace Managed Client: ISV Integration Guide B Appendix B. IBM Workplace 2.5.1 menu IDs This appendix provides details about the menu IDs defined for IBM Workplace Collaboration Services. The items described here include: Top-level menu items IBM Workplace Collaboration Services-specific top-level menu items Group markers for adding to menus and end groups Menu actions © Copyright IBM Corp. 2006. All rights reserved. 185 IBM Workplace menu IDs overview An application can contribute an action item to an existing menu path in the IBM Workplace user interface by extending the actionSets extension point and supplying a corresponding IBM Workplace menu ID in the path attribute of the menu element. The menu IDs defined for the IBM Workplace Collaboration Services are defined as constants in the IWorkplaceActionConstants.java file.The application can use these constants to determine where an action will be displayed in the user interface. IBM Workplace menu IDs The following tables provide details about the menu IDs. Table B-1 Top-level menu items consistent with Eclipse menu items Constant value Reference in menu tag as FILE_MENUID = file / *IWorkbenchActionConstants.M_FILE*/ path= “additions” and id=”file“ EDIT_MENUID = edit / *IWorkbenchActionConstants.M_EDIT*/ path= “edit/<submenutitle>” and id= “<customString>” WINDOW_MENUID = window / *IWorkbenchActionConstants.M_WINDOW*/ HELP_MENUID = help / *IWorkbenchActionConstants.M_HELP*/ id= “help” Table B-2 IBM Workplace Collaboration Services-specific top-level menu items Constant value Reference in menu tag as VIEW_MENUID = com.ibm.rcp.ui.viewmenu path= “additions” id= “com.ibm.rcp.ui.viewmenu” or path= “edit” id= “com.ibm.rcp.ui.viewmenu” or path= “com.ibm.rcp.ui.viewmenu/<submenutitle>” id= “<customString>” ACTIONS_MENUID = com.ibm.rcp.ui.actionsmenu path= “com.ibm.rcp.ui.viewmenu” id= “com.ibm.rcp.ui.actionsmenu” or path= “com.ibm.rcp.ui.actionsmenu/additions” id= “<customString>” TOOLS_MENUID = com.ibm.rcp.ui.toolsmenu path= “com.ibm.rcp.ui.actionsmenu” id= “com.ibm.rcp.ui.toolsmenu” or path= “com.ibm.rcp.ui.toolsmenu/ <submenutitle>” id= “<customString>” 186 IBM Workplace Managed Client: ISV Integration Guide Table B-3 Group markers for adding to menus and end groups Constant value Reference in menu tag as Use to MB_ADDITIONS = IWorkbenchActionConstants. MB_ADDITIONS path = “additions” Add top level group marker contributions. For example: path= “additions” id= “com.ibm.rcp.ui.viewmenu” Or add contributions to top level group markers. For example: path= “com.ibm.rcp.ui.toolsmenu/ additions” id= “MyStatusMenu” > ENDGROUP_SUFFIX = _end path = “_end” Specifies that a contribution should appear at the end of an existing menu. MB_WCTADDITIONS = wctadditions path = “wctadditions” Add top level group marker contributions after the tools menu. For example: path= “wctadditions” id= “OSMWInsert” > Table B-4 File menu group markers Constant value FILE_NEW_GROUP = “fileNewGroup” FILE_OPEN_GROUP = “ fileOpenGroup” FILE_OPENINNEWTAB_GROUP = “fileOpenInNewTabGroup” FILE_FOLDER_GROUP = “fileFolderGroup” FILE_MENU_GROUP = “ fileMenuGroup” FILE_MENUADDITIONS_GROUP = “fileMenuAdditionsGroup” FILE_IMPORT_GROUP = “fileImportGroup” ; FILE_EXPORT_GROUP = “fileExportGroup” ; FILE_EXPORTASPDF_GROUP = “fileExportAsPDFGroup” FILE_PRINT_GROUP = “ filePrintGroup” FILE_PRINTPREVIEW_GROUP = “ filePrintPreviewGroup” FILE_PROPERTIES_GROUP = “filePropertiesGroup” FILE_PREFERENCES_GROUP = “filePreferencesGroup” FILE_EXIT_GROUP = “fileExitGroup” Table B-5 Common File menu actions Constant value FILE_CLOSE_ACTION_ID = “com.ibm.rcp.ui.filemenu.close” FILE_EXIT_ACTION_ID = “com.ibm.rcp.ui.filemenu.exit” FILE_PREFERENCES_ACTION_ID = “com.ibm.rcp.ui.filemenu.preferences” FILE_OPEN_ACTION_ID = “ com.ibm.rcp.ui.filemenu.open” FILE_PRINT_ACTION_ID = “com.ibm.rcp.ui.filemenu.print” Appendix B. IBM Workplace 2.5.1 menu IDs 187 FILE_PRINTPREVIEW_ACTION_ID = “com.ibm.rcp.ui.filemenu.printpreview” FILE_PAGESETUP_ACTION_ID = “com.ibm.rcp.ui.filemenu.pagesetup” Table B-6 Edit menu group markers Constant value EDITMENU_UNDO_GROUP = “editmenuUndoGroup” EDITMENU_GROUP1 = “editmenuGroup1” EDITMENU_GROUP2 = “editmenuGroup2” EDITMENU_GROUP3 = “editmenuGroup3” Table B-7 Common Edit menu actions Constant value EDIT_REDO_ACTION_ID = “com.ibm.rcp.ui.editmenu.redo” EDIT_UNDO_ACTION_ID = “com.ibm.rcp.ui.editmenu.undo” EDIT_CUT_ACTION_ID = “com.ibm.rcp.ui.editmenu.cut” EDIT_COPY_ACTION_ID = “com.ibm.rcp.ui.editmenu.copy” EDIT_PASTE_ACTION_ID = “com.ibm.rcp.ui.editmenu.paste” EDIT_FIND_ACTION_ID = “com.ibm.rcp.ui.editmenu.find” EDIT_DELETE_ACTION_ID = “com.ibm.rcp.ui.editmenu.delete” EDIT_SELECT_ALL_ACTION_ID = “com.ibm.rcp.ui.editmenu.selectall” EDIT_MOVETOFOLDER_ACTION_ID = “com.ibm.rcp.ui.editmenu.movetofolder” Table B-8 View menu group markers Constant value VIEWMENU_GROUP1 = “viewmenuGroup1” VIEWMENU_GROUP2 = “viewmenuGroup2” VIEWMENU_GROUP3 = “ viewmenuGroup3” VIEWMENU_GROUP4 = “viewmenuGroup4” VIEWMENU_GROUP5 = “viewmenuGroup5” VIEWMENU_MAXIMIZETAB_GROUP = “viewmenuMaximizeTabGroup” 188 IBM Workplace Managed Client: ISV Integration Guide Table B-9 Common View menu actions Constant value VIEW_SHOW_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show” VIEW_SHOW_STATUSBAR_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.statusbar” VIEW_SHOW_PREVIEWPANE_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.previewpane” VIEW_SHOW_SEARCHBAR_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.searchbar” VIEW_SHOW_SWITCHERBAR_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.switcherbar” VIEW_SHOW_SWITCHERLABELS_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.switcherlabels” VIEW_SHOW_SIDEBAR_ACTION_ID = “com.ibm.rcp.ui.viewmenu.show.sidebar” VIEW_MAXIMIZECURRENTTAB_ACTION_ID = “com.ibm.rcp.ui.viewmenu.maximizecurrenttab” Table B-10 Actions menu group markers Constant value ACTIONSMENU_GROUP1 = “actionsmenuGroup1” ACTIONSMENU_CANCEL_GROUP = “actionsCancelGroup” ACTIONSMENU_EDIT_GROUP = “editGroup” ACTIONSMENU_ACTIONS_GROUP = “actionsGroup” ACTIONSMENU_RESOLVECONFLICT_GROUP = “resolveConflictGroup” ACTIONSMENU_SLIDESHOW_GROUP = “slideShowGroup”; ACTIONSMENU_GROUP2 = “actionsmenuGroup2” ACTIONSMENU_GROUP3 = “actionsmenuGroup3” Table B-11 Tools menu group markers Constant value TOOLSMENU_GROUP1 = “ toolsmenuGroup1” TOOLSMENU_LIBRARY_GROUP = “ toolsmenuLibraryGroup” Table B-12 Help menu group markers Constant value HELP_ABOUT_ACTION_ID = “com.ibm.workplace.client.common.ui.aboutaction” BOOKMARKS_MENUID = “bookmarks” Appendix B. IBM Workplace 2.5.1 menu IDs 189 190 IBM Workplace Managed Client: ISV Integration Guide C Appendix C. Additional material and feature quick reference This section refers to additional material that can be downloaded from the Internet. We also provide a quick reference for the various features provided by IBM Workplace Managed Client explained in this paper. © Copyright IBM Corp. 2006. All rights reserved. 191 Locating the Web material The Web material associated with this Redpaper is available in softcopy on the Internet from the IBM Redbooks Web server. Point your Web browser to: ftp://www.redbooks.ibm.com/redbooks/REDP4119 Alternatively, you can go to the IBM Redbooks Web site at: ibm.com/redbooks Select the Additional materials and open the directory that corresponds with the Redpaper form number, REDP4119. Using the Web material The additional Web material that accompanies this Redpaper includes the following files: File name EclipseRCP.zip Notes.zip Swing.zip Web.zip AllCombined.zip Description Eclipse RCP example code Notes and Domino example code Swing example code Web and portal example code All example code Each of the first four ZIP files corresponds to an individual chapter. How to use the Web material Create a directory (folder) and unzip the contents of the Web material zip files into this folder. There are four individual archive files, with the AllCombined.zip file containing all four. Each contains two or more of the following folders: 1. Coexist 2. Accommodate 3. Leverage 4. Exploit Each of these folders correspond to the documented level of integration in each of the appropriate chapters. Each of these folders contains two subfolders, src and deploy. The src folder in each contains one or more Eclipse projects that can be imported into an Eclipse workspace with an IBM Workplace Client Technology development environment installed, as described in the developerWorks article located at: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic To do this: 1. Select File → Import → Existing Projects Into Workspace. 2. For each project under the src folder, select it and click Finish. The deploy folder contains either complete applications, or a Workplace Managed Client deployable set, which can be easily installed on a Workplace Collaborative Services server by following the DeployInstructions.txt file that is packaged with each project. 192 IBM Workplace Managed Client: ISV Integration Guide For example, Example C-1 shows how the EclipseRCP archive is laid out, with greater detail provided for the Accomodate folder. Example: C-1 Partial layout of the EclipseRCP archive file EclipseRCP - 1. Coexist - deploy - src - 2. Accomodate - deploy - com.ibm.wcttool.sldv2 - features com.ibm.wcttool.sldv2_1.0.0.jar - images van.png - plugins com.ibm.wcttool.sldlv1_1.0.0.jar com.ibm.wcttool.sldv2.switcher_1.0.0.jar DeleteScript.xml DeployInstructions.txt siteFragment.xml - src - com.ibm.wcttool.sldv1 - com.ibm.wcttool.sldv2 - com.ibm.wcttool.sldv2.MainPage - com.ibm.wcttool.sldv2.switcher - 3. Leverage - deploy - src - 4. Exploit - deploy - src To execute a Workplace Managed Client application project from Eclipse or IBM Rational Application Developer, follow the instructions at: http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic Workplace Managed Client feature quick reference Table C-1 Feature quick reference Feature Code package Documentation section Action bar EclipseRCP/3 Leverage/src.com.ibm.wcttool.sldv2 2.4.4, “Using an action bar to replace the view toolbar” on page 38 Menus EclipseRCP/3 Leverage/src.com.ibm.wcttool.sldv2 2.4.5, “Contributing to the Workplace Managed Client menus” on page 39 Swing/2 Accomodate/src/embeddedApp/com.ibm. wcttool.demviewer.pane1 3.4.1, “Contributing to the Workplace Managed Client menus” on page 60 EclipseRCP/3 Leverage/src.com.ibm.wcttool.sldv2 2.4.6, “Adding a Workplace Managed Client search bar” on page 40 Web/3 Leverage/src/com.ibm.wcttool.web.pane1 4.4.2, “Adding a Workplace Managed Client search bar” on page 95 Search bar Appendix C. Additional material and feature quick reference 193 Feature Code package Documentation section Shelf view EclipseRCP/3 Leverage/src.com.ibm.wcttool.sldv2 2.4.7, “Adding a Workplace Managed Client shelf view” on page 43 Status bar Swing/3 Leverage/src/com.ibm.wctdemo.awtint.ste p3 3.4.2, “Status bar integration” on page 68 Embedded Web browser Web/2 Accomodate/src/com.ibm.wcttool.web.pan e1 4.3.2, “Launching the embedded browser” on page 83 HTTP authentication Web/3 Leverage/src/com.ibm.wcttool.web.pane1 4.4.1, “HTTP authenticated application” on page 89 Document libraries EclipseRCP/4 Exploit/src/com.ibm.wcttool.sldlv2 6.2, “Working with document libraries” on page 141 Messaging and notification EclipseRCP/4 Exploit/src/com.ibm.wcttool.sldlv2 6.3, “Messaging and notification” on page 148 Online/offline awareness EclipseRCP/4 Exploit/src/com.ibm.wcttool.sldlv2 6.4, “Online and offline awareness” on page 150 Database/JDBC EclipseRCP/4 Exploit/src/com.ibm.wcttool.sldlv2 6.5, “Implementing database support” on page 155 Synchronization EclipseRCP/4 Exploit/src/com.ibm.wcttool.sldlv2 6.6, “Synchronizing client application data” on page 160 Security N/A 6.7, “Securing a client application” on page 166 Workplace Client Technology, Micro Edition - Enterprise Offering quick reference IBM Workplace Client Technology, Micro Edition - Enterprise Offering provides a runtime environment and integrated middleware components for application developers to extend many line of business enterprise applications to server-managed laptop computers and desktop systems for connected or disconnected usage. These applications can be optionally deployed within Workplace Managed Client along with other Workplace collaboration capabilities described in this Redpaper. The Enterprise Offering platform offers following services: An Eclipse-based Java rich client framework Relational database services through IBM DB2® Everyplace® or Cloudscape, and synchronization support through DB2 Everyplace Sync Client APIs Transactional, assured messaging services through IBM WebSphere MQ Everyplace Web application support through integrated browser controls and an integrated Web application container Web services client and hosting capabilities For additional information about Workplace Client Technology, Micro Edition - Enterprise Offering, refer to: http://www.ibm.com/software/wireless/wctme_eo/ 194 IBM Workplace Managed Client: ISV Integration Guide IBM Workplace Managed Client supports running the Enterprise Offering runtime environment on the IBM Workplace Managed Client platform, which means that ISVs can run Enterprise Offering applications on the IBM Workplace Managed Client platform. To learn how to deploy the Enterprise Offering applications on the Workplace Collaboration Services server, refer to IBM Workplace Managed Client API Toolkit User's Guide, wmcapi26_ug.pdf, that comes with the IBM Workplace Software Development Kit. Be aware that IBM Workplace Client Technology, Micro Edition - Enterprise Offering is being replaced by IBM WebSphere Everyplace Deployment. WebSphere Everyplace Deployment provides an updated Web container that supports Servlet 2.4 and JSP 2.0, an embedded transaction container that supports a subset of EJB 2.0, and tools that integrate into IBM Rational Software Development Platform. Developers might want to consider building applications for WebSphere Everyplace Deployment depending on the server from which they plan to deploy. In a future release, the IBM Workplace Managed Client and IBM WebSphere Everyplace Deployment will converge. For more information about WebSphere Everyplace Deployment, refer to: http://www.ibm.com/software/pervasive/ws_everyplace_deployment_client/ Appendix C. Additional material and feature quick reference 195 196 IBM Workplace Managed Client: ISV Integration Guide Related publications The publications listed in this section are considered particularly suitable for a more detailed discussion of the topics covered in this Redpaper. IBM Redbooks For information about ordering these publications, see “How to get IBM Redbooks” on page 199. Note that some of the documents referenced here may be available in softcopy only. IBM Workplace Client Technology Micro Edition Version 5.7.1: Application Development and Case Study, SG24-6496 Lotus Domino 7 Application Development, REDP-4102 Building a Component for IBM Workplace, REDP-3952 IBM Workplace Client Technology (Rich Client Edition) ISV Integration Guide, REDP-3883 Online resources These Web sites and URLs are also relevant as further information sources: IBM Workplace Managed Client product page http://www.ibm.com/software/workplace/products/product5.nsf/wdocs/workplaceclienttech IBM Workplace Managed Client trial http://www.ibm.com/software/workplace/products/product5.nsf/wdocs/wmctrial IBM Workplace Managed Client Developer Toolkit http://alphaworks.ibm.com/tech/wmctoolkit IBM Workplace Collaboration Services http://www.ibm.com/lotus/workplace IBM Cloudscape http://www.ibm.com/software/data/cloudscape/ IBM developerWorks Cloudscape information http://www.ibm.com/developerworks/db2/zones/cloudscape/ IBM Cloudscape Information Center http://publib.boulder.ibm.com/infocenter/cscv/v10r1/index.jsp IBM Lotus Notes http://www.ibm.com/software/sw-lotus/products/product4.nsf/wdocs/noteshomepage Workplace Collaboration Services documentation http://www.ibm.com/developerworks/workplace/documentation/collaborationservices/ Workplace Client Technology, Micro Edition - Enterprise Offering http://www.ibm.com/software/wireless/wctme_eo/ © Copyright IBM Corp. 2006. All rights reserved. 197 WebSphere Everyplace Deployment http://www.ibm.com/software/pervasive/ws_everyplace_deployment_client/ How IBM originally developed Eclipse http://www.ibm.com/developerworks/opensource/top-projects/eclipse-starthere.html?ca=dgrlnxw09 IBM WebSphere Portal for Multiplatforms Information Center http://publib.boulder.ibm.com/pvc/wp/502/ent/en/InfoCenter/index.html More information about LTPA http://www.ibm.com/developerworks/ibm/library/it-0101art2 IBM Workplace collaborative applications http://publib.boulder.ibm.com/infocenter/iwphelp/v2r5m1/index.jsp?topic=/com.ibm.wcs.ic. doc_2.5.1/infocenter/i_ovr_r_whatsnew.html Detailed tutorial about deploying the Workplace Managed Client: IBM developerWorks paper by Nishant Shah, Configuring and deploying a rich client application on IBM Workplace Collaboration Services server http://www.ibm.com/developerworks/workplace/library/deploy-client-application-workplace/ index.html WebSphere and Domino single sign-on http://www.ibm.com/developerworks/ibm/library/it-0101art2 Creating a Notes/Domino plug-in with Eclipse http://www.ibm.com/developerworks/lotus/library/notes-plugin-eclipse/ Introduction to the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/lotus/library/wmc-toolkit Creating an application with the IBM Workplace Managed Client Developer Toolkit http://www.ibm.com/developerworks/workplace/library/wmc-toolkit-basic/?ca=dnp-442 What you need to know about IBM Workplace: An introduction for developers http://www.ibm.com/developerworks/lotus/library/ls-ibmworkplace/index.html Developing and debugging Workplace Managed Client applications with IBM Rational Application Developer http://www.ibm.com/developerworks/rational/library/05/1206_min/ Working with application layouts in the IBM Workplace Managed Client, including full description of portlet variables http://www.ibm.com/developerworks/lotus/library/wmc-layouts/index.html Introducing the IBM Workplace Client Technology API http://www.ibm.com/developerworks/lotus/library/wcs-toolkit/index.html Introduction to Web Services for Remote Portlets: Use WSRP in a Service-Oriented Architecture http://www.ibm.com/developerworks/webservices/library/ws-wsrp/ Make your Eclipse applications richer with view linking: It's easy to link UI views and adapt view linking to non-UI settings http://www.ibm.com/developerworks/opensource/library/os-ecllink/ Apache Derby http://db.apache.org/derby/ 198 IBM Workplace Managed Client: ISV Integration Guide Eclipse Rich Client Platform http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Foundation http://www.eclipse.org Eclipse plug-ins http://www.eclipse.org/community/plugins.php Eclipse help system http://help.eclipse.org/help31/index.jsp Eclipse SWT http://www.eclipse.org/swt Eclipse Rich Client Tutorial Part 1 http://www.eclipse.org/articles/Article-RCP-1/tutorial1.html Eclipse User Interface Guidelines http://www.eclipse.org/articles/Article-UI-Guidelines/Contents.html Visual Editor for Eclipse http://www.eclipse.org/vep Visual Editor Documents http://www.eclipse.org/vep/WebContent/docs/doc.html JSR 168 specification http://www.jcp.org/aboutJava/communityprocess/final/jsr168/ http://developers.sun.com/prodtech/portalserver/reference/techart/jsr168/ Web Services for Remote Portlets (WSRP) http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp SyncML http://www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html OASIS Web Services for Remote Portlets (WSRP) http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp Lotus Domino Toolkit for Java/CORBA 2.1 http://www.higs.net/85256C89006A03D2/web/pageDominoJavaToolkit JavaBeans 101, Part II: Writing a Simple JavaBean http://java.sun.com/developer/onlineTraining/Beans/beans02/page3.html How to get IBM Redbooks You can search for, view, or download Redbooks, Redpapers, Hints and Tips, draft publications and Additional materials, as well as order hardcopy Redbooks or CD-ROMs, at this Web site: ibm.com/redbooks Help from IBM IBM Support and downloads ibm.com/support IBM Global Services ibm.com/services Related publications 199 200 IBM Workplace Managed Client: ISV Integration Guide Back cover IBM Workplace Managed Client: ISV Integration Guide Develop distributable applications using existing skills Integrate Swing, Eclipse RCP, Lotus Domino, and Web applications Fully exploit client and server collaborative components IBM Workplace Managed Client delivers fully integrated, server-managed collaboration to the end user's desktop. It provides the flexibility and portability of client-side applications, combined with the server-side control and cost savings traditionally associated with Web-based computing. IBM Workplace Managed Client is built on IBM Workplace Client Technology, the foundation for next-generation, network-centric computing. This IBM Redpaper will assist all IBM Business Partners and ISVs interested in learning how they can integrate their applications with IBM Workplace Managed Client, extend it, or build applications of their own that use this new platform. This paper expands on the original Redpaper, IBM Workplace Client Technology (Rich Client Edition) ISV Integration Guide, REDP-3883. ® Redpaper INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. For more information: ibm.com/redbooks