Sunday Sep 30, 2012

Report on NetBeans Day 2012

NetBeans Day, which was during day 1 of JavaOne 2012, on Sunday, started the night before for those attending the NetBeans Party at Johnny Foley's, a cool Irish pub in central San Francisco:

Invitations had been sent out prior to the party to all speakers for NetBeans Day, as well as speakers in JavaOne sessions where NetBeans is going to be used. That turns out to be around 40 people, who hung out until quite late, with snacks and drinks.

Next day, NetBeans Day had most sessions with completely packed rooms, which means there were around 300 people! Panel discussions around central themes in the NetBeans ecosystem (Java EE, JavaFX, and NetBeans Platform) were held, which resulted in a whole bunch of people up on stage throughout the day, such as this group of speakers in the Java EE session:

From left to right above you see Sean Comerford from, John Yeary the Java EE panel moderator and JUG lead from Greenville, Java EE 6 rock star Adam Bien, Cagatay Civici the PrimeFaces lead developer, Glenn Holmer long time NetBeans enthusiast (more on him below) from the Weyco Group, and NetBeans/Java EE book author David Heffelfinger.

There were panels just like the above for JavaFX and the NetBeans Platform too, with very interesting and dynamic talks, such as one by JavaFX book authors Gail and Paul Anderson, who showed off this brilliant JavaFX/NetBeans Platform mashup:

NetBeans Day ended with a good discussion about how to get involved in the NetBeans community, wrapping up with an award ceremony with two very special NetBeans community awards:

Then everyone caught buses to the Masonic Auditorium, where 4 hours of keynotes took place. This is what the room looked like:

The 4 hours ended with a very well received HTML5/NetBeans demo, showing off NetBeans IDE 7.3 features, by NetBeans director John Ceccarelli. And I liked this slide during an earlier keynote session by Oracle VP Hasan Rizvi:

There was really a lot of love for NetBeans during the JavaOne keynote sessions and I don't remember hearing any other IDE being mentioned, in any way at all. Next there was the Duke's Choice Award ceremony, outside the Hilton in a cool lounge area, where, among others, Timon and Angelo from the NetBeans Platform community received their awards for AgroSense and NATO's updated air defence system. In between all of the above, I met very many friends from previous conferences, as well as several new ones. It was clearly a great start to the conference. Looking forward to what the rest of the week will bring!

Saturday Sep 29, 2012

Hello Again, San Francisco

From the moment I got to the airport in Amsterdam, I've been bumping into JavaOne pilgrims today. Finally got to my hotel, after a pretty good flight (and KLM provides great meals, which helps a lot), and a rather long wait at customs (serves me right for getting seat 66C in a plane with 68 rows).

And, best of all, on Twitter I've been seeing a few remarks around the Duke's Choice Awards for this year. The references all point to the September - October issue of the Java Magazine, where page 24 shows the following:

So, from page 24 onwards, you can read all about the above applications. What's especially cool is that three of the above are applications created on top of the NetBeans Platform! That's AgroSense (farm management software), MICE (NATO system for defense and battle-space operations), and Level One Registration Tool (UN Refugee Agency sofware for managing refugees).

Congratulations to all the winners, looking forward to learning more about them all during the coming days here at the conference.

Friday Sep 28, 2012

eFX on NetBeans Platform at Silicon Valley JavaFX User Group

Below you can watch (in addition to seeing Steve Chin and Ben Evans) Sven Reimers presenting eFX, a JavaFX application framework on the NetBeans Platform, yesterday at the Silicon Valley JavaFX User Group. While watching, you'll learn quite a few things about the NetBeans Platform, at the same time. In the end, you see a VisualVM clone written in JavaFX on the NetBeans Platform.

Sven will also talk on this topic at NetBeans Day and during his sessions at JavaOne.

Thursday Sep 27, 2012

Visual View for Schema Based Editor

Starting from yesterday's blog entry, make the following change in the DataObject's constructor:

registerEditor("text/x-sample+xml", true);

I.e., the MultiDataObject.registerEditor method turns the editor into a multiview component.

Now, again, within the DataObject, add the following, to register a source editor in the multiview component:

        displayName = "#LBL_Sample_Source",
        mimeType = "text/x-sample+xml",
        persistenceType = TopComponent.PERSISTENCE_NEVER,
        preferredID = "ShipOrderSourceView",
        position = 1000)
