Saturday, June 03, 2006

Netbeans pluginok

Idaig foleg eclipset hasznaltam de egyre jobban kezdek atterni NB-re. Szerintem sokkal intuitivebb, a featureok magatol ertetodobbek. Kicsit lassabban reagal meg tobbet eszik, de ez konnyen orvosolhato ha megfelelo vasat tesz az ember ala. Magaval eclipsevel sincs bajom inkabb egyketto 'erdekesen mukodo'/aluldokumentalt thirdparty pluginnal van problema. NB meg amiket alapbol tartalmaz azok ugylatom jol is mukodnek. Eclipse mellett szokott azaz erv lenni hogy 'dejo sok plugin van hozza', en mint ahogy fentebb irtam ezt inkabb hatranykent elem meg. De mindenesetre megneztem a netbeans plugin kepessegeit. Tulsagosan nem merultem el benne csak 2 egyszeru modult raktam ossze. Ennek a menetet fogom most leirni.

Biztos tobben voltak mar olyan helyzetbe hogy nehany soros kodreszletet kellett volna megosztani IM-en, IRCen vagy akarmilyen chaten valakivel. Kozvetlenul oda masolni ha par sornal tobb a kod akkor nem tul szerencses. Egyreszt attekinthetlen mert a tabokat altalban nem tartja meg, raadasul sok protokolon limitalva van az egyszerre elkuldheto szovegmennyiseg, legrosszabb esetben pedig a chatkliens mindenfele smiley jelekkre csereli a spec karaktereket a kodban. Erre vannak az ilyen 'nopaste' oldalak, ahol weben elpostolja a koder, az szepen kiszinezi, majd ad egy linket ahol meg lehet nezni illetve mutatni masnak. Tehat egy olyan plugint irtam ami a NB editoraban kijelolt kodot elkuldi egy ilyen oldalra majd megjeleniti a kapott linket. Az oldal pedig ami most hardcoded benne van a pluginba a http://phpfi.com/. (Egyebkent meg semmi kozom a phphoz csak ezt az oldalt ismerem :) )
Egy olyan esemenyre lesz szuksegem ami akkor kovetkezik be ha a user az editor popup menujet megnyitja. Valamint szuksegem van tovabba arra hogy lekerdezzem az eppen kijeolt kodot.

Noh, akkor nezzuk lepesenkent.

New project/NetBeans Plug-in Module kell nekunk.



Ezutan adunk neki egy nevet meg locationt/prj dirt.



Majd package nevet, config fileokat.



Elkeszult az uj projectunk, es most jon a lenyeg az action wizard. File/New/Action.



Tobb fele actiont lehet letrehozni, pl olyat ami context menure- vagy file menure kattintva generalodik. Ezeket kulonfele Cookie osztalyok reprezentaljak. Ami nekem kellett most azt az EditorCookie tudja, mivel rajta keresztul konnyeden elerhetem az eppen editalando forrast. GUI regisztracional az editor context menujebe regeltem be. Igy ha a forrasba jobb(ami nekem bal) gombbal kattintunk akkor felbukkano menuben benne lesz az ujjonnan beregisztralt modulunk.
Ha ezt mind megtettuk akkor az action wizard legeneral nekunk egy skeletont osztalyt aminek az performAction metodusa fog meghivodni a menure kattintaskor. Ide kell beirnunk a action kodunkat.





Egy EditorCookie peldanytol le tudjuk kerdezni az eppen nyitva levo JEditorPane-eket. Ez meg egy mezei swing komponens, innen mar a megszokott modon megy a kijeolt szoveg lekerdezese a getSelectedText() metodussal. Ha ez megvan mar csak fel kell postolni a cuccot az oldalra, de ezt nem reszletezem mert nem tartozika plugin temakorhoz. Egyebkent sima URLConnection-el csinaltam.

Egy kis osszedobott kodreszlet arrol amiron fentebb beszeltem:

    protected void performAction(Node[] activatedNodes) {
EditorCookie c = (EditorCookie) activatedNodes[0].getCookie(EditorCookie.class);
if (c != null) {
JEditorPane[] panes = c.getOpenedPanes();
if (panes.length > 0) {
String selection = panes[0].getSelectedText();
if ( "".equals( selection ) || selection == null ) {
JOptionPane.showMessageDialog( null, "At first you have to select the code snippet." );
return;
}
Map params = new HashMap();
params.put( "nick", "netbeans" );
params.put( "descr", "netbeans code" );
params.put( "lang", "java" );
params.put( "source", selection );
try {
WebPost wp = new WebPost( "http://phpfi.com", params );
String response = wp.post();
LinkFrame lf = new LinkFrame();
lf.setLink( wp.getUrl().toString() );
lf.setVisible( true );
} catch ( Exception e ) {
e.printStackTrace();
JOptionPane.showMessageDialog( null, "error: " + e.getMessage() );
}
}
}
}


Tesztelesre 2 fele lehetosegunk is van. Alapbol futtatasnal indit egy ujabb NetBeans peldanyt ami az en 512 mega rammal felvertezett gepemet nagyon megviselte(nagyon erik a ram vasarlas). Vagy betolthetjuk az eppen futo NB-be is a modult. Ekkor figyelmeztet hogy veszelyes es hasonlok, de nekem most nem volt belole gondom. Villamgyorsan (najo, NBhez kepest villamgyorsan) bedeployozta es az aktulis context menuben mar ott is figyelt a beregelt modulom. Egy klikkre pedig .nbm filet lehet generalni az egeszbol amit mar barki be tud deployozni a sajat NetBeanse ala a Tools/Update Center/Install Manually menuben.



Szoval osszesegeben tok jo IDEnek tunik, ami nincs benne alapbol itt is megoldhato kulso modullal, viszont nem vagyok rakenyszerulve hogy alap funkciokhoz is thirdparty pluginokat rakogassak fel. Valamin a Matisse is egy olyan dolog amit valoszinuleg nehezen tudnek nelkulozni a jovoben.

Kicsit bovebb infok + flashdemok elerhetok
http://platform.netbeans.org/tutorials/ innen.

0 comments: