Show Menu
ARGOMENTI×

Utilizzo di adattatori Sling

Sling offre un pattern adapters.html Adapter per tradurre facilmente gli oggetti che implementano l'interfaccia Adattabile . Questa interfaccia fornisce un metodo adaptTo() generico che converte l'oggetto nel tipo di classe passato come argomento.
Ad esempio, per tradurre un oggetto Resource in un oggetto Node corrispondente, è sufficiente eseguire le operazioni seguenti:
Node node = resource.adaptTo(Node.class);

Use Cases

Esistono i seguenti casi di utilizzo:
  • Ottenete oggetti specifici per l'implementazione.
    Ad esempio, un'implementazione JCR dell' Resource interfaccia generica fornisce l'accesso al JCR sottostante Node .
  • Creazione di collegamenti per oggetti che richiedono il passaggio di oggetti contestuali interni.
    Ad esempio, il codice JCR ResourceResolver contiene un riferimento a quello della richiesta JCR Session , che a sua volta è necessario per molti oggetti che funzioneranno in base alla sessione di richiesta, come il PageManager o UserManager .
  • Collegamento ai servizi.
    Un caso raro - sling.getService() è anche semplice.

Valore restituito Null

adaptTo() può restituire null.
I motivi di tale scelta sono diversi, tra cui:
  • l'implementazione non supporta il tipo di destinazione
  • un gestore di schede che gestisce questo caso non è attivo (ad esempio a causa di riferimenti di servizio mancanti)
  • condizione interna non riuscita
  • il servizio non è disponibile
È importante gestire il caso nullo in modo corretto. Per i rendering jsp potrebbe essere accettabile che il jsp non riesca se si traduce in una parte vuota del contenuto.

Caching

Per migliorare le prestazioni, le implementazioni possono memorizzare nella cache l’oggetto restituito da una obj.adaptTo() chiamata. Se obj è lo stesso, l'oggetto restituito è lo stesso.
Questa memorizzazione nella cache viene eseguita per tutti i casi AdapterFactory basati.
Tuttavia, non esiste una regola generale: l'oggetto potrebbe essere una nuova istanza o una esistente. Ciò significa che non potete fare affidamento su entrambi i comportamenti. È quindi importante, soprattutto all'interno AdapterFactory , che gli oggetti siano riutilizzabili in questo scenario.

Come funziona

Esistono diversi modi per Adaptable.adaptTo() implementarlo:
  • dall'oggetto stesso; implementazione del metodo stesso e mappatura a determinati oggetti.
  • Mediante un AdapterFactory , che può mappare oggetti arbitrari.
    Gli oggetti devono comunque implementare l' Adaptable interfaccia e devono estendersi SlingAdaptable (che trasmette la adaptTo chiamata a un gestore di adattatori centrale).
    Questo consente di inserire i ganci nel adaptTo meccanismo per le classi esistenti, ad esempio Resource .
  • Una combinazione di entrambi.
Per il primo caso, i javadocs possono specificare quali adaptTo-targets sono possibili. Tuttavia, per sottoclassi specifiche come la risorsa basata su JCR, spesso ciò non è possibile. In quest'ultimo caso, le implementazioni di AdapterFactory sono in genere parte delle classi private di un bundle e quindi non sono esposte in un'API client, né sono elencate in javadocs. In teoria, sarebbe possibile accedere a tutte AdapterFactory le implementazioni dal runtime di servizio OSGi e vedere le loro configurazioni "adaptables" (origini e destinazioni), ma non mapparle l'una sull'altra. Alla fine, questo dipende dalla logica interna, che deve essere documentata. Di qui il riferimento.

Riferimento

Sling

