Geertjan is a DZone Zone Leader and has posted 468 posts at DZone. You can read more from them at their website. View Full User Profile

Interview: Porting a Sales System to the NetBeans Platform

10.16.2008
| 38104 views |
  • submit to reddit

Aljoscha "Josh" Rittner (blog), who works for Sepix GmbH and lives near Göttingen in Germany, has been porting the Sepix Sales System, a plain Swing application, to the NetBeans Platform. The application is a customer relationship management system for sales managers on the road. At this stage, the application is running on the NetBeans Platform with a fully functional module for mapping and routing. The application offers a map display, works as a route planner, and is capable of displaying data from a database as geolocations. You can display any type of graphical layer over the map, with sales territories or any kind of POIs, such as speed limit zones (see the screenshots at the end for details).

In this interview (an interview from 2 years ago on a similar topic with Josh can be found here), Josh talks about the application and the cost (in time and energy) of porting it to the NetBeans Platform. He also describes the process of porting and the main NetBeans APIs that he has made use of. (Click here for a German PDF version of this interview.)

First, a screenshot to give an idea of what the application now looks like, i.e., on the NetBeans Platform (many more screenshots can be found at the end of the interview):

Let's start by talking about why you thought about using the NetBeans Platform in the first place.

Well, I've used the NetBeans IDE since the end of the '90's and have been, since that time, closely following the open sourcing of the related APIs into its current form as a fully-fledged Swing framework. With the 6.0 release I saw the time had come to migrate my current Swing projects to a new level of technology. The old plain Swing CRM system could function better if it were based on a modern desktop platform. Many components, which I had already programmed, were no longer modern and were increasingly difficult to maintain. I simply didn't have the time to redo all the basic things all over again. With a framework, such as that offered by the NetBeans Platform, I wanted to save a large portion of my development time and energy.

How did you go about porting the application?

There were three stages of development of the project:

  1. Initially, I had to modulerize and refactor the source code of my old Swing application so that it fit better into the NetBeans Platform. All the parts that the NetBeans Platform already provides had to be identified. The refactoring itself took up several months and was distinct from the work involved in relation to the NetBeans Platform itself.

  2. In the second step, I wrote a prototype application on top of NetBeans Platform 6.0. The application offered basic functions for the mapping & routing. I used a very monolithic structure at this stage. I only had a module suite as my project type, together with one additional module that covered the mapping and routing. During this time, I learned most about NetBeans in terms of its platform concept. The prototype required only two months to realize, however, and ended up providing the most important functionality. Nevertheless, it was obviously a huge chunk of code in one single module. That was, in principle, not a problem in terms of the NetBeans Platform. It was simply a fast implementation of the required functions.

  3. In the third stage, the prototype was rebuilt again. Everything I had now learned about the concepts of NetBeans modularization was applied in this phase. I have, for example, created a NetBeans Platform from the harness-cluster. So, I have a stable and consistent platform by means of "Module Suite Chaining". The NetBeans Platform is thus no longer dependent on the update cycles of the NetBeans IDE. In my NetBeans Platform, I have integrated the core modules for the required database access and basic CRM features. Now it is possible to access these features from different module suites. Many functions have been "out sourced" to extra modules and will now be addressed  as services. With this "SOA feature" you can install the map layer as extra NBM packages and display them automatically in the map.

Which parts are you happiest with?

It's hard to say which areas are highlights.

  • The Window System API was easiest to understand. The Window System API brought me the fastest successful visual experience.

  • The advantages of the Lookup API do not reveal themselves immediately, but once you start trying things out, it's a big help. This API can really let you develop independent, loosely coupled components.

  • The entire infrastructure of the Options API and the AutoUpdate Center API helps a lot in saving development time too. One no longer needs to develop boiler plate code in these areas at all.

Which of the NetBeans API's did you use?

Nearly all areas of the NetBeans Platform APIs! Of course, initially, the Window System API. Next, I needed the Options and Preferences API for the configuration of modules. The Lookup API is used for decoupling. The Nodes and Explorer APIs display the route lines, address lists, and map layer. The Wizard API simplifies complex steps for the user. The Explorer and Property Sheet API lets the user control the layer styles, such as color, border line thickness, and transparency. I use the AutoUpdate Center API so that software updates are made possible. I use the Palette API for predefined operations in the database query editor. To me, it was very important to learn as much as possible about the NetBeans Platform so that I could use as much of it as possible.

How has your experience been creating all of this?

The learning curve for a framework of this nature is very steep. Ultimately, what helped me were the books "NetBeans Platform 6: Rich Client Development with Java" by Heiko Boeck and "Rich Client Programming: Plugging into the NetBeans Platform". Of course, I read almost every article at http://www.planetnetbeans.org/, while constantly browsing the mailing lists at http://www.netbeans.org/community/lists/top.html). The Developer FAQ at http://wiki.netbeans.org/NetBeansDeveloperFAQ is equally indispensable.

