Sling erbjuder Adaptermönster att enkelt översätta objekt som implementerar Adaptiv gränssnitt. Det här gränssnittet innehåller en allmän customiTo() metod som översätter objektet till den klasstyp som skickas som argument.
Om du till exempel vill översätta ett Resource-objekt till motsvarande Node-objekt kan du bara göra följande:
Node node = resource.adaptTo(Node.class);
Det finns följande användningsområden:
Få implementeringsspecifika objekt.
En JCR-baserad implementering av den generiska Resource
-gränssnittet ger åtkomst till underliggande JCR Node
.
Skapa genvägar för objekt som kräver att interna kontextobjekt skickas.
Till exempel den JCR-baserade ResourceResolver
innehåller en referens till begäran JCR Session
som i sin tur behövs för många objekt som ska fungera baserat på den begärandesessionen, som PageManager
eller UserManager
.
Genväg till tjänster.
Ett sällsynt fall - sling.getService()
är också enkelt.
adaptTo()
kan returnera null.
Det finns olika orsaker till detta, bland annat:
Det är viktigt att du hanterar skiftläget null på ett smidigt sätt. Vid jsp-återgivning kan det vara acceptabelt att jsp misslyckas om det resulterar i en tom del av innehållet.
För att förbättra prestanda kan implementeringar cachelagra objektet som returneras från en obj.adaptTo()
ring. Om obj
är samma, returnerade objekt är samma.
Denna cachelagring utförs för alla AdapterFactory
baserade fall.
Det finns dock ingen allmän regel - objektet kan vara antingen en ny eller en befintlig instans. Det innebär att du inte kan förlita dig på något av beteendena. Därför är det viktigt, särskilt inom AdapterFactory
att objekt kan återanvändas i det här scenariot.
Det finns olika sätt att Adaptable.adaptTo()
kan implementeras:
själva objektet, implementera själva metoden och mappa till vissa objekt.
Av en AdapterFactory
, som kan mappa godtyckliga objekt.
Objekten måste fortfarande implementera Adaptable
gränssnitt och måste utöka SlingAdaptable
(som klarar adaptTo
till en central adapterhanterare).
Det gör att du kan lägga in kopplingar i adaptTo
mekanism för befintliga klasser, som Resource
.
En kombination av båda.
I det första fallet kan javadocs visa vad adaptTo-targets
är möjliga. Detta är dock ofta inte möjligt för vissa underklasser, t.ex. JCR-baserade resurser. I det senare fallet ska AdapterFactory
är vanligtvis en del av de privata klasserna i ett paket och därför inte exponeras i ett klient-API, och inte heller listas i javadocs. Teoretiskt sett skulle det vara möjligt att få tillgång till alla AdapterFactory
implementeringar från OSGi runtime-modulen för tjänster och se hur deras"adaptable"-konfigurationer (källor och mål) ser ut, men inte för att mappa dem till varandra. I slutändan beror detta på den interna logiken, som måste dokumenteras. Denna referens.
Resurs anpassar sig till:
Nod | Om detta är en JCR-nodbaserad resurs eller en JCR-egenskap som refererar till en nod. |
Egenskap | Om detta är en JCR-egenskapsbaserad resurs. |
Objekt | Om detta är en JCR-baserad resurs (nod eller egenskap). |
Karta | Returnerar en karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller annan resurs som stöder värdekartor). |
ValueMap | Returnerar en användbar karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller annan resurs som stöder värdekartor). Kan också uppnås (enklare) genom att användaResourceUtil.getValueMap(Resource) (hanterar gemener, etc.). |
ArvValueMap | Utökning av ValueMap som gör det möjligt att ta hänsyn till resurshierarkin när du söker efter egenskaper. |
ModiitableValueMap | En förlängning av ValueMap, som gör att du kan ändra egenskaper på den noden. |
InputStream | Returnerar det binära innehållet i en filresurs (om detta är en JCR-nodbaserad resurs och nodtypen är nt:file eller nt:resource ; om detta är en paketresurs, filinnehåll om det är en filsystemresurs) eller data för en binär JCR-egenskapsresurs. |
URL | Returnerar en URL till resursen (databas-URL för den här noden om detta är en JCR-nodbaserad resurs; jar bundle URL om detta är en paketresurs, fil-URL om detta är en filsystemresurs). |
Fil | Om detta är en filsystemresurs. |
SlingScript | Om den här resursen är ett skript (t.ex. jsp-fil) för vilket en skriptmotor är registrerad med sling. |
Servlet | Om den här resursen är ett skript (t.ex. jsp-fil) för vilket en skriptmotor är registrerad med sling eller om det här är en serverresurs. |
Sträng Boolean Lång Dubbel Kalender Värde Sträng[] Boolean[] Long[] Kalender[] Värde[] |
Returnerar värdet/värdena om detta är en JCR-egenskapsbaserad resurs (och värdet passar). |
EtiketteradResurs | Om detta är en JCR-nodbaserad resurs. |
Sida | Om detta är en JCR-nodbaserad resurs och noden är en cq:Page (eller cq:PseudoPage ). |
Komponent | Om detta är en cq:Component nodresurs. |
Design | Om detta är en designnod (cq:Page ). |
Mall | Om detta är en cq:Template nodresurs. |
Blueprint | Om detta är en cq:Template nodresurs. |
Tillgång | Om detta är en resurs för dam:Asset-noden. |
Återgivning | Om det här är en dam:Asset-rendering (not:file under renderingsmappen för en dam:Assert) |
Tagg | Om detta är en cq:Tag nodresurs. |
UserManager | Baserat på JCR-sessionen om detta är en JCR-baserad resurs och användaren har behörighet att komma åt UserManager. |
Auktoriserbar | Authorizable är det gemensamma grundgränssnittet för Användare och Grupp. |
Användare | Användaren är en särskild auktoriseringsfunktion som kan autentiseras och personifieras. |
SimpleSearch | Söker under resursen (eller använder setSearchIn()) om detta är en JCR-baserad resurs. |
WorkflowStatus | Arbetsflödesstatus för den angivna sidans/arbetsflödets nyttolastnod. |
ReplicationStatus | Replikeringsstatus för den angivna resursen eller dess jcr:content-undernod (markerad först). |
KopplingResurs | Returnerar en anpassad anslutningsresurs för vissa typer, om detta är en JCR-nodbaserad resurs. |
Konfig | Om detta är en cq:ContentSyncConfig nodresurs. |
ConfigEntry | Om detta är under en cq:ContentSyncConfig nodresurs. |
ResursResolver anpassar sig till:
Session | JCR-sessionen för begäran, om det här är en JCR-baserad resurslösare (standard). |
PageManager | |
ComponentManager | |
Designer | |
AssetManager | Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare. |
TagManager | Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare. |
UserManager | UserManager ger åtkomst till och möjlighet att underhålla auktoriserbara objekt, dvs. användare och grupper. UserManager är bundet till en viss session. |
Auktoriserbar | Den aktuella användaren. |
Användare |
Den aktuella användaren. |
QueryBuilder | |
Externalizer | För att göra absoluta URL:er externaliserade, även med objektet request. |
SlingHttpServletRequest anpassar sig till:
Inga mål ännu, men implementerar Adaptable och kan användas som källa i en anpassad AdapterFactory.
SlingHttpServletResponse anpassar sig till:
ContentHandler (XML) |
Om det här är ett svarsalternativ. |
Sida anpassar sig till:
Resurs |
Sidans resurs. |
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Sidans nod. |
... | Allt som sidans resurs kan anpassas till. |
Komponent anpassar sig till:
Resurs | Komponentens resurs. |
---|---|
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Komponentens nod. |
… | Allt som komponentens resurs kan anpassas till. |
Mall anpassar sig till:
Resurs |
Mallens resurs. |
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Nod för den här mallen. |
... | Allt som mallens resurs kan anpassas till. |
Auktoriserbar, Användare och Grupp anpassa till:
Nod | Returnerar hemnoden för användaren/gruppen. |
---|---|
ReplicationStatus | Returnerar replikeringsstatusen för användarens/gruppens hemnod. |
Tillgång anpassar sig till:
Resurs | Resurs för tillgången. |
---|---|
Nod | Nod för resursen. |
… | Allt som resursen kan anpassas till. |
Tagg anpassar sig till:
Resurs | Resurs för taggen. |
---|---|
Nod | Taggens nod. |
… | Allt som taggens resurs kan anpassas till. |
Dessutom ger Sling/JCR/OCM [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
för anpassad OCM (Mappning av objektinnehåll).