Käsittelytoimintojen laajennuspiste on Eclipse 3.0 -ympäristössä kehitetyn kokeellisen handlerSubmission
-elementin parannus. Käsittelytoiminto on komennon toimintaa tiettynä hetkenä ohjaava toiminto. Komentoon voi liittää useita käsittelytoimintoja tai ei yhtään käsittelytoimintoa. Komennolla voi olla kerrallaan joko yksi aktiivinen käsittelytoiminto tai ei yhtään aktiivista käsittelytoimintoa. Aktiivinen käsittelytoiminto on komennon toimintaa ohjaava käsittelytoiminto. Tämä tekniikka on samankaltainen kuin toimintojen käsittelytoiminnot ja uudelleen kohdennettavat toiminnot.
Käsittelytoimintojen laajennuspisteen avulla lisäosan kehittäjä voi määrittää käsittelytoiminnon, joka aktivoidaan ja/tai otetaan käyttöön tiettyjen ehtojen täyttyessä. Komennot eivät anna toimintansa ohjausvaltuuksia käsittelytoiminnoille, joita ei ole aktivoitu. Jos käsittelytoiminto on poistettu käytöstä, sille ei lähetetä suorituspyyntöjä, koska sen suoritus on estetty. Käyttöehdot määritetään versioon 3.0 lisätyn lausekielitoiminnon avulla. Ehdot muodostetaan activeWhen
- ja enabledWhen
-lauseista.
Työympäristössä on joitakin muuttujia, joita nämä lausekkeet voivat käsitellä. Tuetut muuttujat ovat aktiiviset kontekstit, aktiivinen muokkausohjelma, aktiivinen osa ja nykyinen valinta. Tämä perusversio ei tue muita muuttujia, mutta niiden tai jopa lisäosien kehittäjien kehittämien muuttujien lisääminen on helppoa.
Oletuskäsittelytoiminto on käsittelytoiminto, jolle ei ole määritetty ehtoja. Oletuskäsittelytoiminto aktivoidaan vain, jos minkään muun käsittelytoiminnon ehdot eivät täyty. Jos käsittelytoimintoja, joiden ehdot täyttyvät, on useita, ehtoja verrataan keskenään. Käsittelytoiminnoista valitaan se, jonka ehdot ovat muita tarkempia tai paikallisempia. Tässä vertailussa tutkitaan ehtojen muuttujia. Käsittelytoiminnoista valitaan se, jonka ehdon muuttuja on määritetty tarkimmin. Määritystarkkuuksien keskinäinen järjestys (vähiten tarkimmasta tarkimpaan) on määritetty org.eclipse.ui.ISources
-osassa.
Jos tämä ei ratkaise ristiriitaa, mitään käsittelytoimintoa ei aktivoida. Tähän tapahtumaan liittyvä sanoma kirjataan lokiin, jos asianmukainen jäljitysvalinta on käytössä. Ristiriitatilanteen saattaa aiheuttaa myös se, että oletuskäsittelytoimintoa on useampi kuin yksi. Tällaisen tilanteen estäminen on lisäosien kehittäjien ja integrointitestaajien vastuulla. Näiden ehtojen avulla pyritään estämään lisäosien tarpeeton lataus. Nämä käsittelytoimintomääritykset on sisällytetty välityselementtiin. Välityselementti lataa siihen sisältyvän käsittelytoiminnon, kun seuraavat kaksi tapahtumaa ovat ilmenneet: välityselementti on aktivoitunut sen ehtojen täyttyessä ja komento on vastaanottanut pyynnön, jonka toteutuksen ohjaus on välitettävä jollekin toiminnolle (esimerkiksi suoritus execute()-komennolla).
<!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
helpContextId CDATA #IMPLIED>
Tähän tiettyyn käsittelytoimintoon liittyvän ohjekontekstin tunnus. Vaikka komento voi antaa yleisen kuvauksen komennon toiminnasta, on joskus parempi, että käsittelytoiminto antaa toteutukseen tarkemmin liittyvät ohjeet.
Alkaen versiosta 3.2
<!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)>
<!ATTLIST class
class CDATA #IMPLIED>
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name CDATA #REQUIRED
value CDATA #REQUIRED>
<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Yleinen juurielementti. Elementtiä voi käyttää laajennuspisteen sisällä määrittämään sen käyttöönottolausekkeen. Käyttöönottolausekkeen aliobjektit yhdistetään AND-operaattorin avulla.
<!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>
Tämä elementti edustaa NOT-operaatiota sen alielementin lausekkeen tuloksen arvioinnissa.
<!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Tämä elementti edustaa AND-operaatiota sen kaikkien alielementtien lausekkeiden tuloksen arvioinnissa.
<!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Tämä elementti edustaa OR-operaatiota sen kaikkien alielementtilausekkeiden tuloksen arvioinnissa.
<!ELEMENT instanceof EMPTY>
<!ATTLIST instanceof
value CDATA #REQUIRED>
Tätä elementtiä käytetään toteuttamaan kohteena olevan objektin ilmentymätarkistus. Lauseke palauttaa arvon EvaluationResult.TRUE, jos objektin laji on määritteen arvossa määritetyn lajin alilaji. Muussa tapauksessa palautuu arvo EvaluationResult.FALSE.
<!ELEMENT test EMPTY>
<!ATTLIST test
property CDATA #REQUIRED
args CDATA #IMPLIED
value CDATA #IMPLIED>
Tämän elementin avulla arvioidaan kohteena olevan objektin ominaisuustila. Testattavissa olevien ominaisuuksien joukkoa voi laajentaa käyttämällä ominaisuuksien testauksen laajennuspistettä. Testauslauseke palauttaa arvon EvaluationResult.NOT_LOADED, jos varsinaisen testauksen toteuttavaa ominaisuuksien testausta ei ole vielä ladattu.
<!ELEMENT systemTest EMPTY>
<!ATTLIST systemTest
property CDATA #REQUIRED
value CDATA #REQUIRED>
Testaa järjestelmän ominaisuutta kutsumalla metodia System.getProperty ja vertaa tulosta arvoon, joka on määritetty arvomääritteen avulla.
<!ELEMENT equals EMPTY>
<!ATTLIST equals
value CDATA #REQUIRED>
Tätä elementtiä käytetään toteuttamaan kohteena olevan objektin yhtäsuuruustarkistus. Lauseke palauttaa arvon EvaluationResult.TRUE, jos objektin arvo on yhtä suuri kuin määritteen arvon antama arvo. Muussa tapauksessa palautuu arvo EvaluationResult.FALSE.
<!ELEMENT count EMPTY>
<!ATTLIST count
value CDATA #REQUIRED>
Tämän elementin avulla testataan kokoelman elementtien määrä.
<!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST with
variable CDATA #REQUIRED>
Tämä elementti muuttaa tarkasteltavan objektin kaikkien sen aliobjektien osalta annetun muuttujan viittaamaksi objektiksi. Jos muuttujan selvitys ei onnistu, lauseke aiheuttaa poikkeuksen ExpressionException, kun sitä arvioidaan. WITH-lausekkeen aliobjektit yhdistetään AND-operaattorin avulla.
<!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST resolve
variable CDATA #REQUIRED
args CDATA #IMPLIED>
Tämä elementti muuttaa tarkasteltavan objektin kaikkien sen aliobjektien osalta annetun muuttujan viittaamaksi objektiksi. Jos muuttujan selvitys ei onnistu, lauseke aiheuttaa poikkeuksen ExpressionException, kun sitä arvioidaan. WITH-lausekkeen aliobjektit yhdistetään AND-operaattorin avulla.
<!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST adapt
type CDATA #REQUIRED>
Tämän elementin avulla mukautetaan kohteena oleva objekti määritelajin määrittämään lajiin. Lauseke palauttaa arvon "ei ladattu", jos sovitinta tai viitattua lajia ei ole vielä ladattu. Se aiheuttaa poikkeuksen ExpressionException arvioinnin aikana, jos lajin nimeä ei ole lainkaan. Mukautuslausekkeen aliobjektit yhdistetään AND-operaattorin avulla.
<!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST iterate
operator (or|and) >
Tämän elementin avulla iteroidaan muuttuja, joka on lajia java.util.Collection. Jos kohteena oleva objekti ei ole lajia java.util.Collection, ilmenee poikkeus ExpressionException arvioitaessa lauseketta.
<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>
Lisäosien turhan latauksen välttämiseksi voidaan määrittää, milloin käsittelytoiminto otetaan käyttöön. Jos valityselementti ei ole vielä ladannut käsittelytoimintoa, käsittelytoiminnon käyttöönottopäätös tehdään vain lausekkeen syntaksin perusteella. Jos käsittelytoiminto on ladattu, ensin arvioidaan lausekkeen syntaksi. Jos tulos on true (tosi), käsittelytoiminnolle lähetetään kysely sen käyttöönottotilasta. (Tämä johtuu lausekkeen syntaksin ja käsittelytoiminnon käyttöönottotilan välisestä Boolen and-toiminnosta.)
<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>
Kaikki käsittelytoiminnot käyttävät toteutusta org.eclipse.core.commands.IHandler
. Käsittelytoimintoja voi aktivoida ja passivoida työympäristössä org.eclipse.ui.handlers.IHandlerService
-liittymän avulla. Tämän liittymän voi noutaa työympäristön tukiobjekteista, kuten IWorkbench
-objektista. Palvelun noutopyyntö tehdään kutsun IWorkbench.getAdapter(IHandlerService.class)
tapaisilla kutsuilla.
Käsittelytoimintoja voi aktivoida ja passivoida myös työympäristön aiempien versioiden koodilla. Tämän voi tehdä seuraavassa kuvatulla aiempien versioiden mekanismilla. Tämä mekanismi on hyödyllinen niille, jotka lisäävät valikko- tai työkalurivimuokkauksia toimintojen avulla.
IWorkbenchPartSite mySite; IAction myAction; myAction.setActionDefinitionId(commandId); IKeyBindingService service = mySite.getKeyBindingService(); service.registerAction(myAction);
Copyright (c) 2005 IBM Corporation and others.
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html