Använda Sling-adaptrar

🔗 Slingerbjuder ett adaptermönster för att enkelt översätta objekt som implementerar det 🔗 adapterbara gränssnittet. 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);

Användningsexempel

Det finns följande användningsområden:

  • Få implementeringsspecifika objekt.

    En JCR-baserad implementering av det generiska Resource-gränssnittet ger till exempel åtkomst till den underliggande JCR Node.

  • Skapa genvägar för objekt som kräver att interna kontextobjekt skickas.

    Den JCR-baserade ResourceResolver innehåller till exempel en referens till förfrågningens JCR Session, som i sin tur behövs för många objekt som ska fungera baserat på den begärandesessionen, till exempel PageManager eller UserManager.

  • Genväg till tjänster.

    Ett sällsynt fall - sling.getService() är också enkelt.

Null-returvärde

adaptTo() kan returnera null.

Det finns olika orsaker till detta, bland annat:

  • implementeringen saknar stöd för måltypen
  • en adapterfabrik som hanterar det här ärendet är inte aktivt (t.ex. på grund av saknad tjänstreferens)
  • internt villkor misslyckades
  • tjänsten är inte tillgänglig

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.

Cachelagring

För att förbättra prestanda kan implementeringar cachelagra objektet som returneras från ett obj.adaptTo()-anrop. Om obj är samma är det returnerade objektet detsamma.

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 i AdapterFactory, att objekt kan återanvändas i det här scenariot.

Så här fungerar det

Det finns olika sätt att implementera Adaptable.adaptTo():

  • själva objektet, implementera själva metoden och mappa till vissa objekt.

  • Med ett AdapterFactory, som kan mappa godtyckliga objekt.

    Objekten måste fortfarande implementera gränssnittet Adaptable och måste utöka SlingAdaptable (som skickar anropet adaptTo till en central adapterhanterare).

    Detta tillåter kopplingar till adaptTo-mekanismen för befintliga klasser, som Resource.

  • En kombination av båda.

I det första fallet kan javadocs ange vad adaptTo-targets är möjligt. Detta är dock ofta inte möjligt för vissa underklasser, t.ex. JCR-baserade resurser. I det senare fallet är implementeringar av AdapterFactory vanligtvis en del av de privata klasserna i ett paket och exponeras därför inte i ett klient-API och inte heller listas i javadocs. Teoretiskt sett skulle det vara möjligt att komma åt alla AdapterFactory-implementeringar från OSGi-tjänstmiljön och titta på deras"adaptable" (sources and target)-konfigurationer, men inte att mappa dem till varandra. I slutändan beror detta på den interna logiken, som måste dokumenteras. Denna referens.

Referens

Sling

🔗 Resurserna anpassas 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) med
ResourceUtil.getValueMap(Resource) (hanterar null-skiftläge etc.).
ArvValueMap Utökning av ValueMap som gör att hierarkin med resurser kan beaktas när egenskaper söks.
ModiitableValueMap Ett tillägg till 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.
Webbadress 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).
Arkiv 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.






StringBooleanLongDoubleCalendarValueString[]
Boolean[]
Long[]
Calendar[]
Value[]
Returnerar värdet/värdena om detta är en JCR-egenskapsbaserad resurs (och värdet passar).
EtiketteradResurs Om detta är en JCR-nodbaserad resurs.
Sidan 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.

🔗 ResourceResolveradapts 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 extern generering av absoluta URL:er, även med det begärda objektet.

🔗 SlingHttpServletRequestadapts 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.

WCM

🔗 Sidorna anpassas till:

Resurs
Sidans resurs.
EtiketteradResurs Etiketterad resurs (== this).
Nod Sidans nod.
... Allt som sidans resurs kan anpassas till.

🔗 Komponenterna anpassas till:

Resurs Komponentens resurs.
EtiketteradResurs Etiketterad resurs (== this).
Nod Komponentens nod.
Allt som komponentens resurs kan anpassas till.

🔗 Mallar 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.

Dokumentskydd

Authorizable, ​Userand ​Groupes customize to:

Nod Returnerar hemnoden för användaren/gruppen.
ReplicationStatus Returnerar replikeringsstatusen för användarens/gruppens hemnod.

DAM

​Tillgångar anpassas till:

Resurs Resurs för tillgången.
Nod Nod för resursen.
Allt som resursen kan anpassas till.

Taggar

​Taggar anpassar sig till:

Resurs Resurs för taggen.
Nod Taggens nod.
Allt som taggens resurs kan anpassas till.

Annan

Dessutom innehåller Sling/JCR/OCM också [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) för anpassade OCM-objekt (Objektinnehållsmappning).

På denna sida