Sunteți pe pagina 1din 12

ANGHEL DRAGOS

CONVERSIE INFORMATICA

Arhitectura unui plug-in

Un plug-in este un set de componente software care adaugă capabilitați specifice unei aplicații
software mai mari. Dacă este suportat, pluginul permite personalizarea functionalitatii unei
aplicatii. De exemplu, plugin-urile sunt frecvent folosite în browserele web pentru a reda un clip
video, pentru a scana un document în cautarea virușilor, și pentru afișarea unor noi tipuri de
fișiere.

Termenul general folosit pentru a descrie snap-in-uri, plugin-uri, extensii si teme este add-on.

Eclipse este un framework software open-source scris iniţial in Java. Eclipse este considerată o
platformă universală, fiind capabilă de a oferi IDE (Integrated Development Environment)-uri
pentru mai multe limbaje, dintre care cel mai folosit de utilizatori este Java IDE. Eclipse a fost la
început dezvoltat de IBM, după care l-a oferit comunităţii open-source. Prima varianta de Eclipse
a apărut in Noiembrie 2001, şi, de atunci a continuat să se dezvolte, ultima varianta, Eclipse 3.3
fiind lansată in Iunie 2007.

Arhitectura Eclipse
Platforma Eclipse aduce o noutate, şi anume arhitectura bazată pe plugin-uri. În continuare
putem vedea o variantă simplificată a acestei arhitecturi. Eclipse are un micro-nucleu, si, cu
excepţia acestuia, totul este scris sub forma unui plug-in. Fiecare plug-in este lansat de acest
micro-nucleu.

1
Ce este un plugin?
Un plug-in este cea mai mică unitate funcţională a platformei Eclipse care poate fi dezvoltată si
transmisă separat. De obicei un tool simplu este descris într-un singur plugin, pe când un tool
mai complicat are funcţionalitatea împărţită în diferite plugin-uri. Pentru a întelege mai bine cum
funcţionează plugin-ul, trebuie să introducem noţiunea de extension point. Atunci când dorim ca
alte plugin-uri să poată extindă sau modifica funcţionalitatea plugin-ului nostru, trebuie să
definim un extension point.

Astfel, putem spune că fiecare plugin:

 Contribuie la unul sau mai multe extension points

 Opţional declară noi extension points

 Depinde de un set de alte plugin-uri

 Opţional conţine librării Java şi alte fişiere

 Poate exporta API-uri bazate pe Java

Un plug-in tipic conţine:

 un fişier manifest

 cod Java intr-o librărie JAR

 din nişte fişiere read-only

 alte resurse ca imagini, template-uri Web, cataloage de mesaje, librării native

2
Ciclul de viaţă al unui plugin
La pornire, Platforma Runtime descoperă un set de plugin-uri disponibile, le citeşte fişierele
manifest şi construieşte în memorie un registru al plugin-urilor. Platforma potriveşte numele
extensiilor cu declaraţia extension point-ului corespunzător. Orice problemă , ca de exemplu
lipsa unui extension point, este detectată şi logată. Registrul de plugin-uri este disponibil prin
intermediul Platformei API.

Un plugin este activat când codul său este trebuie executat. Odată activat , plugin-ul foloseşte
registrul de plugin-uri pentru a descoperi şi accesa extensiile ce contribuie la extension point-ul
său. De exemplu, plugin-ul ce declară preferinţele utilizatorilor , poate descoperi toate
preferinţele care au contribuit şi să le afişeze numele pentru a crea un dialog de preferinţe. Acest
lucru se face doar folosind informaţiile din registru, fără să fie nevoie să activam vreun alt
plugin.Acestea vor fi activate când utilizatorul selectează o preferinţă din listă. O dată activat, un
plugin rămâne activ pană când Platforma este inchisa.

Platforma Eclipse este pornită prin invocarea unei maşini virtuale Java standard. Fiecare plugin
are asignat propriul sau class-loader java, care este responsabil cu incărcarea claselor sale.

Dezvoltarea plug-in-urilor Eclipse


Dezvoltarea unui plug-in in Java diferă de dezvoltarea unei aplicaţii obisnuite. Un plug-in trebuie
creat înainte să începem o aplicaţie.

Cel mai uşor mod de a învată cum să realizăm un plugin este prin exemple. Eclipse ne pune la
dispoziţie câteva plugin-uri simple, pe baza cărora putem analiza structura acestora şi codul
generat.

