JMP103  Jumpstart Your "Jedi Plug-in Development Skills" with the Masters Ryan Baxter  | Staff Software Engineer...
About us <ul><li>Mikkel Flindt Heisterberg - @lekkim </li></ul><ul><ul><li>With IntraVision, Premier Business Partner from...
Been working with Notes/Domino since version 3.x
Design Partner Program for Notes NEXT and Lotus Connections, writer for THE VIEW, speaker at Lotusphere
Recently had a baby daughter (explains why he looks so tired) </li></ul><li>Ryan Baxter - @ryanjbaxter </li><ul><li>Staff ...
Developer for Lotus Notes
Lead developer for Notes Client Java UI APIs
OpenSocial Foundation Member
Novice blogger
Getting married in June (not so tired yet) </li></ul></ul>
Let's pay attribution where it's due... <ul><li>IBM Lotus® Notes®
IBM Lotus® Sametime®
IBM Lotus ®  Expeditor®
IBM Lotus® Symphony®
Microsoft Windows®
Java™
Linux®
All Star Wars stuff is the property  </li></ul>of LucasArts! <ul><li>All other trademarks are a property of their respecti...
Images </li><ul><li>http://mistavybeworld.com/wp-content/uploads/2009/08/star-wars-episode3-darth-vader.jpg
http://2.bp.blogspot.com/_HigwL7YghlM/TB5in0r2sTI/AAAAAAAAA6g/axDh5qtbYAM/s1600/yoda.jpg </li></ul></ul>
What we're going to build <ul><li>Sidebar panel </li><ul><li>A list box
Three buttons at the bottom </li><ul><li>One button reads from a web service
One button reads contacts from names.nsf
One button creates a new email </li><ul><li>Reads recipient from list
Create document
Set subject
Add data from web service call to body </li></ul></ul></ul><li>Create a feature for the plugin
Create an update site with the feature
Create a widget for the feature from the update site </li></ul>
Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
Installing Lotus Expeditor Toolkit
Plugin Development Basics
Building UI's (SWT / JFace)
API's
Debugging Your Plugins
Building and Deploying
Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.”  - Yoda
About Eclipse <ul><li>100% open source project </li></ul><ul><li>Development Environment
Extensible platform
Eclipse Site </li><ul><li>http://eclipse.org </li></ul><li>Eclipse Wiki </li><ul><li>http://wiki.eclipse.org </li></ul><li...
Eclipse Architecture Workbench JFace SWT Core Extension Point Framework Service Framework Rich Client Platform Plug-in Plu...
IBM Lotus Clients – Built on Eclipse Sametime Expeditor Apps and Plug-ins (ISV + Customer) Notes Symphony Industry knowled...
Eclipse Workbench
Notes Workbench s
Why Plugin Development? <ul><li>Plugin development is often about integration </li><ul><li>You often build extensions to e...
Eclipse and therefore Expeditor, Notes, Symphony, and Sametime, are built to allow for extensibility </li></ul><li>Plugin ...
Well Adopted
Multi-platform
Libraries </li></ul><li>Eclipse Community </li><ul><li>Web Services
Web Applications
Database Integrations
etc.... </li></ul></ul></ul>
Lotus Expeditor Toolkit – A Plugin Developer's Lightsaber <ul><li>An integrated set of tools to develop, test, and deploy ...
FREE! No charge to use the Expeditor toolkit
Supported on Windows and Linux operating systems </li></ul><li>Benefits Of Using The Toolkit </li><ul><li>Easily configure...
Point to the target locations on your machine </li></ul></ul><li>Provides a new launcher to launch products built on top o...
Lotus Expeditor Toolkit Architecture Integrated Development Environment (IDE) Integrated Development Environment (IDE) Ecl...
Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
Installing Lotus Expeditor Toolkit
Plugin Development Basics
Building UI's (SWT / JFace)
API's
Debugging Your Plugins
Building and Deploying
Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.”  - Yoda
Installing the Expeditor Toolkit <ul><li>Download the Expeditor Toolkit </li><ul><li>http://bit.ly/fKMF5o
Unzip </li></ul><li>In Eclipse </li><ul><li>Help -> Software Updates... </li></ul></ul>
Adding The Update Site <ul><li>Click New Local Site...
Upcoming SlideShare
Loading in …5
×

Lotusphere 2011 Jmp103 - Jumpstart Your "Jedi Plug-in Development Skills" with the Masters