La risorsa si adatta a:
Node Se si tratta di una risorsa basata su nodo JCR o di una proprietà JCR che fa riferimento a un nodo.
Proprietà Se si tratta di una risorsa basata su proprietà JCR.
Elemento Se si tratta di una risorsa basata su JCR (nodo o proprietà).
Mappa Restituisce una mappa delle proprietà, se si tratta di una risorsa basata su nodo JCR (o di altre mappe dei valori di supporto delle risorse).
ValueMap Restituisce una mappa pratica delle proprietà, se si tratta di una risorsa basata su nodo JCR (o di altre mappe di valore di supporto delle risorse). Può anche essere ottenuto (più semplicemente) utilizzando (gestisce lettere maiuscole e minuscole, ecc.) ResourceUtil.getValueMap(Resource) .
EreditanceValueMap Estensione di ValueMap che consente di tenere conto della gerarchia delle risorse nella ricerca delle proprietà.
ModificabileValueMap Un'estensione di ValueMap , che consente di modificare le proprietà di tale nodo.
InputStream Restituisce il contenuto binario di una risorsa file (se si tratta di una risorsa basata su nodo JCR e il tipo di nodo è nt:file o nt:resource ; se si tratta di una risorsa bundle; il contenuto del file, se si tratta di una risorsa del file system) o i dati di una risorsa di proprietà JCR binaria.
URL Restituisce un URL alla risorsa (URL del repository di questo nodo, se si tratta di una risorsa basata su nodo JCR); URL bundle Jar se si tratta di una risorsa bundle; URL del file (se si tratta di una risorsa del file system).
File Se si tratta di una risorsa del file system.
SlingScript Se la risorsa è uno script (ad esempio, un file jsp) per il quale un motore di script è registrato con sling.
Servlet Se la risorsa è uno script (ad esempio, un file jsp) per il quale un motore di script è registrato con sling o se si tratta di una risorsa servlet.
Stringa booleana lunga doppia calendario Value.htmlString.htmlBoolean.htmlLong.htmlCalendar.htmlValoreString[]Boolean[]Long[]CalendarCalendar[]Value[] Restituisce i valori se si tratta di una risorsa basata su proprietà JCR (e il valore corrisponde).
LabeledResource Se si tratta di una risorsa basata su nodo JCR.
Pagina Se si tratta di una risorsa basata su nodo JCR e il nodo è un cq:Page (o cq:PseudoPage ).
Componente Se si tratta di una risorsa cq:Component nodo.
Progettazione Se si tratta di un nodo di progettazione ( cq:Page ).
Modello Se si tratta di una risorsa cq:Template nodo.
Blueprint Se si tratta di una risorsa cq:Template nodo.
Risorsa Se si tratta di una risorsa nodo dam:Asset.
Rendering Se si tratta di una rappresentazione dam:Asset (nt:file sotto la cartella di rappresentazione di una dam:Assert)
Tag Se si tratta di una risorsa cq:Tag nodo.
UserManager Basato sulla sessione JCR se si tratta di una risorsa basata su JCR e se l'utente dispone delle autorizzazioni per accedere a UserManager.
Autorizzabile L’Autorizzazione è l’interfaccia di base comune per Utente e Gruppo.
User Utente è uno speciale autorizzabile che può essere autenticato e rappresentato.
SimpleSearch Cerca sotto la risorsa (o utilizza setSearchIn()) se si tratta di una risorsa basata su JCR.
WorkflowStatus Stato del flusso di lavoro per il nodo payload pagina/flusso di lavoro specificato.
ReplicationStatus Stato della replica per la risorsa specificata o il relativo nodo secondario jcr:content (selezionato per primo).
ConnectorResource Restituisce una risorsa connettore adattata per alcuni tipi, se si tratta di una risorsa basata su nodo JCR.
Configurazione Se si tratta di una risorsa cq:ContentSyncConfig nodo.
ConfigEntry Se si trova sotto una risorsa cq:ContentSyncConfig nodo.
ResourceResolver si adatta a:
Sessione La sessione JCR della richiesta, se si tratta di un risolutore di risorse basato su JCR (predefinito).
PageManager  
ComponentManager  
Designer  
AssetManager In base alla sessione JCR, se si tratta di un risolutore di risorse basato su JCR.
TagManager In base alla sessione JCR, se si tratta di un risolutore di risorse basato su JCR.
UserManager UserManager fornisce l'accesso e i mezzi per mantenere gli oggetti autorizzabili, ad esempio utenti e gruppi. UserManager è associato a una sessione specifica.
Autorizzabile L’utente corrente.
User L’utente corrente.
QueryBuilder
Externalizer Per esternalizzare gli URL assoluti, anche con l'oggetto request.
Nessuna destinazione ancora, ma implementa Adattabile e potrebbe essere utilizzato come origine in un AdapterFactory personalizzato.
ContentHandler (XML) Se si tratta di una risposta sling rewriter.

WCM

La pagina si adatta a:
Risorsa Risorsa della pagina.
LabeledResource Risorsa con etichetta (== this).
Node Nodo della pagina.
... Tutto ciò a cui è possibile adattare la risorsa della pagina.
Il componente si adatta a:
Risorsa del componente.
Risorsa con etichetta (== this).
Nodo del componente.
...
Tutto ciò a cui la risorsa del componente può essere adattata.
Il modello si adatta a:
Risorsa Node.htmlRisorsa del modello.
LabeledResource Risorsa con etichetta (== this).
Node Nodo di questo modello.
... Tutto ciò a cui può essere adattata la risorsa del modello.

Sicurezza

Autorizzabili , utenti e gruppi adattano a:
Restituisce il nodo principale utente/gruppo.
Restituisce lo stato di replica per il nodo principale utente/gruppo.

DAM

La risorsa si adatta a:
Risorsa della risorsa.
Nodo della risorsa.
...
Tutto ciò a cui la risorsa della risorsa può essere adattata.

Assegnazione tag

Il tag si adatta a:
Risorsa del tag.
Nodo del tag.
...
Tutto ciò a cui la risorsa del tag può essere adattata.

Altro

Inoltre Sling / JCR / OCM fornisce un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) per gli oggetti OCM ( Object Content Mapping ) personalizzati.