Sudoku as NetBeans module

English flag One of my previous blog entry described Sudoku problem - there I created Sudoku solver as a standalone application/j2se project (sudoku.zip). I will show how easily you can add this sudoku solver to NetBeans IDE (I used NetBeans 5.0 release for development).

The best way how to make any j2se project working as a NetBeans module is to create NetBeans Suite and then NetBeans Library Wrapper Module Project. This wrapper will just wrap sudoku.jar file from our previous j2se project. We need to do just following steps to crate desired functionality:
  • Create SudokuSuite suite - the suite is needed when you create wrapper. Each wrapper module needs some suite it will be inside. To create suite push main menu File|New Project. Then select NetBeans Plug-in Modules|Module Suite Project. Go to the next panel, type SudokuSuite as a Project Name and push Finish button.
  • Create SudokuWrapper - push main menu File|New Project. Then select NetBeans Plug-in Modules|Library Wrapper Module Project. Push Next button and browse the library (here browse sudoku.jar from /dist directory of our sudoku j2se project). Push Next button and type SudokuWrapper as a Project Name and push Next followed by Finish button.
  • Add Swing Layout Extensions library - our sudoku frames use Matisse layout. This library need to be add to the wrapper module. Simply show properties dialog of the project and select Libraries node. Push Add Dependency... button and type "swing layout" to the filter - it will offer Swing Layout Extension integration. Push OK on dialog and OK button on Project Properties dialog.
    This is not the correct way how to add dependency on Swing Layout Extensions library. The best way is to create another wrapper module that should wrap .jar containing Swing Layout Extension library. The SudokuWrapper should depend then on this new wrapper module. The way I used was choosen just for its simplicity.
  • Change module type from Autoload to Regular - our module is now designed to be a wrapper. Wrapper is supposed to be used in other module so it is by default designed as Autoload module. We need to change it to Regular in properties dialog of the project where we select API Versioning node. Then we just switch radiobutton Autoload to Regular. Push OK button on Project Properties dialog to close it.
  • Create SudokuAction - this action will add item to main menu, by calling it we invoke sudoku in NetBeans. To create action invoke popup menu on SudokuWrapper. Select New|Action and push Nextbutton. Select Category, Menu, Position fields according your wishes for placing action item. Push Next button, type Class Name as "SudokuAction" and Display Name as "Sudoku". Push Finish button to finish wizard. Now modify performAction method body as follows:
    Sudoku-action
  • Run SudokuWrapper - we are done, now there is the last step we have to do with module. We need to Install/Reload in Development IDE (or Create NBM for distribution). These actions are available in popup menu of our SudokuWrapper.

The module is now ready. I didn't pay attention to packaging. This is because I wanted to simplify steps of creation and for the purpose of process description we actually don't care about package names.
The more straightforward way is to make wrapper for sudoku.jar and make one more module that depends on this wrapper. But we didn't do it this way to simplify it as much as possible.
The third step aside is previously mentioned adding Swing Layout Extensions library as a .jar not a wrapper.
And finally I didn't convert sudoku window to a top-component that can be docked in NetBeans. It is not necessarry for this example.

You can download SudokuSuite.zip or in case you want just install final .nbm to your NetBeans IDE through Update Center download sudoku.nbm.

Czech flag Jeden z mých předchozích záznamů v tomto blogu pojednával o Sudoku problému - vytvořil jsem tak Sudoku solver jako samostatnou aplikaci/j2se projekt (sudoku.zip). Chtěl bych nyní ukázat jak snadno se dá tento sudoku solver využít a přidat do NetBeans IDE (pro vývoj jsem použil NetBeans 5.0 release).

