Kezelők

org.eclipse.ui.handlers

3.1

A handlers kiterjesztési pont az Eclipse 3.0 változatában meghatározott kísérleti handlerSubmission elem feldolgozása. A kezelő egy parancs viselkedése egy adott időpontban. Egy parancsnak nulla vagy több hozzá tartozó kezelője lehet. Azonban egy adott időpontban egy parancsnak vagy nincs aktív kezelője, vagy egyetlen aktív kezelője van. Az az aktív kezelő, amely pillanatnyilag felelős a parancs viselkedésének biztosításáért. Ez nagyon hasonló egy műveletkezelő és egy áttervezhető művelet alapelvéhez.

A handlers kiterjesztési pont lehetővé teszi egy bedolgozófejlesztő számára egy olyan kezelő megadását, amelynek aktívvá és/vagy engedélyezetté kell válnia bizonyos feltételek esetén. Ha egy kezelő inaktív, akkor egy parancs sem fogja delegálni a viselkedését a kezelőhoz. Ha egy kezelő tiltott, akkor a kezelő nem fog végrehajtásra kerülni, mert a kezelő végrehajtása letiltásra kerül. A feltételek a 3.0 változatban felvett kifejezésekkel kapcsolatos nyelvi szolgáltatás használatával adhatók meg. Az activeWhen és enabledWhen záradékokkal kerülnek kifejezésre.

A munkaterület biztosít néhány változót, amelyekre ezen kifejezések támaszkodhatnak. A támogatott változók a következők: az aktív környezetek, az aktív szerkesztő, az aktív rész és az aktuális kijelölés. Bár ebben a kezdeti tervben nem támogatott, egyszerűen megérthető, hogy hogyan lehetne más változót felvenni vagy akár a bedolgozófejlesztők számára más változók hozzáadását engedélyezni.

Az olyan kezelő alapértelmezett kezelő, amely nem határoz meg feltételeket. Egy alapértelmezett kezelő csak akkor aktív, ha a többi kezelő összes feltétele nincs kielégítve. Ha két kezelőnek is van kielégített feltétele, akkor a kezelők összehasonlításra kerülnek. Az ötlet azon kezelő kiválasztása, amely feltétele specifikusabb vagy jobban vonatkozik a helyre. Ehhez a feltétel által hivatkozott változók kikeresésre kerülnek. A legspecifikusabb változóra hivatkozó feltétel "nyer". A specifikusság sorrendje (a legkevésbé specifikustól a legspecifikusabbig) az org.eclipse.ui.ISources elemben van meghatározva.

Ha ez sem oldja fel az ütközést, akkor egyik kezelő sem lesz aktív. Ha egy adott nyomkövetési beállítás be van kapcsolva, akkor ez az eset megjelenik üzenetként a naplóban. Ütközés akkor is előfordulhat, ha két alapértelmezett kezelő van. A bedolgozófejlesztők és az integrációtesztelők felelőssége annak biztosítása, hogy ez nem történjen meg. Ezen feltételek a szükségtelen bedolgozóbetöltések elkerülésére használhatók. Ezen kezelőmeghatározások egy proxyban találhatók. Ahhoz, hogy egy proxy betöltse az alapul szolgáló kezelőjét, két dolognak kell megtörténnie: a proxy feltételeinek kielégítettnek kell lenniük, hogy az aktívvá váljon, és a parancsot meg kell kérni, hogy tegyen valamit, amit delegálnia kell (pl.: execute()).

<!ELEMENT extension (handler)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT handler (activeWhen? | class? | enabledWhen?)>

<!ATTLIST handler

commandId CDATA #REQUIRED

class     CDATA #IMPLIED>


<!ELEMENT activeWhen (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>



<!ELEMENT enabledWhen (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>



<!ELEMENT class (parameter)>

<!ATTLIST class

class CDATA #IMPLIED>


<!ELEMENT parameter EMPTY>

<!ATTLIST parameter

name  CDATA #REQUIRED

value CDATA #REQUIRED>


<extension point=

"org.eclipse.ui.handlers"

>

<handler commandId=

"commandId"

class=

"org.eclipse.compare.Command"

>

<activeWhen>

<with variable=

"selection"

>

<count value=

"1"

/>

<iterate operator=

"and"

>

<adapt type=

"IResource"

/>

</iterate>

</with>

</activeWhen>

</handler>

</extension>

A bedolgozóbetöltés elkerüléséhez, azt is meg lehet, hogy a kezelő mikor legyen engedélyezett. Ha a proxy még nem töltötte be a kezelőt, akkor csak a kifejezések szintaxisa kerül felhasználásra annak eldöntésére, hogy a kezelő engedélyezett-e. Ha a proxy betöltötte a kezelőt, akkor a kifejezések szintaxisa kerül először ellenőrzésre. Ha a kifejezések szintaxisa true értéket ad, akkor a kezelőt kérdezi meg a rendszer arról, hogy engedélyezett-e. (Ez egy "és" logikai rövidzár művelet a kifejezések szintaxisa és a kezelő engedélyezett állapota között.)

<extension point=

"org.eclipse.ui.handlers"

>

<handler commandId=

"commandId"

class=

"org.eclipse.Handler"

>

<enabledWhen>

<with variable=

"context"

>

<property id=

"id"

value=

"debugging"

/>

</with>

</enabledWhen>

</handler>

</extension>

Az összes kezelő az org.eclipse.core.commands.IHandler felületet valósítja meg. A munkaterületen aktiválhatók és leállíthatók a kezelők az org.eclipse.ui.handlers.IHandlerService felület használatával. Ez a felület az olyan támogató munkaterület-objektumokból kérhető le, mint maga az IWorkbench. A szolgáltatás lekéréséhez egy olyan hívást kell elvégeznie, mint az IWorkbench.getAdapter(IHandlerService.class).

A kezelők aktiválása és leállítása a munkaterületen az örökölt kód használatával is lehetséges. Ez az alább bemutatásra kerülő öröklési mechanizmuson keresztül végezhető el. Ez a mechanizmus azon ügyfelek számára hasznos, akik műveleteket használnak a menükhöz vagy eszköztárakhoz hozzáadásra.

 IWorkbenchPartSite mySite;
 IAction myAction;
 
 myAction.setActionDefinitionId(commandId);
 IKeyBindingService service = mySite.getKeyBindingService();
 service.registerAction(myAction);