Netscape IFC

Configurarea unor servere WWW pentru recunoașterea tipurilor MIME

Deoarece o parte a acestui număr este dedicat tehnologiilor și firmei Netscape, la rubrica Webmaster mi-am propus să vă prezint câteva lucruri despre Netscape IFC, o bibliotecă de clase Java care vine în ajutorul dezvoltatorilor de aplicații și applet-uri Java. Poate că articolul și-ar fi găsit mai bine locul la o rubrică de programare Java, dar aplicația prezentată este legată totuși de Web.

IFC e prescurtarea de la Internet Foundation Classes. Această bibliotecă împreună cu Constructor, o aplicație Java pentru construirea rapidă a interfețelor utilizator bazate pe componente IFC, au fost dezvoltate inițial la firma NetCode, înființată în 1995 de către Jayson Adams și Scott Love. În martie anul trecut firma NetCode a fost cumpărată de Netscape, iar IFC a devenit una dintre tehnologiile care stau la baza inițiativei Netscape ONE, un mediu deschis pentru dezvoltarea rapidă și ușoară de aplicații robuste, multi-platformă, pentru intranet și Internet.

Clasele IFC sunt scrise complet în Java. Ele au la bază interfața grafică standard AWT și reprezintă o îmbogățire a funcționalității și a componentelor dezvoltate de Sun. Au apărut pentru a face viața mai ușoară acelor programatori Java exasperați de greutatea dezvoltării aplicațiilor grafice Java bazate pe AWT. Și alte companii au purces la dezvoltarea de componente Java care să suplinească lipsurile sau să completeze AWT-ul: Marimba cu Bongo, iar de la Microsoft se tot aude că în același timp cu Internet Explorer 4.0 va apărea AFC (Application Foundation Classes). Însă Netscape este deocamdată lider bucurându-se și de sprijinul companiei JavaSoft în cadrul inițiativei „100% pur Java“.

Clasele Java din pachetul IFC stau la baza câtorva cadre de dezvoltare pentru aplicațiile Java:
• un cadru de componente grafice simple ca butoane, câmpuri de editare, liste;
• un cadru pentru componente mai complexe, care cuprinde un selector de fonturi, un selector de culori, un selector de fișiere, etc.
• un cadru pentru un câmp de editare pentru text marcat cu diferite fonturi sau culori, organizat în paragrafe și cu posibilități de afișare a imaginilor chiar în interiorul „documentului“ editat în acest câmp;
• un cadru de filtrare a evenimentelor și de desenare a elementelor grafice;
• suport pentru drag-and-drop;
• suport pentru ferestre. Există două tipuri de ferestre: ferestre interne afișate în același spațiu cu cel al aplicației și care au o reprezentare identică pe toate platformele și ferestre externe, native mediului pe care rulează respectiva mașină virtuală Java;
• suport pentru serializarea și deserializarea obiectelor;
• suport pentru animație;
• în sfârșit, un cadru pentru aplicații concurente. Aplicațiile nu trebuie să folosească mai multe fire de execuție, ci lucrează cu evenimente generate de timer-e.

Biblioteca IFC se livrează deja cu Netscape Communicator, dar utilizatorii care folosesc încă navigatoarele mai vechi trebuie să facă singuri un download de pe situl firmei și să o instaleze. Tot aici găsiți și ghidul dezvoltatorului, documentație pentru clasele ce compun pachetele netscape.application și netscape.util, precum și câteva exemple. Ghidul dezvoltatorului vă va îndruma primii pași în construirea de aplicații IFC explicându-vă conceptele de temelie ale librăriei IFC.

Atât exemplele, cât și aplicațiile dezvoltate de alți producători demonstrează că Netscape IFC este un bun punct de plecare pentru construirea de aplicații orientate spre intranet și Internet complexe, robuste și utile. Exemple: superMail, client e-mail, și Agenda, client pentru grupurile de știri, dezvoltate de Digerati; Pencil Me, un agent pentru planificarea agendei, dezvoltat de Sarrus Software; JWAVE, un set de componente pentru crearea de imagini grafice bi- și tridimensionale și de lumi virtuale VRML de la Visual Numerics și înșiruirea ar putea continua. Chiar și Constructor-ul amintit mai sus se bazează pe IFC.

Apariția versiunii 1.1 a kitului de dezvoltare Java de la Sun a însemnat într-un fel confirmarea ideilor aflate la baza Netscape IFC. Noul JDK se bazează pe o alta manieră de tratare a evenimentelor față de cea cu care ne-am obișnuit în versiunea 1.0.2: apare filtrarea evenimentelor, ceea ce înseamnă că anumite evenimente sunt recepționate doar de obiectele interesate. Totodată întâlnim și tehnica drag-and-drop prezentă anterior în IFC, precum și serializarea și deserializarea obiectelor. Netscape IFC poate să rămână în continuare o completare și o extindere a bibliotecii standard AWT și poate să-și păstreze rolul de fundație pentru crearea de aplicații Java complexe, cu o interfață grafică deosebită.