Nejlepší cesta jak donutit jakýkoliv j2se projekt aby pracoval jako NetBeans modul je vytvořit NetBeans Suite a poté NetBeans Library Wrapper Module Project. Tento wrapper pouze "obalí" soubor sudoku.jar z našeho předchozího j2se projektu. Aby jsme docílili požadované funkcionality, potřebujeme udělat pouze následující kroky:
  • Vytvoření SudokuSuite suite - suite je zapotřebí pokud vytváříme wrapper. Každý wrapper modul potřebuje být umístěný v nějaké suite. Pro vytvoření suite vybereme v hlavním menu File|New Project. Pak vybereme NetBeans Plug-in Modules|Module Suite Project. Přejdeme na další panel wizardu pomocí Next. Tam napíšeme SudokuSuite do políčka Project Name a stlačíme tlačítko Finish.
  • Vytvoření SudokuWrapper - vybereme hlavní menu File|New Project. Označíme NetBeans Plug-in Modules|Library Wrapper Module Project. Zmačkneme tlačítko Next a přes tlačítko najdeme na disku library(sudoku.jar z adresáře /dist našeho sudoku j2se projektu). Zmačkneme tlačítko Next a napíšeme 'SudokuWrapper' do pole Project Name. Pak jen zmačkneme Next a nakonec ještě tlačítkoFinish.
  • Přidáme Swing Layout Extensions library - okna našeho sudoku používají Matisse layout. Tato knihovna musí být proto přidána do wrapper modulu. Jednoduše otevřeme properties dialog našeho projektu a vybereme Libraries node. Zmačkneme tlačítko Add Dependency... a napíšeme "swing layout! do filtru - vyhledá se nám tak Swing Layout Extension integration. Stačí už jen stlačit OK na dialogu a pak ještě OK na Project Properties dialogu.
    Tato cesta jak přidat závislost na Swing Layout Extensions library není příliš korektní. Nejlepší by bylo vytvořit další wrapper modul, který by obaloval .jar file obsahující Swing Layout Extension library. SudokuWrapper by pak měl záviset na tomto nově vytvořeném wrapper modulu. Cesta, kterou jsem zvolil byla vybrána kvůli zjednodušení.
  • Změna module typu z Autoload na Regular - náš modul je nyní navržen jsko speciální typ, kterým je wrapper. U wrapperu se předpokládá, že bude použit v jiném modulu, takže je předdefinován jako Autoload modul. My jej potřebujeme změnit na Regular. To provedeme přes properties dialog našeho modulu, kde vybereme API Versioning node. Pak stačí přepnout radiobutton Autoload na Regular. Zmačkneme OK button aby se nám zavřel Project Properties dialog.
  • Vytvoříme SudokuAction - tato action přidá položku do hlavního menu. Vyvoláním této položky se spustí v NetBeans naše sudoku. Pro vytvoření action vyvoláme popup menu na SudokuWrapper modulu. Vybereme New|Action a zmačkneme tlačítko Next. V položkách Category, Menu, Position vybereme hodnoty podle toho, kam budeme chtít action do menu umístit. Stlačíme Next a napíšeme "SudokuAction" do pole Class Name a taky "Sudoku" do pole Display Name. Stlačíme Finish button pro ukončení wizardu. Nyní potřebujeme modifikovat tělo metody performAction takto:
    Sudoku-action
  • Spuštění SudokuWrapperu - jsme prakticky hotovi, stačí už jen poslední krok. Potřebujeme Install/Reload in Development IDE (nebo Create NBM pro distribuování). Tyto akce jsou dostupné v popup menu modulu SudokuWrapper.

Modul máme hotový. Nevěnoval jsem ovšem pozornost správnemu použití packages. To proto, aby byly jednotlivé kroky zjednodušeny a pro účel popisu procesu jsme se nepotřebovali zabývat názvy packages a nechali jsme tak nastaveny default hodnoty.
Více přímočará cesta je vyrobení wrapper modulu pro sudoku.jar a pak vytvoření dalšího modulu, který by závisel na wrapperu. To jsem rovněž vynechal z důvodu jednoduchosti.
Třetí 'krok stranou' je už výše zmíněné přidání Swing Layout Extensions library jako .jar souboru a ne jako wrapperu.
Poslední co jsem opominul je, že jsem neprováděl konverzi okna sudoku na top-komponentu, která by se zadokovala do NetBeans. V našem příkladu to není nezbytné.

Můžete si stáhnout celý SudokuSuite.zip. Pro případ, že máte zájem o .nbm (a chcete si jej přidat do NetBeans přes Update Center), je k dispozici sudoku.nbm.

Comments:

Hi, is it really necessary to add the Swing Layout Extensions library? I thought that it should be part of the sudoku.jar

Posted by Lukas on červen 09, 2006 at 04:03 dop. CEST #

Lukasi, Swing Layout Extensions library is not included in sudoku.jar. The sudoku.jar is right in the /dist directory of J2SE project while swing-layout-1.0.jar is under /dist/lib directory. The sudoku.jar points to swing-layout-1.0.jar through record in its manifest - this is why it works in j2se project:-)

Posted by .JARa on červen 09, 2006 at 08:27 dop. CEST #

There's another sudoku I found some weeks ago: http://jroller.com/page/christian?entry=playing_in_netbeans I really like (my boss don't, but sometimes fun's needed, ain't it?). Yours shows the capabilities of wrapping very impressively, but I think the one mentioned above is better for playing. Keep rocking J..e

Posted by Jake on červen 12, 2006 at 03:03 dop. CEST #

I will do the same job as you.

Posted by any on červen 15, 2006 at 04:00 dop. CEST #

This tutorial is great. However, I have one slight problem. My J2SE project uses a bunch of jar's (found in the "Library" folder). It uses JAX-WS and AbsoluteLayout, and so forth. When I created a new "JAX-WS" wrapper module and put all the JAX-WS jar's in it and compiled, I got 10 thousand "cannot access" warnings (almost)! My comment to SUN, "These wrapper modules are a serious pain!!, why can't I just include the jar's like in a J2SE app?" So here are some questions I have.... 1. Do I have to create a separate wrapper module for every .jar my J2SE app calls? 2. How do I find the right jar (and combination of jar's that resolves my "cannot access" problems without generating a bunch more "cannot access" problems in my wrapper module? 3. Is there a limit to how many .jar's I can include in a wrapper module? I am using NB5.5 Beta 2.

Posted by Todd Riley on srpen 31, 2006 at 06:09 odp. CEST #

Post a Comment:
  • HTML Syntax: NOT allowed
About

jara

Search

Archives
« duben 2014
PoÚtStČtSoNe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today