Pentru a crea un proiect de tip plug-in , alegem “File-New-Project-Plug-in Project”. Pe a doua


pagina trebuie dat un nume proiectului, dupa care alegem un proiect default si anume
“Hello,World”. Apăsând Finish se creează un nou proiect.

În continuare putem vedea structura acestui Plug-in. A fost creată o clasa MyPlugin, o clasa de
acţiuni si fişierele de resurse necesare.

3
Editorul MANIFEST al plugin-ului
Odată ce proiectul de tip plugin este creat, fişierul manifest al plugin-ului este deschis în editorul
Manifest. Acest editor, constituit din mai multe pagini, reprezintă locul de unde poate fi
gestionat plugin-ul şi totodată poate fi folosit pentru editarea fişierelor plugin-ului(manifest.mf,
plugin.xml şi build.properties).

În continuare vom prezenta fiecare dintre paginile editorului:

Pagina Overview

Această pagină a fost concepută astfel încât să constituie o referinţă pentru a dezvolta, testa şi
depana un plug-in.Totodată este un centru de navigare către alte pagini sau de execuţie a unei
comenzi.

4
Conţine 5 secţiuni:

 General Information - informaţii generale despre plugin

 Plugin Content - explică structura şi conţinutul fiecărei secţiunii a fişierului manifest

 Testing - oferă scurtături pentru a lansa în execuţie plugin-ul ca o nouă instanţă de


Eclipse, în mod normal sau în mod Debug

 Exporting - conţine paşii necesari pentru a construi si exporta cu succes un plugin.

 Execution Environments - specifică cerinţele minime necesare pentru a rula plugin-ul

Pagina Dependencies

Această pagină arată dependenţele pe care plugin-ul creat le are faţă de alte plugin-uri. Trebuie să
listăm pe această pagină toate plugin-urile de care are nevoie proiectul creat pentru a se compila.
Când modificăm lista dependenţelor şi salvăm, PDE va updata automat classpath-ul proiectului.

5
Trebuie ştiut că ordinea plugin-urilor din listă este importantă deoarece dictează ordinea
încărcării claselor la execuţie.

Pagina Runtime

Această pagină arată toate pachetele pe care plugin-ul creat le expune altor plugin-uri. Putem
adăuga in listă, apăsând butonul Add, pachetele create in proiectul nostru (myPlugin şi
myPlugin.actions). Acestea vor fi vizibile altor clienţi, în funcţie de setările pe care le facem în
secţiunea Package Visibility.

Pagina Extensions

Această pagină reprezintă locul unde se pot adăuga, elimina sau modifica extensiile cu care
plugin-ul creat contribuie la platformă. Fiecare extension point vine cu o XML Schema prin care
isi specifică gramatica. Extensia creată trebuie să urmeze această gramatică pentru a fi procesată
corect. Astfel, când creem o nouă extensie, PDE extrage gramatica corespunzătoare extension
point-ului şi populează meniul contextual al fiecărui element selectat din All Extensions view, cu
o listă de elemente valide ce pot fi create.

6
De asemenea, pentru fiecare element, secţiunea Extension Element Details va fi populată cu
atributele sale valide. Atributele marcate cu asterisk sunt obligatorii. Dacă trecem cu mouse-ul
peste un atribut, va apărea o descrierea a acelui atribut. Dacă un atribut aşteaptă numele unei
clase Java ca şi valoare, atunci, dacă dăm click pe numele său, va deschide fişierul Java
corespunzător, dacă există.

Pagina Extension Points

Această pagină reprezintă locul unde putem adăuga, elimina sau edita extension points ce sunt
declarate de plugin-ul nostru. Un extension point are trei atribute:

 Extension Point Id - atribut obligatoriu a cărui valoare este un simplu nume

 Extension Point Name - atribut obligatoriu a cărui valoare este un string

 Extension Point Schema - atribut opţional a cărui valoare este o cale relativă către schema
corespunzătoare acestui extension point

Pagina Build

7
Această pagină conţine informaţii necesare pentru a compila,"impacheta" şi exporta plugin-uri.
Dacă librăriile pe care vrem să le compilăm conţin alte librării ce nu sunt listate în pagina
Runtime, le vom adăuga în secţiunea Extra Classpath Entries.

Pagina MANIFEST.MF

Conţine fişierul manifest.MF unde sunt stocate toate datele şi dependenţele plugin-ului.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyPlugin Plug-in
Bundle-SymbolicName: MyPlugin; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: myplugin.Activator
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Eclipse-LazyStart: true

Pagina plugin.xml

Dacă mergem pe tabul plugin.xml , editorul va afişa conţinutul acestui fişier care defineşte
aspectele de extensie ale plug-in-ului.

<?xml version="1.0" encoding="UTF-8"?>


<?eclipse version="3.2"?>
<plugin>
<extension
point="org.eclipse.ui.actionSets">
<actionSet
label="Sample Action Set"
visible="true"
id="MyPlugin.actionSet">
<menu
label="Sample &Menu"
id="sampleMenu">
<separator
name="sampleGroup">
</separator>
</menu>
<action
label="&Sample Action"
icon="icons/sample.gif"
class="myplugin.actions.SampleAction"
tooltip="Hello, Eclipse world"
menubarPath="sampleMenu/sampleGroup"
toolbarPath="sampleGroup"
id="myplugin.actions.SampleAction">
</action>
</actionSet>
</extension>
</plugin>

8
Pagina build.properties

Această pagină conţine toate informaţiile necesare pentru a compila plugin-ul.

source.. = src/
output.. = bin/
bin.includes = plugin.xml,\
META-INF/,\
.,\
icons/

PDE validează fişierele manifest.mf şi plugin.xml pentru erori semantice şi lista cu aceste
probleme este listată în tab-ul plug-in al paginii cu preferinţe Plug-in Develpment-Compilers.

Pentru fiecare problemă putem alege nivelul: Error, Warning sau Ignore. Totuşi, pentru ca PDE
să detecteze aceste probleme, trebuie ca extension points-urile pe care le folosim să aibă o
schemă validă asociată.

9
Clasele plug-in-ului
Observam ca plug-in-ul creat conţine 2 clase: MyPlugin.java si SampleAction.java. Clasa
MyPlugin.java extinde clasa AbstractUIPlugin şi pe lângă constructor conţine două metode
importante:

public void start(BundleContext context) throws Exception


{
super.start(context);
}

şi

public void stop(BundleContext context) throws Exception


{
super.stop(context);
plugin = null;
}

Prima metodă este chemată cînd se activează plug-in-ul si ce-a de-a doua, metoda stop, când
plug-in-ul este oprit. Clasa SampleAction.java reprezintă acţiunile pe care le va face plug-in-ul
nostru. El va crea o nouă opţiune in meniul Eclipse, care va conţine un simplu item ce va afişa
"Hello World". Acţiunea care va face acest lucru este:

public void run(IAction action)


{
MessageDialog.openInformation(window.getShell(),"MyPlugin Plug-
in","Hello, Eclipse world");
}

Testarea plugin-ului creat


Pentru a testa proiectul , trebuie să-l rulăm ca un Run-time Workbench.O nouă instanţă de
Eclipse va fi pornită si plug-in-ul creat este gata să fie folosit în această instanţă. Această instanţă
conţine plug.-in-ul “Hello World” şi contribuţia la toolbar a plug-in-ului.Pentru a-l rula direct
vom deschide editorul MANIFEST şi vom observa că pe pagina de Overview avem un link
"Launch an Eclipse Application".Observăm ca dacă apăsăm acest link se va deschide o noua
instantă a Eclipse-ului care va arata ca mai jos:

10
Pentru a vedea că plug-in-ul funcţionează corect, putem merge in meniu “Help-Eclipse-Plug-in
Details” .Aici va apărea o lista cu toate plug-in-urile , unde ar trebui să se regăsească si plug-in-
ul creat la pasul anterior.

Exportarea plugin-ului
Odată ce am ajuns în stadiul să fim satisfăcuţi de codul scris, trebuie sa-l publicăm intr-o formă
potrivită pentru depanarea într-un produs Eclipse.

Cel mai uşor mod de a face acest lucru este prin wizardul Export Plug-ins and Fragments din
meniul File-Export. Vom selecta aici plugin-urile si fragmentele pe care vrem să le exportăm.
Destinaţia exportării poate fi o arhivă sau un director.Formatul recomandat este o arhiva JAR.

11
Concluzii
Eclipse este o platformă de dezvoltare pentru programatorii Java, şi nu numai, cu un model bazat
pe plugin-uri bine proiectat. După cum am văzut în acest articol, este foarte uşor să imbunătăţim
codul deja existent, să dezvoltăm noi plugin-uri care pot fi la rândul lor extinse.

12

S-ar putea să vă placă și