O applet-aplicație IFC

Ca exemplu, voi prezenta un applet care poate rula și ca o aplicație de sine stătătoare. Applet-ul codifică automat un text formatat cu diferite fonturi și culori în cod HTML.

Dezvoltarea a fost facilitată de componentele existente în biblioteca IFC.

Primul lucru de care avem nevoie este o clasă care trebuie să fie derivată din clasa netscape.application.Application. Această clasă reprezintă o aplicație IFC și rolul ei este de a păstra și a manipula informații generale legate de aplicație. Scheletul aplicației noastre ar putea arăta ca în listingul 1. În metoda init() are loc inițializarea unei instanțe a aplicației sau a applet-ului, în performCommand() se prelucrează evenimentele primite de la alte componente IFC, iar metoda main() este apelată o singură dată, atunci când dorim să rulăm aplicația TextToHtml din linia de comandă.

Următorul pas îl constituie specificarea unei ferestre de afișare. În cazul rulării ca applet, această fereastră este de fapt fereastra din cadrul documentului HTML în care se află applet-ul și este creată implicit. În cazul rulării ca aplicație fereastra trebuie creată explicit. În listingul 2 avem conținutul metodei main() în care creăm o fereastră externă și facem legătura dintre aplicație și fereastra respectivă.

Clasa View reprezintă clasa de bază în cadrul sistemului de ferestre și este un container care poate conține alte instanțe View, ajungându-se astfel la o ierarhie de instanțe View. Tratarea evenimentelor, afișarea ferestrelor se bazează pe această ierarhie.

O aplicație sau un applet posedă o instanță View (rootView) care este părintele tuturor celorlalte instanțe View afișate în cadrul ferestrei respective. Celelalte componente grafice se adaugă acestei rootView prin metoda addSubview().

Acum, ceea ce trebuie făcut este adăugarea componentelor care dau funcționalitate aplicației. Vom adăuga peste rootView o fereastră internă care conține un câmp de editare text înconjurat de bare de defilare și trei butoane cu următorul rol: primul acționează o fereastră standard pentru selectarea fonturilor, al doilea acționează o fereastră pentru selectarea culorilor, iar ultimul comandă prelucrarea textului. Variabilele unei instanțe TextToHtml le vor constitui instanțe care reprezintă componentele menționate anterior, iar în metoda init() se creează aceste instanțe și se face ordonarea lor în ierarhia de view-uri. Listingul 3 schițează aceste lucruri.

Ceea ce trebuie remarcat în procedura init() sunt metodele setTarget(), setCommand() și addTarget(). Majoritatea componentelor vizuale trimit anumite evenimente atunci când se acționează asupra lor. La apariția evenimentului de apăsare a butonului fontButon se trimite un mesaj instanței aplicației care-l conține. Conținutul acestui mesaj este cel specificat în apelul setCommand(). Există cazuri când o componentă trebuie să trimită un mesaj, dar nu știe cui. În acest caz se formează un lanț de componente care pot primi mesaje. Prima componentă din acest lanț care poate primi un mesaj de un anumit tip va fi aleasă ca destinatar al mesajului. Instanța editor va fi întotdeauna prima componentă care va fi întrebată ce mesaje poate primi, deoarece a fost adăugată chiar la începutul lanțului.

Tratarea mesajelor se face în procedura performCommand() schițată în listingul 4. În această procedură, dacă mesajul vine din partea butonului de salvare atunci se trece la prelucrarea textului introdus. Nu voi intra în detalii, dar ceea ce se întâmplă în cadrul acestei proceduri constă în interogarea editor-ului despre paragrafele pe care le conține și formatarea textului din interiorul acestora. Sursa completă o puteți lua însă de la http://www.uttgm.ro/~radu/ifc/TextToHtml/index.html. Codul HTML produs în metoda prelucrareText() se poate salva, în cazul unei aplicații pe discul local, iar în cazul unui applet printr-o metodă POST sau PUT pe un server WWW de unde îl puteți încerca imediat.

Și acum câteva cuvinte despre modul de utilizare a aplicației: după introducerea textului dorit acesta se selectează pe porțiuni și i se modifică atributele, cele de culoare prin drag-and-drop din selectorul de culori, iar cele legate de fontul de reprezentare cu ajutorul selectorului de fonturi. În cazul selectorului de fonturi nu puteți face drag-and-drop, dar, la mesajul de schimbare a fontului, componenta care răspunde este instanța editor, deoarece se află prima în lanțul de componente.

Cei interesați pot afla mult mai multe vizitând situl:
http://developer.netscape.com.


BYTE România - martie 1997


(C) Copyright Computer Press Agora