It all started way back in late 2002, few of Sun Senior Engineers (including me) pondered, what if we create an IDE that would attract developers new to Java world, especially who would like to move from VB/ASP to Java. We thought the primary attraction would be a Visual Web Development Tool. Sun already has an IDE called Netbeans. However, at that time Netbeans was meant for developers with advanced Java skills, which of course is no longer true. Netbeans has grown so much over years, it can now cater for wide range of developers, from novice to advanced. That is why the Visual Web Development Tool has been fully integrated in to Netbeans.
Developing an IDE from scratch is next to impossible, so must start with an existing IDE and modify. The solution may be to completely overhaul Netbeans. However, being an established Open Source tool, making incompatible changes to Netbeans for the sake of another breed of developers with out the consent of the community sounded impractical. So the idea of a new IDE was born, that would fork Netbeans source base (in a closed repository), and make incompatible changes to it, to make its look and feel similar to that of an IDE familiar to VB/ASP Developers. The new IDE was later called Sun Java Studio Creator. Since VB/ASP developers were the main target audience, developing an IDE for Java Based JSF application was an ideal choice. In order to mold Netbeans into this ease of use tool, we identified the following major area of work for May 2003 Java one presentation.
Following are the major area I contributed.
Window Manager (WM)
One of the main sluggishness of NB 3.5 is its Window Manager. Even though there were proposal to rewrite the WM, the time line to finish was Feb. 2004. However, we want it by May 2003 for Java One. Since we had only 4 months left for Java One, it was impossible to wait fro the new WM from netbeans. I proposed to use a third party tool called JIDE. I presented my proposal on Dec 2002 just before the winter break. The major problem with then (NB3.5) window manager was, it was never built with MVC (Model-View-Controller) paradigm in mind. Even though JIDE is architected as MVC, using it as such would break the modules as they depend heavily on the Netbeans Window Manager architecture. So I chose to rewrite the Model and Controller part of the Window System Architecture (a major re-write called Rave Window Manager ) and use JIDE as View (Layout Manager). Since, I know that there may be issues if I tightly integrate JIDE and JIDE licensing could not be worked out, I architected additional layer of abstraction between Rave Window Manager & Layout Manager and the interaction between them is defined by a simple event model. This facilitates easy substitution of another layout manager with out any modification to the Window manager controller. I worked effectively with JIDE software to resolve many of the issues associated with integrating their product with Rave and we successfully did the Rave demo with JIDE integrated at Java ONE , May 2002.
However, due to licensing issue (legal could not work out a deal with JIDE), we had to drop JIDE. Since we need to have a window manager for TP release (Oct 2003) and JIDE deal has fallen out, I took the decision to rewrite the Layout Manager ourselves. Since I already architected such as way JIDE could be easily replaced this was not a major issue. I designed the Layout manager from scratch and did the coding along with a contractor from Germany.
Toolbox & Designer-Toolbox interaction Model
One of the main deficiency of Netbeans is lack of provision to drag and drop components on to designer. For this we need two parts.
I designed and developed the toolbox from scratch which can display set of components . Additionally, I implemented the simple Drag and Drop component model to drop the components on to the designer
Modifying Netbeans core platform
In order to make the Netbeans into a ease of use tool there were several changes needed to Netbeans IDE as a whole, including
Server based application debugging for ease use
Even though Netbeans IDE has a well defined debugger and attaching to a remote JVM for remote debugging, it is a tedious process to debug a web application. Everything is manual including
I designed a methodology to automate the whole process using project profiles that has a flag to inform that the project is in “debug” mode. Also introduced logic for the project to invoke the application server in debug mode, if the project is in debug mode. Overall implemented such a way that a simple menu “debug project” would do all the step with out any manual interaction.
Server based web application error handling
I architected, designed the socket based simple client server model for handling error occurs in a web application developed using Rave IDE (see for details
The concept has three parts
I also involved considerably in other parts of the IDE