NetBeans Platform: 1 Java Desktop Infrastructure... 4 Different Use Cases
I've been thinking about the NetBeans Platform (a lot) and come to realize that it caters to four distinct use cases. (And possibly I'm wrong and there are even more.) Nevertheless, for what it's worth, here is a list of what I perceive to be the four use cases of the NetBeans Platform.
1. Foundation for a Swing Application. You're creating a Swing application. In other words, a Java application that makes use of the Swing toolkit for its user interface. There are two parts of any Swing application: the boring part and the part that the end user pays you for. In other words, maybe the user is paying you to make an application for scientists, so that they can store their chemical structures into a database. They're not paying you to make a windowing system. They're not paying you to make an Options window. They're not paying you to make a menu bar. They're not paying you to create a strategy for persisting data.
Similarly, maybe they're paying you to make a graphics program, so that users can touch up their digital photos, redesign their livingroom, compose music, or analyze their oil flow. In each case, they're paying you to create the business logic of an application, even though you also need to create an underlying infrastructure (before you can begin creating the business logic). That's what the NetBeans Platform is. It is the foundation. The infrastructure. The starting point. The basis upon which you build your application. For example, it provides the windowing system, which wouldn't be much fun to write, especially since your user isn't actually paying you for that.
2. Advertizing Space for an Existing Technology. Imagine you're JBoss. Or imagine you're Struts. Or imagine you're JUnit. Or imagine you're some other external technology. Those technologies exist independently of an IDE but will not thrive and prosper without being supported by an IDE. For example, one of the most common questions asked of the Groovy community, at this point in time, is: "What about tooling support?"
In the same way that a software technology doesn't really exist, or isn't really viable, until there's a book that's been written about it (i.e., you're only legitimate if you've been around long enough for a book publishing cycle to complete itself), your technology also won't be viable without IDE support. Hence, the NetBeans Platform is the launching pad for a technology's claim to existence. In other words, imagine a programming language without an editor. The tooling that the NetBeans Platform provides is the basis upon which an external, existing technology can claim it exists and has been "adopted" by people outside the immediate circle of its creators.
3. Fix the NetBeans IDE. In this use case, a user is typing in the Java editor and then discovers that there's something they want to do that they're not able to do, because the editor doesn't provide the functionality they need. The NetBeans Platform exists, in this case, as the basis upon which plugins can be added to NetBeans IDE, since NetBeans IDE is created on top of the NetBeans Platform. So, in this use case, the user is missing some functionality and, irrespective of whether there's an external existing technology that needs to be integrated (which is the 2nd use case, outlined above), the user wants the IDE to be better or enhanced from its current state. The NetBeans Platform exists for this purpose and many of the plugins in the NetBeans Plugin Portal exist to enhance the NetBeans IDE with new features on the basis outlined for this use case.
4. Empower Swing Applications Created on top of the NetBeans Platform. Some of the more advanced applications created on top of the NetBeans Platform have published APIs. These APIs exist on top of those provided by the NetBeans Platform. The NetBeans Platform's use case, in this scenario, is to provide a basis for Swing applications to be extended by means of additional plugins. And these plugins are not NetBeans plugins. These plugins are XYZ plugins, where XYZ is the name of the application in question. Therefore, if the application is used to store and retrieve photos, and process them in some way, the use case under discussion in this instance sees the NetBeans Platform as the basis upon which the Swing application in question can be extended. The developer would, in this case, provide plugins that extend the Swing application, making use of the APIs exposed by this particular Swing application.
The above four very distinct use cases can be identified when it comes to the NetBeans Platform. Part of the complexity of the NetBeans Platform (or any platform) lies in this divergence between use cases, as well as the different needs of those that fall within the above categories. Clarifying the distinct use cases, as I have attempted to do above, is important in beginning to understand the diversity of needs to which the NetBeans Platform caters,