3,084 views
2,911 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,084
On SlideShare
0
From Embeds
0
Number of Embeds
355
Actions
Shares
0
Downloads
114
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Open Sources Project One of the best IDEs Integration for almost any kind of language you can images Extensible SCM plugins, SQL DB plugins, UML plugins, Web Dev plugins Expeditor and therefore Notes, Sametime, and Syphomy are build ontop of it Other companies also build applications ontop of Eclipse, other IDEs like Aptana, and MyEclipse Resources are endless with Eclipse
  • Give a quick overview of the workbench, this will be useful for later on so they can see how it related to the Notes workbench and when we talk about things like “views” they know what they are All of the pieces of the workbench correlate to Notes as well
  • Point out that some of the most recognizable parts of the Notes workbench are just Eclipse concepts. We achieve this via plugins
  • Why should they care about plugins? Its all about extensibility and integration Plugin development is a great way to integrate into Lotus products. Once you have the knowledge you know how to integrate into 4 Lotus products Java Java Java Java is a 1 st class language, its mature and has a ton of libraries You can do a ton of things with plugins like work with web services, integrate with web applications, integrate with Database applications
  • The Expeditor toolkit provides tools for developers to get started building plugins for Lotus products Makes your life easy, easy configuration and easy launching to test your plugins Free not charge to download it
  • You can use any number of eclipse configurations with the expeditor toolkit
  • Download from IBM Unzip In Eclipse go to Help -&gt; Software Updates This is where you install features into eclipse, we will talk more about features later
  • Select Local Site Go to where you unziped the download Click OK
  • Select the top level expeditor toolkit feature Click Install
  • Accept the license agreement and install the features After the install finished restart eclipse
  • Walk them through setting up the expeditor toolkit Create a new workspace in eclipse Configure the toolkit Create a new run configuration Launch Notes
  • From Pierre: automatic manifest management, migration of secondary dependencies, other migration capabilities (mostly on other CS project types), common UI category (requested via UI team).
  • Java – goes in the src folder Manifest.mf – basic properties, and dependencies Plugin.xml – extention points Build.properties – for when you build your plugin Resources – other resources your plugin uses
  • Plugins live in the Notes install directory Most are compiled as jars
  • Walk through creating a new plugin project Explain the different pieces just covered in the slides
  • Extension points provide you with integration points Plugins define extension points for other plugins to use Eclipse, and Expeditor both define extension points The reason for extension points is to allow the platform to me performant, eclipse only loads the code when it has to Eclipse provides an editor for you to leverage and define extension points, also provides wizards Extension points are documented
  • Demo adding a view and a sidebar
  • Show this page but just jump right to a demo This is probably a good 5 minutes of demo Probably just show the attachment viewer Preference page or selection Show the Debug configuration screen Set a breakpoint line 73, Viewer.java (selectionChanged) Launch Notes and open an email with an attachment Explain the variables panel, show the selection object Then show what the osgi console is all about Setting logging levels
  • Lotusphere 2011 Jmp103 - Jumpstart Your "Jedi Plug-in Development Skills" with the Masters

    1. 1. JMP103 Jumpstart Your &quot;Jedi Plug-in Development Skills&quot; with the Masters Ryan Baxter | Staff Software Engineer | IBM Mikkel Flindt Heisterberg | Developer | IntraVision
    2. 2. About us <ul><li>Mikkel Flindt Heisterberg - @lekkim </li></ul><ul><ul><li>With IntraVision, Premier Business Partner from Denmark
    3. 3. Been working with Notes/Domino since version 3.x
    4. 4. Design Partner Program for Notes NEXT and Lotus Connections, writer for THE VIEW, speaker at Lotusphere
    5. 5. Recently had a baby daughter (explains why he looks so tired) </li></ul><li>Ryan Baxter - @ryanjbaxter </li><ul><li>Staff Software Engineer, IBM
    6. 6. Developer for Lotus Notes
    7. 7. Lead developer for Notes Client Java UI APIs
    8. 8. OpenSocial Foundation Member
    9. 9. Novice blogger
    10. 10. Getting married in June (not so tired yet) </li></ul></ul>
    11. 11. Let's pay attribution where it's due... <ul><li>IBM Lotus® Notes®
    12. 12. IBM Lotus® Sametime®
    13. 13. IBM Lotus ® Expeditor®
    14. 14. IBM Lotus® Symphony®
    15. 15. Microsoft Windows®
    16. 16. Java™
    17. 17. Linux®
    18. 18. All Star Wars stuff is the property </li></ul>of LucasArts! <ul><li>All other trademarks are a property of their respective owner
    19. 19. Images </li><ul><li>http://mistavybeworld.com/wp-content/uploads/2009/08/star-wars-episode3-darth-vader.jpg
    20. 20. http://2.bp.blogspot.com/_HigwL7YghlM/TB5in0r2sTI/AAAAAAAAA6g/axDh5qtbYAM/s1600/yoda.jpg </li></ul></ul>
    21. 21. What we're going to build <ul><li>Sidebar panel </li><ul><li>A list box
    22. 22. Three buttons at the bottom </li><ul><li>One button reads from a web service
    23. 23. One button reads contacts from names.nsf
    24. 24. One button creates a new email </li><ul><li>Reads recipient from list
    25. 25. Create document
    26. 26. Set subject
    27. 27. Add data from web service call to body </li></ul></ul></ul><li>Create a feature for the plugin
    28. 28. Create an update site with the feature
    29. 29. Create a widget for the feature from the update site </li></ul>
    30. 30. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    31. 31. Installing Lotus Expeditor Toolkit
    32. 32. Plugin Development Basics
    33. 33. Building UI's (SWT / JFace)
    34. 34. API's
    35. 35. Debugging Your Plugins
    36. 36. Building and Deploying
    37. 37. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    38. 38. About Eclipse <ul><li>100% open source project </li></ul><ul><li>Development Environment
    39. 39. Extensible platform
    40. 40. Eclipse Site </li><ul><li>http://eclipse.org </li></ul><li>Eclipse Wiki </li><ul><li>http://wiki.eclipse.org </li></ul><li>Planet Eclipse </li><ul><li>http://www.planeteclipse.org </li></ul></ul>
    41. 41. Eclipse Architecture Workbench JFace SWT Core Extension Point Framework Service Framework Rich Client Platform Plug-in Plug-in Extension Pt. Plug-in Extension Point Extension Point Extension Point A software component in Eclipse Extension Point declares contract to extend plug-in functionality Extension code extends this functionality RCP allows you to build GUI apps on multiple OS SWT provides uniform UI API across multiple OS that calls OS UI API for native look and feel JFace provides components to make it easier to write a GUI e.g. wizards, preference pages, actions, dialogs Workbench is desktop UI and customizable Service Framework supports registration and lifecycle management of plug-ins
    42. 42. IBM Lotus Clients – Built on Eclipse Sametime Expeditor Apps and Plug-ins (ISV + Customer) Notes Symphony Industry knowledge and experience ecosystem of partners open and extensible collaborative services Integrated applications Portal Browser Desktop Mobile Multiplatform support Scalability Security
    43. 43. Eclipse Workbench
    44. 44. Notes Workbench s
    45. 45. Why Plugin Development? <ul><li>Plugin development is often about integration </li><ul><li>You often build extensions to existing applications to add functionality
    46. 46. Eclipse and therefore Expeditor, Notes, Symphony, and Sametime, are built to allow for extensibility </li></ul><li>Plugin development has several advantages </li><ul><li>Java </li><ul><li>Mature
    47. 47. Well Adopted
    48. 48. Multi-platform
    49. 49. Libraries </li></ul><li>Eclipse Community </li><ul><li>Web Services
    50. 50. Web Applications
    51. 51. Database Integrations
    52. 52. etc.... </li></ul></ul></ul>
    53. 53. Lotus Expeditor Toolkit – A Plugin Developer's Lightsaber <ul><li>An integrated set of tools to develop, test, and deploy applications built on top of Expeditor </li><ul><li>Supports Expeditor, Sametime, Notes and Symphony
    54. 54. FREE! No charge to use the Expeditor toolkit
    55. 55. Supported on Windows and Linux operating systems </li></ul><li>Benefits Of Using The Toolkit </li><ul><li>Easily configure your development environment to develop for the platforms above </li><ul><li>Takes ~ 1 minute to configure your environment </li><ul><li>Set your target environment
    56. 56. Point to the target locations on your machine </li></ul></ul><li>Provides a new launcher to launch products built on top of Expeditor </li><ul><li>Create a new launch configuration to launch the application from Eclipse </li></ul><li>Provides numerous samples to get your started developing for Expeditor based products </li></ul></ul>
    57. 57. Lotus Expeditor Toolkit Architecture Integrated Development Environment (IDE) Integrated Development Environment (IDE) Eclipse Feature Rational Application Developer 7.5 Eclipse 3.4 WTP* 3.0 Rational Software Architect 7.5 Lotus Expeditor Toolkit 6.2 Microsoft Windows RedHat Linux SuSE Linux optional optional optional
    58. 58. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    59. 59. Installing Lotus Expeditor Toolkit
    60. 60. Plugin Development Basics
    61. 61. Building UI's (SWT / JFace)
    62. 62. API's
    63. 63. Debugging Your Plugins
    64. 64. Building and Deploying
    65. 65. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    66. 66. Installing the Expeditor Toolkit <ul><li>Download the Expeditor Toolkit </li><ul><li>http://bit.ly/fKMF5o
    67. 67. Unzip </li></ul><li>In Eclipse </li><ul><li>Help -> Software Updates... </li></ul></ul>
    68. 68. Adding The Update Site <ul><li>Click New Local Site...
    69. 69. Browse to unziped update site
    70. 70. Select OK </li></ul>
    71. 71. Selecting The Expeditor Toolkit Feature <ul><li>Select The Expeditor Toolkit Feature
    72. 72. Click Install... </li></ul>
    73. 73. Accepting The License Agreement <ul><li>Agree to the license agreement
    74. 74. Install all features
    75. 75. Restart </li></ul>
    76. 76. Demo: Configuring the Expeditor Toolkit <ul><li>Start IDE </li></ul><ul><li>Select Test Environment </li><ul><li>Symphony
    77. 77. Sametime
    78. 78. Notes
    79. 79. Expeditor </li></ul><li>Specify Target Location </li><ul><li>Point to target runtime
    80. 80. <install>/framework/rcp/eclipse </li></ul><li>Click OK
    81. 81. Run -> Run Configuration
    82. 82. Double Click Client Services
    83. 83. Give The Configuration A Name
    84. 84. Select Run </li></ul>
    85. 85. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    86. 86. Installing Lotus Expeditor Toolkit
    87. 87. Plugin Development Basics
    88. 88. Building UI's (SWT / JFace)
    89. 89. API's
    90. 90. Debugging Your Plugins
    91. 91. Building and Deploying
    92. 92. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    93. 93. What Are Plugins? <ul><li>Plugins are the building blocks of Eclipse based applications </li><ul><li>At their core a plugin is some code plus some declarations (extension points)
    94. 94. By themselves plugins may not do anything, but when you start combining plugins you can build very powerful applications
    95. 95. Examples: Eclipse, Sametime, Symphony, Notes </li></ul></ul>Application Plugin
    96. 96. Anatomy Of A Plugin <ul><li>Whats inside a plugin? </li><ul><li>Java code
    97. 97. Manifest.mf </li><ul><li>Basic properties of a plugin
    98. 98. Specifies dependencies this plugin has </li></ul><li>Plugin.xml </li><ul><li>Extension points the plugin uses
    99. 99. Extension points the plugin defines (covered in the advanced session) </li></ul><li>Build.properties </li><ul><li>Manages the build configuration of the plugin (covered in the advanced session) </li></ul><li>Resources (Optional) </li><ul><li>Jars the plugin may need
    100. 100. Files used for translation
    101. 101. Images
    102. 102. etc.... </li></ul></ul></ul>
    103. 103. Anatomy Of A Plugin – compiled code <ul><li>Expeditor platform plugins installed in: </li><ul><li><notes directory>frameworkrcpeclipse </li></ul><li>Lotus Notes platform plugins installed in: </li><ul><li><notes directory>frameworksharedeclipseplugins </li></ul><li>Third party plugins installed in Notes Data directory </li><ul><li><notes data>workspaceapplicationseclipseplugins </li></ul><li>Compiled as a .jar file or as directory </li></ul>
    104. 104. Demo: Creating A Plugin Project <ul><li>File -> New -> Project -> Plugin Development
    105. 105. Select Plug-in Project </li></ul>
    106. 106. Extension Points <ul><li>Extension points make plugins “pluggable” </li><ul><li>Plugins define extension points for other plugins to use </li><ul><li>Examples: sidebar, toolbar buttons, right click menus... </li></ul><li>Extension points allow the platform to be more performant </li></ul><li>Eclipse has a nice editor for adding and defining extension points
    107. 107. How do I know what extension points are available? </li><ul><li>Eclipse.org and the Expeditor wiki are your friends </li></ul></ul>Plugin Using Extension Point Extension Point Definition
    108. 108. Key Extension Points <ul><li>org.eclipse.ui.views </li><ul><li>Registers a view part with the platform
    109. 109. View parts can be used inside perspectives or in the sidebar </li></ul><li>com.ibm.rcp.ui.shelfView </li><ul><li>An Expeditor extension point
    110. 110. Used to add a view part to the sidebar </li></ul><li>org.eclipse.ui.actionSets </li><ul><li>Used to add top level toolbars and menus </li></ul><li>org.eclipse.ui.menus </li><ul><li>Used to add context menus </li></ul><li>org.eclipse.ui.preferencePages </li><ul><li>Used to add preference pages to the preferences </li></ul></ul>
    111. 111. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    112. 112. Installing Lotus Expeditor Toolkit
    113. 113. Plugin Development Basics
    114. 114. Building UI's (SWT / JFace)
    115. 115. API's
    116. 116. Debugging Your Plugins
    117. 117. Building and Deploying
    118. 118. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    119. 119. <ul><li>Platform native look and feel …
    120. 120. Drag and Drop
    121. 121. Keyboard integration
    122. 122. 2D and Vector Graphics
    123. 123. Better responsiveness
    124. 124. Hardware Device Integration
    125. 125. Protection from OS Level Changes </li></ul>Building User Interfaces With SWT
    126. 126. JFace <ul><li>UI toolkit built on top of SWT without hiding it
    127. 127. Provides coarser grained components than SWT </li><ul><li>Dialogs
    128. 128. Image / Font Registries
    129. 129. Wizards
    130. 130. Viewers </li></ul></ul>
    131. 131. JFace (cont.) <ul><li>Viewers are very usable – not that the others are not – but you have to grok how to use them
    132. 132. Consists of 3 core components </li><ul><li>The viewer (e.g. TreeViewer, TableViewer)
    133. 133. The content provider (provides the objects we show in the viewer)
    134. 134. The label provider (provides the labels for the viewer – usually obtained from the objects) </li></ul><li>http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm </li></ul>
    135. 135. SWT WindowBuilder Pro – FREE!! from Google For More Info Visit http://bit.ly/9ZxwNA
    136. 136. Demo: Create A Sidebar And Try It Out <ul><li>Add org.eclipse.ui.views extension point
    137. 137. Create view part class
    138. 138. Add com.ibm.rcp.ui.shelfView extension point
    139. 139. Use WindowBuilder to create UI
    140. 140. Try It Out! </li></ul>
    141. 141. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    142. 142. Installing Lotus Expeditor Toolkit
    143. 143. Plugin Development Basics
    144. 144. Building UI's (SWT / JFace)
    145. 145. API's
    146. 146. Debugging Your Plugins
    147. 147. Building and Deploying
    148. 148. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    149. 149. All The APIs You Need <ul><li>Do not reinvent the wheel!
    150. 150. Java and Eclipse contains a rich set of API's that you can use when developing plugins for Lotus clients
    151. 151. Knowing the API's available to you is crucial
    152. 152. We'll cover </li><ul><li>Jobs (threading)
    153. 153. Logging
    154. 154. Notes backend
    155. 155. Notes frontend </li></ul></ul>
    156. 156. Threading lightly! <ul><li>A thread is an abstraction in computers to allow programs to perform multiple operations simultaneously </li><ul><li>Avoid tying up the program with background operations </li></ul><li>Two ways to call other code </li><ul><li>Synchronously == blocking </li><ul><li>Blocks current code until call is done and then returns to continue processing
    157. 157. Like you're used to from LotusScript </li></ul><li>Asynchronously == non-blocking </li><ul><li>The calling code continues to run – you now have two pieces of code running
    158. 158. To tell the caller we're done we use callbacks or listeners
    159. 159. Harder to grasp
    160. 160. Used in AJAX – you request data in the background and once the data has been fetched you are told </li></ul></ul></ul>
    161. 161. Jobs, jobs, jobs – lets vote for jobs! <ul><li>Eclipse Job Framework </li><ul><li>java.lang.Thread is way too low-level and error prone
    162. 162. Allows for easy background processing
    163. 163. Very simple to use
    164. 164. Allows scheduling of jobs (“run this code in 2 minutes”)
    165. 165. Allows weaving of jobs
    166. 166. Allows for listening to job status etc.
    167. 167. Standard UI for manipulating jobs </li></ul><li>Two types of Job </li><ul><li>Job – for background processing
    168. 168. UIJob – for user interface updates </li></ul><li>Both are abstract classes and normally used as anonymous inner classes
    169. 169. HIGHLY recommended article: http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html </li></ul>
    170. 170. There can be only one! <ul><li>Any Eclipse application only has ONE thread that may update the user interface
    171. 171. It's – surprise, surprise – called the “UI thread”
    172. 172. This means that </li><ul><li>Tying up the UI thread will render the entire client unresponsive
    173. 173. Attempts to access the UI (i.e. set the text of a label) outside the UI thread will fail with an exception
    174. 174. You need a way to “do stuff” in the UI thread </li></ul><li>To do stuff in the UI thread you use an UIJob from the Job API </li></ul>
    175. 175. Using Job in code public void fireOnTheEmpire(int initDelay, final String jediName) { // create recurring job to poll web service new Job(&quot;Poll the Force!&quot;) { protected IStatus run(IProgressMonitor monitor) { // invoke endpoint using input String srvc = “http://moon5.tatooine.com/JediFinder”; WSFacade facade = new WSFacade(srvc); String result = facade.fire(jediName); // do something with the result ... // reschedule this job (in 5 mintues) this.schedule(5 * 60 * 1000); // return return Status.OK_STATUS; } }.schedule(initialDelay * 60 * 1000); }
    176. 176. Using UIJob in code final List lstJedis = new List(parent, SWT.NONE); ... public void psssst( final String[] jedis) { // since we're called in a background process // use that UIJob we learned about to update the UI new UIJob(&quot;Load Jedis&quot;) { public IStatus runInUIThread(IProgressMonitor monitor) { // update UI for (String jedi : jedis) { lstJedis.add(jedi); } // return status return Status.OK_STATUS; } }.schedule(); }
    177. 177. Don't Go To The Dark Side! public void createPartControl(Composite parent) { final Label txt = new Label(parent, SWT.NONE); new UIJob(&quot;Indicate job starting&quot;) { public IStatus runInUIThread(IProgressMonitor monitor) { // update label txt.setText(&quot;Turning star cruiser (&quot; + new Date() + &quot;)...&quot;); // do long running task try { Thread.sleep(5000); } catch (Exception e) {} // update label txt.setText(&quot;Done turning star cruiser (&quot; + new Date() + &quot;)...&quot;); // schedule this.schedule(5000); // return return Status.OK_STATUS; } }.schedule(5000); }
    178. 178. Weaving jobs <ul><li>Most operations usually include a UI and a background component so you need to “weave jobs”
    179. 179. A typical operation from the user consists of 3 steps: </li></ul><ul><ul><li>Usually you start of with a UI call (button click i.e. button selection)
    180. 180. You perform some background operation (e.g. load data from a web service or similar)
    181. 181. You need to “call back” into the UI and update or inform </li></ul></ul><ul><li>We call this “to weave job”
    182. 182. We do it by nesting Job instances </li></ul>
    183. 183. A nice example of how a Jedi does it! public void widgetSelected(SelectionEvent event) { // update label to tell user we're starting off list.add(&quot;Starting to run code (&quot; + new Date() + &quot;)...&quot;, 0); // create job for background operation and schedule it new Job(&quot;Long running job&quot;) { protected IStatus run(IProgressMonitor monitor) { // do operation that possibly takes a while downloadEntireGalacticLibrary(); // call back into UI to tell user we're done new UIJob(&quot;Update UI&quot;) { public IStatus runInUIThread(IProgressMonitor monitor) { list.add(&quot;Done running code (&quot; + new Date() + &quot;)...&quot;, 0); return Status.OK_STATUS; } }.schedule(); // return return Status.OK_STATUS; } }.schedule(); }
    184. 184. Demo: Using Jobs in your code <ul><li>Adding a button for background operation
    185. 185. Add selection listener
    186. 186. Load data from the web
    187. 187. Once call is done update the UI </li></ul>
    188. 188. Logging <ul><li>System.out.println is NEVER the solution! </li><ul><li>Seems easy at first but 99% of the time it's easier to just use logging from the beginning </li></ul><li>Lotus Expeditor / Notes comes with many supported logging mechanisms </li><ul><li>The one to use is java.util.logging as it's built-in and easy to use and configure </li></ul><li>Logging is done through the Logger class and at a specified Level </li><ul><li>Level (SEVERE, WARNING, INFO, FINE, FINER, FINEST, CONFIG)
    189. 189. Expensive logging may be guarded using isLoggable(Level) </li></ul><li>Loggers are hierarchically named and level is set hierarchically as well </li><ul><li>com </li><ul><li>ls11 </li><ul><li>jmp103
    190. 190. ad201 </li></ul></ul></ul></ul>## ## ######## ## ## ####### ## ## ####### ######## ## ######## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ######### ###### ## ## ## ## ## ## ## ## ## ######## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ######## ######## ######## ####### ### ### ####### ## ## ######## ######## ####
    191. 191. Logging – example package com.ls11.demo1; public class MainViewPart extends ViewPart { private static final Logger logger = Logger.getLogger(MainViewPart.class .getPackage().getName()); public MainViewPart() { try { logger.info(&quot;Main view part instantiated&quot;); String senateCount = this.countSenators(); if (logger.isLoggable(Level.FINEST)) { logger.finest(&quot;Found “ + senateCount + “ senators (&quot; + this + “)”); } } catch (Throwable t) { logger.severe(“There was a disturbance in the Force!”, t); } } } <ul><li>Logging output goes to client log </li><ul><li>Help > Support > View Log/Trace </li></ul><li>Configured using </li><ul><li>OSGi console (come to AD201 for more info)
    192. 192. Edit <Notes data>/workspace/.config/rcpinstall.properties and add <logger name>.level=<LEVEL> at the end </li><ul><li>com.lekkimworld.twitnotes2.level=FINEST </li></ul></ul></ul>Logger name will be com.ls11.demo1
    193. 193. Demo: Add logging to the code <ul><li>Add a logger to our view part
    194. 194. Log the current sunrise and sunset
    195. 195. Enable logging </li></ul>
    196. 196. Notes backend API <ul><li>You have access to the Notes Java API you know and love!
    197. 197. Basic usage is almost the same as you know and love
    198. 198. To get access to the classes you </li><ul><li>DO NOT import notes.jar as you normally do
    199. 199. DO d epend on the com.ibm.notes.java.api plugin </li></ul><li>To access Notes data you </li><ul><li>DO NOT use NotesThread.sinitThread
    200. 200. DO use the Job API and the supplied NotesSessionJob </li></ul></ul>new NotesSessionJob(&quot;Access Notes data&quot;) { public IStatus runInNotesThread(Session session, IProgressMonitor monitor) throws NotesException { // print username System.out.println(session.getDatabase(null, “names.nsf”).getTitle()); // return return Status.OK_STATUS; } }.schedule();
    201. 201. Notes frontend API <ul><li>Modeled pretty much like the LotusScript UI API </li><ul><li>NotesUIWorkspace
    202. 202. NotesUIView
    203. 203. NotesUIDocument
    204. 204. … </li></ul><li>Should run in the UI thread
    205. 205. Ryan (and team) wrote it and bridges a MAJOR gap in the Notes product as it gives us access to the Notes UI from Java
    206. 206. Been with us for a while </li><ul><li>Added in Notes 8.5 as beta
    207. 207. Supported from Notes 8.5.1
    208. 208. More functionality added in Notes 8.5.2 </li></ul><li>To use it add a dependency on com.ibm.notes.java.ui
    209. 209. Example project available from OpenNTF.org (“Java UI API Exerciser”) </li></ul>
    210. 210. Notes frontend API (cont.) <ul><li>NotesUIWorkspace </li><ul><li>Entry point
    211. 211. Access to run an agent with context (access to LotusScript!) </li></ul><li>NotesUIView </li><ul><li>Most functionality added in Notes 8.5.2
    212. 212. Listen for selection events and view entries
    213. 213. Works for Java and traditional views </li></ul><li>NotesUIDocument </li><ul><li>You can work in the document on the glass
    214. 214. Access to backend document
    215. 215. Edit / Field / Modify listeners
    216. 216. Access to copy/paste, refresh, reload </li></ul><li>Data classes for easy access (i.e. NotesViewData) </li></ul>
    217. 217. Demo: Use the Notes API's <ul><li>Use NotesSessionJob to access the user's name.nsf file
    218. 218. Place the email addresses of the user's contacts in the list box
    219. 219. Use the composeDocument API to compose an email to a selected contact with the current sunrise and sunset </li></ul>
    220. 220. Notes frontend API (cont.) <ul><li>The API is a real treasure chest – we invite you to explore it!
    221. 221. There is also a lot of property testers for controlling visibility of commands and actions </li><ul><li>Read the RedWiki for more info on property testers </li></ul><li>For more on the Notes Java UI API you should mark your schedule for </li><ul><li>AD201 (How the Jedis do plugin development) on Monday @ 3:45pm in SW 7-10
    222. 222. BP203 (Leveraging the New Java APIs in IBM Lotus Notes 8.5.1 and 8.5.2) on Thursday @ 11.15am in Dolphin S. Hemisphere III </li></ul></ul>
    223. 223. Taking a Sametime Symphony into Account <ul><li>Plug-in development is much more than Lotus Notes
    224. 224. Remember that Lotus Sametime and Lotus Symphony are built on the same Eclipse technology and your skills can be reused there </li><ul><li>Different API's but the core stuff is the same - a sidebar view is still a sidebar view </li></ul><li>Lotus Expeditor contains a plethora of API's – look into those before you reinvent the wheel or say it cannot be done </li><ul><li>Ask us if you have specific questions – we love showing off! :-) </li></ul></ul>
    225. 225. Other Lotus APIs <ul><li>Accounts </li><ul><li>Secure storage for credentials
    226. 226. Automatic authentication for HTTP requests </li></ul><li>Lotus Sametime </li><ul><li>Awareness / realtime collaboration </li></ul><li>Search </li><ul><li>Search other applications from the search center </li></ul><li>Domino Designer </li><ul><li>Extend Domino Designer with custom actions </li></ul><li>Composite Applications </li><ul><li>Create components for CompApps using Eclipse technology and listen for properties and expose actions </li></ul><li>XPages Extensibility Library </li><ul><li>Add custom widgets for XPages </li></ul><li>LiveText / Toolbox (LiveText / Widgets API's is targeted to be publicly supported from 8.5.3) </li><ul><li>Inject recognizers based on business rules </li></ul></ul>
    227. 227. Eclipse API's <ul><li>Like with Lotus Notes there a multitude of API's available to you for </li><ul><li>Selection
    228. 228. Jobs
    229. 229. Actions / menus
    230. 230. Drag'n'drop
    231. 231. Custom drawing
    232. 232. Charting
    233. 233.
    234. 234. … </li></ul><li>Explore Eclipse.org and remember to search for “Eclipse” and not “Lotus Notes” as it will yield far more results </li></ul>
    235. 235. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    236. 236. Installing Lotus Expeditor Toolkit
    237. 237. Plugin Development Basics
    238. 238. Building UI's (SWT / JFace)
    239. 239. API's
    240. 240. Debugging Your Plugins
    241. 241. Building and Deploying
    242. 242. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    243. 243. <ul><li>Launching Notes from Eclipse
    244. 244. Set breakpoints
    245. 245. Inspecting variables
    246. 246. The console, logging levels </li></ul>Demo: Debugging Basics
    247. 247. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    248. 248. Installing Lotus Expeditor Toolkit
    249. 249. Plugin Development Basics
    250. 250. Building UI's (SWT / JFace)
    251. 251. API's
    252. 252. Debugging Your Plugins
    253. 253. Building and Deploying
    254. 254. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    255. 255. Sharing Your Plugins <ul><li>Now that you have coded your plugin you want to share it </li></ul>
    256. 256. Features and Update Sites <ul><li>Features contain one or more plugins </li><ul><li>The plugins in a feature should be related
    257. 257. Features can be created in Eclipse by creating a feature project </li><ul><li>Contains a feature.xml and build.properties file
    258. 258. Dependencies can be specified in the feature.xml </li></ul></ul><li>Update sites contain one or more features </li><ul><li>Update sites typically contain all the features needed for your extension
    259. 259. Can be created and built in Eclipse using an update site project </li></ul></ul>Feature Plug-in Plug-in . . . Feature Plug-in Plug-in . . . Update Site . . .
    260. 260. Deployment <ul><li>When deploying features to Lotus products we suggest you use the Update Site template (updatesite.ntf) and a Widget Catalog </li><ul><li>Better integration this way, especially via policies
    261. 261. Simpler for the end user </li></ul><li>The Update Site template is designed to host your Eclipse features in an update site running on the Domino server </li><ul><li>Access it via HTTP or NRPC </li></ul><li>Did you know widgets can be used to deploy Eclipse features? </li><ul><li>It's true!
    262. 262. All you have to do is create a widget which points to an Eclipse update site
    263. 263. You can use these types of widgets the same way you use other widgets </li></ul></ul>
    264. 264. Demonstration: Features, Update Sites, and Deployment <ul><li>Create a feature project
    265. 265. Create an update site
    266. 266. Create an update site NSF
    267. 267. Add our feature to the update site NSF
    268. 268. Create a widget for our feature
    269. 269. Add it to the catalog
    270. 270. Watch a video at: http://bit.ly/h4pjMb </li></ul>
    271. 271. Policies <ul><li>The Widgets feature can be managed via Domino policies
    272. 272. The Domino administrator has control over several aspects of the Widgets feature including </li><ul><li>Enablement/disablement of the My Widgets sidebar panel
    273. 273. Installation of widgets and “push” the installation of widgets to clients
    274. 274. Restrict the installation of widgets based on </li><ul><li>Provider
    275. 275. Eclipse extension point used </li></ul><li>Restrict the installation of widgets to specific types </li><ul><li>Google Gadget
    276. 276. Plugin
    277. 277. Notes View
    278. 278. etc. </li></ul></ul></ul>
    279. 279. Agenda <ul><li>About Eclipse and Lotus Expeditor Toolkit
    280. 280. Installing Lotus Expeditor Toolkit
    281. 281. Plugin Development Basics
    282. 282. Building UI's (SWT / JFace)
    283. 283. API's
    284. 284. Debugging Your Plugins
    285. 285. Building and Deploying
    286. 286. Resources, Examples, and Questions </li></ul>“ Do or do not... there is no try.” - Yoda
    287. 287. Examples <ul><li>Tungle </li><ul><li>http://bit.ly/f5h2hK </li></ul><li>Gist.com </li><ul><li>http://bit.ly/fL37Zr </li></ul><li>TwitNotes </li><ul><li>http://bit.ly/e5ZtIi </li></ul><li>File Explorer </li><ul><li>http://bit.ly/hlGc5Y </li></ul><li>Attachment Viewer </li><ul><li>http://bit.ly/eB8spk </li></ul></ul>
    288. 288. External Resources <ul><li>Eclipse Community Sites </li><ul><li>http://eclipse.org
    289. 289. http://wiki.eclipse.org
    290. 290. http://planeteclipse.org
    291. 291. Plugin Development articles </li><ul><li>http://www.eclipse.org/resources/?sort=date&category=Plug-ins </li></ul></ul><li>Lotus Community Sites </li><ul><li>Notes Client Java UI Javadoc </li><ul><li>http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Notes_Client_Java_UI_APIs-v8.5.2 </li></ul><li>Expeditor JavaDoc </li><ul><li>http://www-10.lotus.com/ldd/lewiki.nsf/dx/JavaDoc_6.2.2 </li></ul><li>Planet Lotus </li><ul><li>http://planetlotus.org/ </li></ul></ul><li>Great blogs to visit regularly </li><ul><li>Mikkels - http://lekkimworld.com/
    292. 292. Ryans - http://ryanjbaxter.wordpress.com/
    293. 293. Bob Balfes - http://blog.balfes.net/ </li></ul></ul>
    294. 294. Please fill in your evaluations!! <ul><li>Only positive comments please... :-) </li></ul>
    295. 295. Q&A <ul><li>Why?!
    296. 296. But?!
    297. 297. How?!
    298. 298. Join the community on lsonline.info </li><ul><li>http://bit.ly/JMP103 </li></ul></ul>Or come talk to us after the mean room staff throws us out! :-) Remember that we're here for you and there's nothing we'll rather do than answer your questions! “ May the force be with you.”
    299. 299. Legal Disclaimer © IBM Corporation 2011. All Rights Reserved. The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of WebDialogs, Inc., in the United States, other countries, or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both. Linux is a registered 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.

    ×