Skip to main content

YABAHEIITWPMFN

Posted by gsporar on April 13, 2006 at 7:38 PM PDT

Yet Another Blog About How Easy It
Is To Write Plug-in Modules For NetBeans.
If you are tired of reading about how easy it is to create plug-in modules for NetBeans,
then do not read this blog entry.

Yes, this topic has been discussed quite a bit. It has even turned Geertjan Wielenga into
a NetBeans
celebrity. If you go to Google
and just type in "Geertjan" then you can
just click the "I'm Feeling Lucky" button because
Geertjan's blog is always at the top of that list.
He and Roumen
are becoming known by just one name, sort of like Cher,
Pele,
and Confucious.

There are also folks blogging about this who are not
Sun employees. To take just one example,
take a look at this entry
by Tomohiro Iizuka.
Into this whirlwind of activity I would like
to submit my small humble contribution, which boils down to this: if even I can create a
plug-in module for NetBeans then anyone can. :-)

Here's my situation. I frequently need to create HTML (for blog entries, tutorials, etc.).
I never learned how to use one of those fancy HTML editing tools so I use the HTML editor
that is included in the NetBeans IDE.
It's not WYSIWYG, but it has what I need: syntax
highlighting, code completion, indentation, etc. What it does not have is an easy way to
create links. Those of you who are familiar with the HTML editor might say, "But what about
the HTML Palette?" Fair enough. But I don't like to take my hands off the keyboard. Also,
I prefer to write the entire document and then go back and insert the anchor tags around
existing text.

What I typically do is open a browser and find the URL for the link I want to create. I copy it
to the clipboard and then come back over to the IDE. I paste the URL into an anchor tag. Then
repeat until done. I could define a keystroke macro to help out, but I want something a bit
more powerful. I want to select the words for the link:

nolink.png

And then have a keyboard shortcut that will take the contents of the clipboard and
put it into the href attribute for an anchor tag, with the closing tag at the end of the selection:

withLink.png

I don't know how to do that with a keystroke macro, because I would need to determine
the beginning and ending of the current text selection. But it's easy enough to do this
with a simple plug-in module.

The starting place for this adventure was Geertjan's excellent
Quick Start Guide. You end
up with a plug-in module that doesn't do much, but it can be used as a template. I then moved
on to
the Editor Extension Module tutorial,
which taught me the basics of how to extend one of
the IDE's editors. At this point I was able to create a plug-in module that had an Action.
But how do I fill in the logic to accomplish what I want? In other words, which
NetBeans APIs
do I use, and how?

I was reminded of a conversation that
Chuk Munn Lee and
I had with an attendee of
NetBeans Day Singapore.
Chuk had done a demo
of NetBeans module development and the question from the attendee was basically, "This
is great and everything, but after the wizard does all that stuff for you, how do figure out
which APIs to use?" Chuk had a good answer: "Read the
source code
for the NetBeans IDE. It's
pretty well organized and straightforward. Find the type of functionality you want and
then go see how it is accomplished in the source."

In addition to the source for the IDE there are other resources. Geertjan's
growing list of tutorials
and the
FAQ are
both good starting points.
In addition to those,
NetBeans: The Definitive Guide
is available online; the experts tell
me that most of its information about module development is still valid. Finally, there
is the
dev@openide.netbeans.org email list which is very active.

For my little plug-in module it was not necessary to look very far for help. The prolific
Sandip Chitale created a module that he calls
Line Tools.
It adds functionality to an editor and
in general looked like something from which I could learn some things.
The source code is in /contrib so
I checked it out of CVS
and started wandering through it. And sure enough, he had several
snippets of code that I could use. By using what he had and then
adding three lines of my own code I had the
functionality working.

The only thing missing was a keyboard shortcut. Sandip pointed me to the relevant
entries in the FAQ (here
and here),
which were contributed by Tim Boudreau and
Tom Wheeler. I edited
my layer.xml by following those instructions (and yes Tim, I used an "O" to indicate Alt :-) ). I now have a new Link Inserter entry in
the context menu of the HTML editor:

linkContext.png

I prefer to use the keyboard shortcut, but the context menu entry is there should I ever
need it.

Want to learn even more and ask questions while doing it? If you live in northern California
or are planning to attend JavaOne, then come to
NetBeans Day.
Tim Boudreau will be
teaching module development in the context of using the
NetBeans Platform as a base
for building rich client applications. Seats are limited, so register now. The event
is free and you do not have to be registered for JavaOne in order to attend. And as always,
there will be free prizes. :-)