public static MultiViewElement createEditor(Lookup lkp){
    return new MultiViewEditorElement(lkp);


Next, let's create a visual editor in the multiview component. This could be within the same module as the above or within a completely separate module. That makes it possible for external contributors to provide modules with new editors in an existing multiview component:

@MultiViewElement.Registration(displayName = "#LBL_Sample_Visual",
    mimeType = "text/x-sample+xml",
    persistenceType = TopComponent.PERSISTENCE_NEVER,
    preferredID = "VisualEditorComponent",
    position = 500)
public class VisualEditorComponent extends JPanel implements MultiViewElement {

    public VisualEditorComponent() {
    public String getName() {
        return "VisualEditorComponent";
    public JComponent getVisualRepresentation() {
        return this;

    public JComponent getToolbarRepresentation() {
        return new JToolBar();

    public Action[] getActions() {
        return new Action[0];

    public Lookup getLookup() {
        return Lookup.EMPTY;

    public void componentOpened() {

    public void componentClosed() {

    public void componentShowing() {

    public void componentHidden() {

    public void componentActivated() {

    public void componentDeactivated() {

    public UndoRedo getUndoRedo() {
        return UndoRedo.NONE;

    public void setMultiViewCallback(MultiViewElementCallback callback) {

    public CloseOperationState canCloseElement() {
        return CloseOperationState.STATE_OK;



Next, the DataObject is automatically returned from the Lookup of DataObject. Therefore, you can go back to your visual editor, add a LookupListener, listen for DataObjects, parse the underlying XML file, and display values in GUI components within the visual editor.

Wednesday Sep 26, 2012

Schema Based Code Completion for NetBeans Platform Applications

Toni's recent blog entry provides, among several other interesting things, instructions for something I've been wanting to cover for a long time, which is schema based code completion:

The above is a sample I created via Toni's tutorial, using the schema described here:

The support for the Navigator ain't bad either, especially considering I didn't do any coding at all to get all this:

And here's where you can find the whole sample:

Tuesday Sep 25, 2012

Restoring OutlineView Changes

Spent the last afternoons working with Ruben Hinojo, who I met recently at the Tinkerforge/NetBeans integration course in Germany. He's Spanish, lives in Scotland, and joined the course by flying from Edinburgh to Amsterdam and then driving from there to the course in Germany. Since then he spent some days in Amsterdam and we've been working a bit in a cafe in Amsterdam.

He's working freelance on a freight management system on the NetBeans Platform and here's a pic of him and his application:

I showed him a few things to improve the initial appearance of the application, such as removing the unneeded tab in the editor position and displaying data at startup so that the main window isn't empty initially.

He, in turn, told me about something I didn't know about, where "freightViewer" below is an OutlineView:

void writeProperties(java.util.Properties p) {
    // better to version settings since initial version as advocated at
    p.setProperty("version", "1.0");
    freightViewer.writeSettings(p, "FreightViewer");

void readProperties(java.util.Properties p) {
    String version = p.getProperty("version");
    freightViewer.readSettings(p, "FreightViewer");

The "" enables you to save/restore changes to an OutlineView, e.g., column width, column position, and which columns are displayed/hidden.

In the user dir, within the .settings file of the TopComponent (in config/Windows2Local/Components), you'll then find content like this, where the "FreightViewer" argument above is now the prefix of the name of each property element:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE properties PUBLIC "-//org.ruben.viewer//RubenViewer//EN" "">
    <property name="FreightViewerOutlineViewOutlineColumn-1-shortDescription" value="Type"/>
    <property name="FreightViewerETableColumn-1-HeaderValue" value="Type"/>
    <property name="FreightViewerColumnsNumber" value="3"/>
    <property name="FreightViewerETableColumn-0-PreferredWidth" value="75"/>
    <property name="FreightViewerETableColumn-2-HeaderValue" value="Description"/>
    <property name="version" value="1.0"/>
    <property name="FreightViewerETableColumn-2-SortRank" value="0"/>
    <property name="FreightViewerETableColumn-2-Width" value="122"/>
    <property name="FreightViewerETableColumn-0-ModelIndex" value="0"/>
    <property name="FreightViewerETableColumn-1-Width" value="123"/>
    <property name="FreightViewerHiddenColumnsNumber" value="0"/>
    <property name="FreightViewerETableColumn-0-SortRank" value="0"/>
    <property name="FreightViewerETableColumn-1-ModelIndex" value="1"/>
    <property name="FreightViewerETableColumn-1-PreferredWidth" value="75"/>
    <property name="FreightViewerETableColumn-0-Ascending" value="true"/>
    <property name="FreightViewerETableColumn-2-ModelIndex" value="2"/>
    <property name="FreightViewerETableColumn-1-Ascending" value="true"/>
    <property name="FreightViewerETableColumn-2-PreferredWidth" value="75"/>
    <property name="FreightViewerETableColumn-1-SortRank" value="0"/>
    <property name="FreightViewerETableColumn-0-HeaderValue" value="Nodes"/>
    <property name="FreightViewerETableColumn-2-Ascending" value="true"/>
    <property name="FreightViewerETableColumn-0-Width" value="122"/>
    <property name="FreightViewerOutlineViewOutlineColumn-2-shortDescription" value="Description"/>

NB: However, note as described in this issue, i.e., since 7.2, hiding a column isn't persisted and in fact causes problems. I replaced the org-openide-explorer.jar with a previous one, from 7.1.1, and then the problem was solved. But now the enhancements in the OutlineView since 7.2 are no longer present, of course. So, looking forward to seeing this problem fixed.

Monday Sep 24, 2012

Deploy from NetBeans IDE by Twisting an External Dial

Via this code in a NetBeans module, i.e., a registered NetBeans ModuleInstall class, you can twist the Tinkerforge Rotary Poti Bricklet to deploy the current application in the IDE:
import com.tinkerforge.BrickMaster;
import com.tinkerforge.BrickletLCD20x4;
import com.tinkerforge.BrickletRotaryPoti;
import com.tinkerforge.IPConnection;
import javax.swing.Action;
import javax.swing.JMenuItem;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.openide.awt.Actions;
import org.openide.modules.ModuleInstall;
import org.openide.util.Utilities;

public class Installer extends ModuleInstall {

    private static final String HOST = "localhost";
    private static final int PORT = 4223;
    private static final String MASTERBRICKUID = "abc";
    private static final String LCDUID = "abc";
    private static final String ROTIUID = "abc";
    private static IPConnection ipc;
    private static BrickMaster master = new BrickMaster(MASTERBRICKUID);
    private static BrickletLCD20x4 lcd = new BrickletLCD20x4(LCDUID);
    private static BrickletRotaryPoti poti = new BrickletRotaryPoti(ROTIUID);

    public void restored() {

        try {
            ipc = new IPConnection(HOST, PORT);
            poti.addListener(new BrickletRotaryPoti.PositionListener() {
                public void position(final short position) {
                    final Action runAction = 
                    //The action must be invoked from menu item or toolbar button,
                    //see line 147 in org.netbeans.modules.project.ui.actions.LookupSensitiveAction:
                    JMenuItem jmi = new JMenuItem(runAction);
                    //When position is 100 (range is -150 to 150), deploy the app
                    //and print info about the project to the LCD display:
                    if (position == 100) {
                        Project p = Utilities.actionsGlobalContext().lookup(Project.class);
                        lcd.writeLine((short) 0, (short) 0, "Deployed:");
                        lcd.writeLine((short) 1, (short) 0, ProjectUtils.getInformation(p).getDisplayName());
                    } else {
                        lcd.writeLine((short) 0, (short) 0, "Position: " + position);
        } catch (Exception e) {



Sunday Sep 23, 2012

SteelSeries & JavaFX External Control via Tinkerforge

The first photo shows me controling a JavaFX chart by rotating a Tinkerforge device, while the other two are of me using code by Christian Pohl from Nordhorn, Germany, to show components from Gerrit Grunwald's SteelSeries library being externally controled by Tinkerforge devices:

What these examples show is that you can have a robot (i.e., an external device), of some kind, that can produce output that can be visualized via JavaFX charts and SteelSeries components.

For example, imagine a robot that moves around while collecting data on the current temperature throughout a building. That's possible because a temperature device is part of Tinkerforge, just like the rotating device and distance device shown in the photos above. The temperature data collected by the robot would be displayed in various ways on a computer via, for example, JavaFX charts and SteelSeries components.

From there, reports could be produced and adjustments could be made to the robot while it continues moving around collecting temperature data. The fact that Tinkerforge has Wifi support makes a scenario such as described here completely possible to implement.

And all of this can be programmed in Java, without very much work, since the Java bindings for Tinkerforge are simple to use, such as shown in yesterday's blog entry. Related to that, the next thing I want to work on is... figuring out how to deploy an application in NetBeans IDE by turning the Tinkerforge rotating device! That would be pretty cool, and very useful: just do some coding in your application, turn the rotation device, and then the application is deployed. Implementation will be simple, just integrate the NetBeans AntLogger, combined with ActionUtils, with Tinkerforge!

Saturday Sep 22, 2012

Tinkerforge Rotation/LCD & JavaFX Plans

The first time I integrated two Tinkerforge bricklets, the day before yesterday, was pretty cool:
import com.tinkerforge.BrickMaster;
import com.tinkerforge.BrickletLCD20x4;
import com.tinkerforge.BrickletRotaryPoti;
import com.tinkerforge.IPConnection;
import java.util.Calendar;

public class TFConnectionDemo {

    private static final String HOST = "localhost";
    private static final int PORT = 4223;
    private static final String MASTERBRICKUID = "somethingabc";
    private static final String LCDUID = "somethingabc";
    private static final String ROTIUID = "somethingabc";
    private static IPConnection ipc;
    private static BrickMaster master = new BrickMaster(MASTERBRICKUID);
    private static BrickletLCD20x4 lcd = new BrickletLCD20x4(LCDUID);
    private static BrickletRotaryPoti poti = new BrickletRotaryPoti(ROTIUID);

    public static void main(String[] args) {

        try {
            ipc = new IPConnection(HOST, PORT);
            poti.addListener(new BrickletRotaryPoti.PositionListener() {
                public void position(short position) {
                    Calendar cal = Calendar.getInstance();
                    lcd.writeLine((short) 0, (short) 0, cal.getTime().toString());
                    lcd.writeLine((short) 1, (short) 0, "Rotation: " + position);
        } catch (Exception e) {

The result is that the display text in the LCD bricklet changes while I turn the rotation bricklet:

Now imagine that you have some JavaFX charts and, while you turn the rotation bricklet (i.e., the dial thing that I'm turning above), the values of the charts change. That would be pretty cool because you'd be able to animate the JavaFX charts by rotating an object externally, i.e., without even touching the keyboard. That would be pretty cool to see and shouldn't be hard to implement.

Friday Sep 21, 2012

Tinkerforge Plugin for NetBeans IDE 7.2

Here's the start of a simple designer for Tinkerforge:

Items in the palette come from a live Tinkerforge connection. Drag and drop palette items representing bricks and bricklets and connect them together and then generate a Java class that uses those parts. The aim is to be able to introduce logic via the designer above, i.e., "if the temperature is below X then display Y in the LCD display".

It is still in an early prototype stage so isn't usable in the real world yet. Here's the background to how it all came about:

If anyone wants to join me in working on this plugin, the sources are here:

Thursday Sep 20, 2012

Ordering of NetBeans Platform Menu/Toolbar Positions

Since there's no annotation for setting the position of a menu/toolbar (but only for items within them), here's a quick and easy way to do it by combining a layer file with the standard annorations:

<folder name="Menu">
    <folder name="Analyzers">
        <attr intvalue="300" name="position"/>

And now that the menu position is set, you can use the annotations exactly as before:

    category = "Tools",
id = "de.damaico.connection.analyzer.AnalyzeConnectionsActionListener")
    iconBase = "de/damaico/connection/analyzer/customer.png",
displayName = "#CTL_AnalyzeConnectionsActionListener")
    @ActionReference(path = "Menu/Analyzers", position = 0),
    @ActionReference(path = "Toolbars/Analyzers", position = 300)
@Messages("CTL_AnalyzeConnectionsActionListener=Analyze Connections")
public final class AnalyzeConnectionsActionListener implements ActionListener {

I.e., thanks to this tip (from Benno Markiewicz from Leipzig), you get the best of both worlds.

There's also a related patch in Issuezilla by Ernest Lotter. The patch creates a new annotation for registering menu positions:

Tuesday Sep 18, 2012

Russian Hydrodynamic Modeling, Prediction, and Visualization in Java

JSC "SamaraNIPIoil", located in Samara, Russia, provides the following applications for internal use.

  • SimTools. Used to create & manage reservoir history schedule files for hydrodynamic models. The main features are that it lets you create/manage schedule files for models and create/manage well trajectory files to use with schedule files.

  • DpSolver. Used to estimate permeability cubes using pore cube and results of well testing. Additionally, the user visualizes maps of vapor deposition polymerization or permeability, which can be visualized layer by layer. The base opportunities of the application are that it enables calculation of reservoir vertical heterogeneity and vertical sweep efficiency; automatic history matching of sweep efficiency; and calculations using Quantile-Quantile transformation and vizualization of permeability cube and other reservoir data.

Clearly, the two applications above are NetBeans Platform applications.

Monday Sep 17, 2012

Paris Hilton: Analyzing Her Footprint in Java

I think those Maltego guys make the best YouTube movies in the Java industry.

More info:

Saturday Sep 15, 2012

Maven Command Line for NetBeans RCP Developers

In the ongoing work being done on Maven documentation support for NetBeans Platform developers, the tutorial describing how to use the Maven command line to set up and develop applications on the NetBeans Platform has ben updated:

An interesting next step after following the tutorial above is to... open the result into the free community edition of IntelliJ IDEA:

It's not hard to register the JDK and Maven in IntelliJ IDEA and to then run your application directly from there. The point is that there's no requirement to use NetBeans IDE if you want to create applications on top of its framework.

Friday Sep 14, 2012

YouTube: How to Access Data in Java Software on Maven

Related tutorial (updated to NetBeans IDE 7.2/NetBeans Platform 7.2 during the past 24 hours):

NetBeans Platform CRUD Tutorial Using Maven

Thursday Sep 13, 2012

Where I'll Be At JavaOne 2012

Fun and games for me at JavaOne 2012. Below are the sessions/BOFs/tutorials I'll be attending. The items in red are the sessions and BOFs where I'll be speaking, either as the main/only speaker or as a supporting speaker in someone else's presentation, while the other items (except for the NetBeans booth duties and mini presentations, which are included below) are items I'm interested in and so will be sitting in the audience:



  • 10:00 - 12:00 TUT4801: Make Your Clients Richer: JavaFX and the NetBeans Platform
  • 12:20 - 12:30 Mini Presentation in OTN Lounge: What's New in NetBeans IDE?
  • 13:00 - 14:00 CON7050: How My Life Would Have Been So Much Better If We Had Used the NetBeans Platform (Hilton San Francisco - Golden Gate 3/4/5)
  • 14:30 - 14:40 Mini Presentation in OTN Lounge: NetBeans and Java EE
  • 15:00 - 16:00 CON4038: Project EASEL: Developing and Managing HTML5 in a Java World
  • 16:30 - 17:15 BOF6151: NetBeans.Next: The Roadmap Ahead
  • 17:30 - 18:15 BOF3332: Lessons Learned in Writing a PDF-to-JavaFX Converter for NetBeans
  • 18:30 - 19:15 BOF4920: Runtime Class Reloading for Dummies


  • 9:30 - 11:30 NetBeans Booth
  • 11:30 - 12:30 CON6139: Lessons Learned in Building Enterprise and Desktop Applications with the NetBeans IDE (Hilton San Francisco - Continental Ballroom 5)
  • 13:00 - 14:00 CON4387: Bringing Mylyn to NetBeans and OSGi, Bridging Their Worlds
  • 14:30 - 14:40 Mini Presentation in OTN Lounge: NetBeans Java Editor
  • 16:30 - 17:15 BOF4227: Building Smart Java Applications with Neural Networks, Using the Neuroph Framework (Hotel Nikko - Monterey I/II)
  • 17:30 - 18:15 BOF3665: Custom Static Code Analysis
  • 18:30 - 19:15 BOF5806: Doing JSF Development in the NetBeans IDE  (Hilton San Francisco - Continental Ballroom 5)


  • 8:30 - 9:30 CON5132: NetBeans Plug-in Development: JRebel Experience Report
  • 10:00 - 11:00 CON2987: Unlocking the Java EE 6 Platform (Hilton San Francisco - Continental Ballroom 4)
  • 11:30 - 12:30 CON10140: Delivering Bug-Free, More Efficient Code for the Java Platform
  • 13:00 - 14:00 CON3826: Patterns for Modularity: What Modules Don’t Want You to Know
  • 14:30 - 14:40 Mini Presentation in OTN Lounge: NetBeans Platform
  • 15:00 - 16:00 CON3160: Dynamic Class Reloading in the Wild with Javeleon (Hilton San Francisco - Continental Ballroom 4)


  • 12:30 - 13:30 CON4952: NetBeans Platform Panel Discussion (Hilton San Francisco - Imperial Ballroom A)
  • 14:00 - 15:00 CON11879: Getting Started with the NetBeans Platform (Hilton San Francisco - Continental Ballroom 7/8/9)
  • 15:30 - 16:30 CON13584: PrimeFaces: Ultimate Component Suite (Hilton San Francisco - Golden Gate 3/4/5)

There are several sessions/BOFs I would have liked to be able to attend, but because of clashes with other sessions that I need to see slightly more urgently, I won't be able to attend those, unfortunately.

Will be a busy but interesting time, as always!

The entire list of NetBeans-oriented sessions can be found here:

Wednesday Sep 12, 2012

How to Draw Lines on the Screen (Part 2)

In part 1, I showed how you can click on the screen to create widgets and then connect those widgets together. But that's not really drawing, is it? (And I'm surprised nobody made that point in the comments to that blog entry.)

Drawing doesn't really revolve around connecting dots together. It's more about using a free-flow style and being able to randomly write stuff onto a screen, without constraints. Something like this:

I achieved the above by changing one line of code from the original referred to above. Instead of using a "mousePressed" event, I'm now using a "mouseDragged" event. That's all. And now the widgets are created when I drag my mouse on the scene. (I removed the rectangular select action, since that's also invoked during dragging and since that doesn't apply to the above scenario.)

Now, the next step is to rewrite the NetBeans Platform Paint Application Tutorial, so that the Visual Library is used. That would be pretty cool.

Tuesday Sep 11, 2012

SweetHome3D in Open Source Java

Ever since finding out about Alied Pérez's SweetHome3D application on the NetBeans Platform, I've admired it very much. (And ever since I've dreamed of designing my next kitchen in IKEA via a NetBeans Platform application.)

Some months ago he told me about its origins: "This project started as a proprietary software for a local furniture business, which ended as a porting of sweethome3d to the NetBeans Platform, with the proprietary part being a plugin for the open source part. In recent times, I have been finishing the proprietary plugins, so the SweetHome3D part has not had major updates. I have to integrate v3.4 of sweethome3d and upload the changes."

I've tried the application a few times but, not knowing much about the domain, couldn't do much with it. However, since the file type it supports is standardized, I thought to myself, why not look for example files of the type and load some into the application to see what happens. That journey brought me here:

I then downloaded one of the files from the gallery, opened it into the application, and was quite amazed at what I found:

In other words, the application appears to be in good shape. It is also free and open sourced and can be accessed, as I did, here:

Monday Sep 10, 2012

Wicket 1.6.0 in NetBeans IDE 7.2

Get it here:

Then use the Web Application wizard to select your new Wicket 1.6.0 library:

The result:

For Maven developers, after adding support provided by the NetBeans/Wicket plugin:

Sunday Sep 09, 2012

YouTube: Advanced Tricks for NetBeans Visual Library Users (1)


Geertjan Wielenga (@geertjanw) is a Principal Product Manager in the Oracle Developer Tools group living & working in Amsterdam. He is a Java technology enthusiast, evangelist, trainer, speaker, and writer. He blogs here daily.

The focus of this blog is mostly on NetBeans (a development tool primarily for Java programmers), with an occasional reference to NetBeans, and sometimes diverging to topics relating to NetBeans. And then there are days when NetBeans is mentioned, just for a change.


« September 2012 »