Part Three: Creating Gallery menus (File / New) using a Wizard

Using the JDeveloper SDK Sample project, "Create Dialog" we can take a look at how the extension.xml is setup for using a Gallery item.

extension.xml

The nice thing about setting up a Gallery item is that it can be done with a simple Wizard. From the File menu, select New and look for the "Gallery Item (Wizard)" in the Extension Developer folder under Client Tier.

If you don't see the Client Tier category when the dialog first opens, make sure you are on the "All Technologies" tag and not the "Current Project Technologies" tag.

Double click on the Gallery Item option and you will see a dialog like the one below.

Enter the name of your Gallery item. You can select the Category and Folder from the pulldown list, or type in your own. You can also select the icon that will be displayed with your menu item at this time.

NOTE: Take a careful look at the "Wizard class" name that is being created for you. Specifically make sure that the package name in front of the actual class name is what you want it to be.

The checkbox for adding this to the Tools Menu is something that I haven't used that much. It adds the menu item using a MenuSpec object in the code. I'll cover how to work with the main MenuBar and ToolBar menus declaratively in Part Four of this post.

Click OK once you have all of your data entered and the wizard will add the basic lines to the extension.xml file and create a new class file based on the wizard class name that you set in the dialog.

If we look at the java class created by the wizard, you'll see two methods that manage the execution of the menu item.

The "isAvailable" method is where you add any code that will tell the IDE when to actually show your menu item. In the example above, you can see that this menu item is only going to be shown when there is a valid Project in the application.

The "invoke" method is where you will define the UI for your wizard or perform the action for the menu item. In the example above, a call is made to the runDialog() method in another class that does all of the UI work.

If we take a look at what the wizard added to the extension.xml file, we'll see that the basic elements are added in for us. "name" (which is pulled from the generated class), "category", and "folder".

The result of this is what you see below.

Notice however, that this only shows up in the "All Technologies" tab. If we look at the "Current Project Technologies" tab, our menu item isn't there.

The Current Project Technologies tab is a filtered list of items. It only shows items that are related to the Technology Scopes that you are using in the current project.

If you know that your extension is working with projects that have a specific Technology Scope, Java for instance, you can set the menu item to show up in the Current Project Technologies tab when that Tech Scope is present by using the "technologyKey" element, right after the "folder" element, in the extension.xml file. If your extension is working with any project, no matter what the tech scope may be, you can still set the technologykey to "General" and it will show up for any project.

<technologyKey>General</technologyKey>

To determine what the correct value is for the different technology scopes, just click on the "selected technologies" link at the top of the dialog and you'll see a complete list.

As usual, please post up any questions or personal experiences in the comments.

You can create a context menu in the Navigator panel, the Explorer or Structure Panel, and the Editor window.

To create these menu items you want to first create a listener class that you can then tell the IDE to interact with.

Using the JDeveloper SDK Sample project, “First Sample” we can take a look at how the listener is defined in the extension.xml and in the Listener Class itself.

extension.xml

Listener class

Notice that the extension.xml file makes the reference to the Listener class, and that class goes back to the Action that we discussed in the first part of this topic. The Action is where the class is called to actually do the work when the menu item is clicked. You can setup a Controller class to manage the command ID’s as Constants if you like. I’ve chosen to do a direct call to the Action ID in the sample above. Notice that the controller method is also there, just commented out.

It’s the site “idref” that determines where the context menu item will show up in the UI (Editor, Navigator, Explorer). Of course you can have multiple Listener classes. One for each type of context menu that you want to setup.

While there isn’t a wizard for setting up Context Menus, it can still be done pretty quickly by using a bit of cut and paste from this one SDK example project.

There are multiple projects in the SDK Samples that use context menus. To see more examples, take a look at the following projects:

ClassSpy CodeInteraction Overlay

As usual, please post up any questions or personal experiences in the comments.

Wednesday Aug 25, 2010

When creating an extension for JDeveloper, the most common way of connecting that extension to the IDE is through the menu structure.

Whether it's via a context menu, or adding a menu to the existing menu bar at the top of the IDE, it can all be done in two different ways. In code, or declaratively in the extension.xml file

In this post, I'm going to talk about how to work with the declarative method for menu creation, as I believe it is the easiest and most flexible way to connect to the IDE.

All of the IDE commands used here, are available when working with an Extension Project type.

I will break this post into multiple sections since it's a bit of a long topic

Part One: Introduction and Creating an Action

Part Two: Creating Context menus

Part Three: Creating Gallery menus (File / New) using a Wizard

Part Four: Creating Toolbar and Menubar menus

The SDK example application "First Sample" does a really good job of showing how to add a menu to the following areas of the IDE:

Context Menu for:

Navigator Editor Explorer (Structure pane)

New Gallery

Menubar

Toolbar

The above examples show the proper syntax for working with all of the different kinds of menus. However, they don't give you the information about how to find the ID for the menu areas that you want to add to, or how to nest menus. We'll go into more detail about how to do these things as well as take a general look at how everything is tied together.

Getting Started (creating an action)

The first thing you need to do when working with menus, is to create the action section that will define what the menu item will do. All of the menu items will reference this action to get the actual work done. This is made very simple in JDev 11g by using the "File -> New" Wizard to add an Action to the existing extension project.

Right-Click on your extension project name in the Navigator pane and select New. In the resulting Wizard, make sure the "All Technologies" tab is selected and then click on the Extension Development folder under the Client Tier category.

Double click on the Action item and fill out the dialog with the information about your new Action.

You can select an Icon for your menu item from the OracleIcons group here, or you can add an icon to the project at a later time and then reference it in the extension.xml file later.

Once you have created your action, it will look like this in the extension.xml file

Wednesday Jul 21, 2010

About

My name is John 'JB' Brock. This Blog will focus on tips and tricks for working with the JDeveloper Extension SDK. I hope to bring clarity to some of the mysteries around developing extensions for JDeveloper.