But... the main source is still the source code of the NetBeans Platform itself!

Can you give some tips for someone beginning a similar project on the NetBeans Platform?

It is very important to deal with the module concept, the various Classloaders, and the Lookup API. These three areas simply must have been understood in order to work coherently with the NetBeans Platform as a whole.

Can you name some things that you'd like to have improved in the NetBeans Platform?

  1. TopComponents should also be "heavy weight", as it is in Swing, for example, with Swing's pop-up menus and tooltips. Currently I have the problem with the movie player module from the Java Media Framework because the player component overlaps other TopComponents when slided in. This is quite unpleasant.

  2. It should be easier to mount native foreign libraries into a NetBeans Platform application.

  3. I need the global selection management to be separate from TopComponents.  I have some cases with a global accessible object without any association to the focus-selection management. For example, I have a loaded list with customers in the QueryResultTopComponent, two toolbar buttons in the Navigator, and an AddressViewTopComponent. When I change the focus to the AddressViewTopComponent, the focus/activation-state gets lost from the AddressViewTopComponent and my toolbar buttons get greyed out. OK, I know some tricks to fix this problem, but it could be easier.

    For example, I know a method to change the Global Selection Management (GSM). It's a registered service in the META-INF/services folder. To replace the GSM, drop a text file named "org.openide.util.ContextGlobalProvider" into the META-INF/services folder and write these lines:

    #-org.netbeans.modules.openide.windows.GlobalActionContextImpl
    de.sepix.globalactions.NonFocusActionContextImpl

    The absolute minimal implementation is:

    public final class NonFocusActionContextImpl implements ContextGlobalProvider {
    private final InstanceContent contents = new InstanceContent();
    private final Lookup lkp = new AbstractLookup (contents);
    public Lookup getLookup() {
    return lkp;
    }
    public void addContent (Object content) {
    contents.add(content);
    }
    public void removeContent (Object content) {
    contents.remove (content);
    }
    }

    But with this new class I lose the standard focus/TopComponent based GSM. Some applications need both behaviors.

What's the future of your application?

The mapping and routing module is now ready. Next steps include the migration of a mail client and a time planner, comparable to Outlook. In the old Swing application this functionality is already fully operational, they only need to be ported as modules to the NetBeans Platform. After that, the remaining areas of the old CRM application will transferred. I will certainly be pretty busy during the next six months or so!

Anything else you want to share?

Many things that I've learned in dealing with the NetBeans Platform I share in my blog, which is in German. I would be delighted if the NetBeans community in Germany would continue to grow. I have found the NetBeans Platform to be a superior framework for rich client applications!

Finally, some more screenshots to show the main parts of the new NetBeans Platform application:

Region builder:

Route list:

Route track wizard:

Query builder:

Speed limit zones:

Database query:

Found addresses:

Help:

Video tutorials:

Published at DZone with permission of its author, Geertjan Wielenga.

Comments

Fabrizio Giudici replied on Thu, 2008/10/16 - 4:34pm

Aljoscha, pretty good work here. For the global selection stuff, I think you're at 99% of the solution. Wade Chandler did almost the same thing (see here http://wadechandler.blogspot.com/2007/12/central-lookup-creating-central.html), het just didn't register the thing  as the default ContextGlobalProvider, but as a completely separate service. At this point you can use it as a common place about components to share information. I've wrapped Wade's class in a further EventBus which exposes a publish/subscribe pattern - let's see if I manage in finish a post about it tonight.

James Black replied on Wed, 2011/08/10 - 8:27am

what else i can say, it is a real deal man.

 

chiropractor lafayette

Azzeddine Dimi replied on Wed, 2011/08/10 - 4:15pm

and i lik this article

what else i can say, it is a real deal man.

magazine journaux livre
 

 

Miranda Rivera replied on Mon, 2011/08/15 - 5:46am

you post "Porting a Sales System to the NetBeans Platform" is informative and useful for me

 

Shays Rebellion

 

 

 

Essie Stout replied on Thu, 2011/08/18 - 3:30am in response to: Miranda Rivera

I just saw your post accidently. i just finished reading the post "Porting a Sales System to the NetBeans Platform" it really interesting

Thirteenth Amendment

Lydia Berger replied on Thu, 2011/08/18 - 6:53am

you post "Porting a Sales System to the NetBeans Platform" made me happy. keep going

Virginia Plan

Lydia Berger replied on Thu, 2011/08/18 - 7:59am

you post "Language-oriented Programming and Language Workbenches

" made me happy. keep going

Fathers Rights

Oreste Homerb replied on Sat, 2011/08/20 - 2:31am

i read few of your blog post, really your way of writing is good. i am non english speaker able to understand your sentence.

Lady Gaga Costume

