Redbook: So we are writing this Redbook on plugin development – what do you wanna know?


As posted the other day my nomination to ITSO was accepted and I’m now on the team for writing a Redbook wiki on plugin (or component if you will) development for Lotus Notes, Lotus Sametime and Lotus Symphony. We had our first call yesterday and we’re currently putting together the table of contents and discussing what to include.

For products versions we chose to target Lotus Notes 8.5.2, Lotus Sametime 8.0.2 and Lotus Symphony 3 beta 4. Of course we will try and make the samples work in prior versions but that’s the versions we’re aiming for. Any objections?

On the first call we also discussed the target audience for the wiki and defined who we’re writing for. Here’s what we came up with:

“We’re writing for Java developers with some experience in the language that is they know the syntax. We will aim to give them a high level introduction to the plugin model and give them the material to dive deeper and make sure the appropriate Eclipse resources are linked in. The specific topic sections should readable to those who want to dangle their feet but also deep enough to allow a Java developer that know about plugins to actually start building stuff to make production quality plugins. “

How does that sound?

I would be very interested in hearing what you (yes you!!) the Notes developer wants to know about plugin development and maybe what’s holding you back from getting started. Is it Java? Is it extension point documentation? Or is it something else? Please share and I’ll do my best to make sure it’s covered or at least written about here on the blog.