Bradly Sperberz replied on Sat, 2011/08/20 - 6:19am

Great piece of post. but do keep the post little bigger. Halloween Costumes 2011

John Nyzhuk replied on Sat, 2011/08/20 - 6:24am

Great piece of post. but do keep the post little bigger.

cybermondaydeals2011

 

Rudie Fardjadip replied on Sat, 2011/08/20 - 7:20am

Great piece of post. but do keep the post little bigger.

Snooki Costume

 

Cory Sloneq replied on Sun, 2011/08/21 - 11:45pm

it very narrative post. thanks good read

Ca Divorce Lawyers

Win Stongeorge replied on Mon, 2011/08/29 - 2:13am

Excellent post! I'm Glad i've able to read post

Interview: Porting a Sales System to the NetBeans Platform

!

<a href='http://injurylaw.yolasite.com/'>Injury law</a>

Alyas Butt replied on Thu, 2011/09/08 - 2:52am

Thanks For Great Post Many People Like this And Enjoy Your Post 

Cheap Dog Beds Fox Sunglasses

Julia Peter replied on Fri, 2011/09/09 - 4:48am

The thinking behind the writing/article is appreciable, good work! Moreover I want to share if you want to get some great information regarding Goa travelling, you can get it here http://www.goatraveltips.com/ Goa Travel Tips

Randy Lorie replied on Tue, 2011/09/13 - 1:38am

This is a great post! I've been torn between using NetBeans and Sepix for a while now, but it's looking like NetBeans has the upper hand. Secrets to Dog Training Reviews

Wak Ngah replied on Thu, 2011/09/29 - 8:48am

Sometimes this is so hard . Sharing Community for everyone Thank you

Chicago Auto In... replied on Sat, 2011/12/10 - 10:55am

This is a spectacular article that I have really enjoyed. Hopefully I can learn more from your valuable experience. Thanks a lot for sharing this and please keep on posting ... Make My Trip

Ngableh Fai replied on Thu, 2011/12/15 - 11:58am

The world has changed, great post here. gutter installation cost

Matt Coleman replied on Tue, 2012/01/03 - 12:31pm

great interview..Happy New Year to all website design buffalo

Alex Fusate replied on Mon, 2012/01/23 - 9:12pm

Thanks Geertjan Wielenga for this interview ! Alex, from guitare enfant. I do also other stuff code like guitare electrique enfant and more recently a good one which can be found on guitare acoustique enfant. Enjoy and keep on working ! guitare classique enfant

Ana Brown replied on Wed, 2012/02/01 - 11:03am

Normal 0 false false false EN-PH X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;}

1.       Porting a Sales System to the NetBeans Platform is such a laborious work to do! But in the end, the entire process can be of great help to the sale managers. Hopefully this application will be used for good and will not be misused in mapping and routing houses for other criminal intentions. You can contact personal injury lawyer in Miami any injury related to the issue.

Lulu Price replied on Wed, 2012/02/08 - 9:47am

You post on Porting a Sales System to the NetBeans Platform makes a lot of sense really. I find it hard to understand these things, being a personal injury attorney in Miami , there's a lot of things I just don't understand. These posts really do help.

Bratnyh Tnyh replied on Mon, 2012/02/13 - 4:46am

foreign exchange currency rates - currency exchange service, currency transfers,money transfers,international money transfers.

Bratnyh Tnyh replied on Mon, 2012/02/13 - 4:48am

money exchange online - VFX support you with the best technology, competitive exchange rates and peace of mind that your money is safe.

Carla Brian replied on Sun, 2012/04/01 - 5:52pm

Good job on this system. I hope you will be successful on this. Keep up the good work. - Joe Aldeguer

Frank Helper replied on Fri, 2012/04/27 - 2:15pm

Transfering data from one database system to another always makes my skin crawl. I mean this looks stable, and your method is fantastic, but porting has never been easy at my

 <a href="http://www.medical-billing.com/contact.php">doctor</a> work. I'll try this out. 

Rizo Albert replied on Sun, 2012/05/20 - 5:55am

Normal 0 false false false EN-US X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;}

Just wanted to acknowledge how much I'm enjoying this show as a podcast and how great this episode was in particular. Thanks!

 

Toronto logo design company

Markoio Skario replied on Thu, 2012/11/08 - 7:29pm

Win7 loader daz youtube    and hacked accounts  
but i still like it

Bryan Low replied on Tue, 2012/12/18 - 7:27am

I have always regarded that financial dedication opportunities in Woodlands EC  property and flats is always a better choice than any other types of cost-effective dedication. Not only can the investor create use of on his cost-effective dedication, he can always stay in it should he decide not to rental out it.Investing in stocks, gold etc has really no tangible benefits on your cost-effective dedication.Thats just my 2 money thought thoughThank you writer for the useful writeup.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.