25 thoughts on “Redbook: So we are writing this Redbook on plugin development – what do you wanna know?”

  1. Deployment!  It deserves a chapter.

    Naturally, things like update sites need a proper treatment.

    But. specifically, what does a knowledgeable Notes developer need to do to load and open a plugin just by double-clicking a workspace square?

    Like

  2. "But. specifically, what does a knowledgeable Notes developer need to do to load and open a plugin just by double-clicking a workspace square?"

    What do you mean by the ahove? Do you mean "how to get started with plugin development incl IDE setup etc." or literally "how to invoke a plugin when double-clicking a workspace icon"?

    Like

  3. Um, yes.

    The IDE setup is non-trivial.  Testing by launching through eclipse also should have a treatment.  I guess that’ll be an early chapter.

    For deployment, I’m thinking:

    I’d like to see a section on how to set up and use update sites.  (Easy, but non-obvious)  Also, using the widget catalog (from the dev/admin perspective – how to publish a plugin you’ve written.)

    And, I guess in the broader general term, I want to see use cases in production.  A big one being, "I want to write a custom full-screen UI for this database/application.  How to I get it to come up for my users when they launch this database from the workspace?" (i.e. your second question).  Also, things like sidebar summaries, integration via Property Broker wiring (from both the LS and Java side – probably needs a good long chapter or three).

    I realize that I sound a bit scattered, I’m writing all this off of the top of my head.  I hope it’s somewhat helpful.  A lot of things about Notes 8.5 are coming easily to me.  deployment isn’t, which is why I thought to mention it.

    Like

  4. Hi Mikkel,

    I would like to  have a small chapter on "how to get started with plugin development incl IDE setup etc."  that would really help people like me to start the plug-in development.

    Thanks,

    rharan

    Like

  5. Hi Mikkel,

    Great to see a RedBook coming on for Plugin development. I would re-iterate rharan’s point – there should be section for how to get started and trouble shooting the IDE setup.

    All the best to your team!!

    Like

  6. It’s been re-iterated above. And here is my 2.2 cents. I tried doing some plugin development, and managed to get something going but I had to refer to your blog for updated information about Eclipse.

    Setup is tricky business because those wiley characters running Eclipse will make significant interface changes even in minor releases that totally re-write the setup instructions. Just to compare, I went through Google’s lengthy Android installation process for eclipse and that was smoother and easier than the Notes plugin development plus I knew nothing about Android SDK and I actually got the basic tutorials compiled and running in the emulator.

    There seems to be no obvious documentation on deployment, and what I did find was quite dated, early 2009. Once again people in IBM are off doing other “important” stuff rather than keep their technology doco upto date. Perhaps it’s there, but I haven’t found it, (so happy to be proven wrong on that if someone can point it out).

    Finally, testing. I want to be able to test my plugin independently before rolling it out. So, some sort of dummies guide on that would help alot.

    The lack of side bar development out there in the real world, is probably an indication of the difficulties in getting started. I know that from my work with Domino servlets, that once you have your environment setup, coding a solution with the Notes-Java SDK is a breeze. So, looking forward to your output on this Mikkel.

    Like

  7. What I appreciate is to understand the global philosophy before going into details, why you chose this implementation other that etc, such things.

    In another way, I like to have a "from high" view of the problem, the possible solutions, why you chose that one, then get into details.

    Like

  8. I like to see a bunch of ready to bake base classes:

    – plugin with access to the current open document

    – plugin with access to a NotesDocumentCollection of the selected documents

    – plug-in that uses a HTML UI but can handle external Drag & Drop

    Like

  9. In no particular order:

    What is Expeditor and how does it relate to Eclipse, RCP, and Lotus Notes?

    How to install Eclipse + Expeditor (including a lot of warnings that <span style=”font-weight: bold;”>versions are important</span>)

    How to create a sidebar app and how to extend the toolbar

    What is an extension point and how do I use one? With as many examples as possible, since the extension points that relate to Notes client development aren’t listed anywhere that I know of.

    How to interact with Notes data and Notes views, including a discussion on threading

    How to develop an app that works on both version 8.0 and 8.5

    Introduction to SWT, especially layouts and listeners

    Lifecycle of a plugin (from Notes startup to shutdown)

    Creating and understanding Features and Update Sites

    Deploying plugins via update site, via widget catalog, and via widget XML files, including information about the backend provisioning process

    How to sign a plugin

    How to debug a plugin

    Extending the standard Notes widgets, like web pages and live text

    Things an administrator can do (accidentally or intentionally) to affect plugin installation and/or capabilities, including plugin-related policies and options in the preferences file

    If I think of anything else I’ll let you know.

    🙂

    – Julian

    Like

  10. I agree with Rharan totally.  I have been a developer for 10 + yrs and only got into javascript over the last 2 years.  I know that javascript and java are not the same, but learning the syntax is not overly difficult once you get the basics of most languages.  That being said, a chapter on what your first steps are, what benefit do plug-ins provide, things to be aware of with Java (i.e. with javascript computed when composed and hidden fields cannot be assigned values at least from what I have seen).

    Like

  11. Not just about deployment to the client, but specifically how develop/distribute plugins (and widgets) to make it PAINLESSLY EASY for end-users to install them on their Notes desktops.

    None of this nonsense, for example, of having to add that “branding” line to the plugin-customization.ini file.

    There should be a standardized naming of files — such as always name your file “extension.xml” (or whatever) and place it PROMINENTLY on each plug-in’s website page so that an end-user easily finds it and doesn’t have to think twice about merely having to drag it onto their Notes sidebar — if you get my drift.

    Like

  12. +1 for @Stephan and @Julian above!

    In no particular order:

    How to install and setup Eclipse + Notes (Linux, Mac, Windows) with different versions

    How to install and setup Eclipse + Expeditor + Notes (Linux, Mac, Windows) with different versions

    How to configure a developer environment running different versions of Eclipse, Expeditor and Notes… if it is needed at all?

    How to create a plugin that dynamically add action buttons to a database view without changing the database

    How to sign and deploy plugins, widgets etc.

    How to create a plugin with third-party API’s (fx. Apache) for use by other plugins

    How to interact between traditional Notes database design and sidebars (listeners etc.)

    How to interact between traditional Notes database design and XPages within sidebars

    How to trigger resize, dock/undock of a sidebar

    How to use the different kind of browsers in the platform (embedded, …) and maybe a comparison of their functionalities and possibilities

    And, of course, for all of the examples you create please make them cross-platform! I’d hate see a wiki like this containing source that requires Windows. Notes is not officially running on Linux, Mac and Windows, so let the wiki be build on that.

    Do you know if the wiki will go officially “beta” at some point, so we can comment on your progress?

    Like

  13. There is a editing process between we finish writing and it’s published but I don’t know if it will be public at that point. Probably not. You comment about cross platform support has been noted.

    Like

  14. Thanks!

    By the way… a typing error occurred in my last post.

    “Notes is not officially running on…”

    should of course have been:

    “Notes is now officially running on…”

    What a mistake 😀

    Like

  15. I have been developing notes plugins for 1.5 years and the lack of documentation has been a real sore point.  Glad to see you guys working on this.  Here is what I wish I could find documentation on.  I have stumbled in the dark to find out much of this stuff and I think future developers would benefit from documentation.

    Development

    1) Sametime awareness in another plugin

     There are some samples out there but they are scattered.  There are multiple ways to do this depending on whether the application has a direct or indirect link into sametime.  (Indirect would be implicitedly requesting a person’s status, Direct would be resolving the person object from the sametime client based on past chats, etc.)

    2) CSS in SWidgets

     The handful of good examples I have found are in chinese.  All of these seem to require changing themes and I have not seen any samples where you could define the styles of your SWidgets without changing themes. 

     

    3) Live text in detail

    Livetext has the potential to be VERY useful within plugins but there is hardly any documentation. This documentation would be on how to integrate live text with plugins and not widgets, since widgets seem thoroughly documentated in this aspect.  We need to know how to add a contribution to the eclipse menu so that a plugin can react to it (much like your Blog already covers) and also how to do the opposite, have data within a SWT plugin that reacts on Live Text you have defined.

    4) Important extension points and packages for different tasks

    We know the obvious like sideshelf, but what about the less documented that could be useful?  I see we have extension points available for com.ibm.rcp.toolbox, com.ibm.rcp.content, com.ibm.rcp.autorecognizer, etc. but there is no documentation. 

    5) Pros and Cons as far as eclipse extension points/packages vs IBM extension points/packages.  When would use an STable over a Table? (I noticed that STable adds new functionality but it can be VERY rigid and not allow much modification).

    6) Limitations.  Are there any practical limitations to what you cannot do within the environment and certain packages?  For example, is Live Text being recognized from within an SWT control just not possible due to limitations?

    Testing and Deployment

    An overall testing and deployment of plugins guide would be very useful.  Perhaps this should be a seperate red book.

    1) How do you write automated tests for plugins?  Is JUnit recommended? Is UI worth testing? Etc.

    2) How do you automatically build plugins?  Is it worth using something like Maven or just an ant script?  For example, I was playing around with an ant script to build the feature, update site, extension.xml but it was not very portable between plugins.  There is also an issue that if I place something like @VERSION@ in the plugin.xml it causes the plugin to not compile.  This would lead to something like 8 things needed to be changed/kept an eye on between plugins.

    3) How do you automate signing of plugins after build?

    4) Why is creating the extension.xml manual? How can I automate it?

    5) I want to automate everything in the plugin development/deployment process that I can.  Are there painpoints where it just won’t be possible? For example, getting it into the catalog/update site?

    Policy

    4) How do you add the signing certificate to the client so that it knows that it is trusted?  (We used a mail template change, but is there a better way).

    A little side note.  It would be VERY amazing if IBM could bundle the expeditor toolkit with eclipse and provide it to developers so they wouldn’t have to go through the hassle of configuring it.  Auto detect notes JRE locations would be very nice.  There should be one place where I set the notes directory during config and all the rest should be handled automatically.

    Like

  16. Hi Mikkel,

    Julian Robichaux has a nice list I must say, but would like to add 2 things:

    How to handle UIJobs, wait for their results etc.

    Creating dynamic menu’s / toolbar options. It is easy to use extension points to add menu options, but you can’t add / remove options during runtime depending on for example roles. This is something which customers often ask for.

    Thanks

    Like

  17. I would like to know, if or how I can register key shortcuts that work over all Notes components.

    I tried to do that for a paste special action, where only plain text is pasted and not HTML or RichText or whatever.

    However, the shortcuts worked fine in the eclipse elements of the Notes Client, but not in the native elements (e.g. in the body of a Notes mail).

    Like

  18. Hi Mikkel!

    In the Symphony 1.3 toolkit was included a pdf named Symphony Developer’s Guide which featured an example using an auto-recognizer (chapter 6 from Part 7 of the pdf). that used an extension point, com.ibm.rcp.autorecognizer.Recognizer.

    In the new Symphony 3 toolkit, all the references about that recognizer feature were removed from the Symphony Developer’s Guide. So I’m not sure, does that extension point still exists or it was removed starting with version 3? Will the code that worked for 1.3 which used auto-recognizer still work with target platform set to Symphony 3?

    Also, ,do you know where I can find an example on how to use auto-recognizer of Symphony 3? I could not find any official documentation from IBM about that.

     Thank you very much in advance

     With best regards,

     Sorin

    Like

  19. Hi Sorin,

    I’m not the right person to ask Symphony questions although they may be plugin related. Try Fabrizio from the team – he is the Master there. He is at fabrizio(dot)marchesano(at)frameweb.it.

    Like

Comments are closed.