🔗 Slingofa un adattatore per tradurre in modo conveniente gli oggetti che implementano l'interfaccia 🔗 Adaptable. Questa interfaccia fornisce un metodo generico adaptTo() che tradurrà l'oggetto nel tipo di classe passato come argomento.
Ad esempio, per tradurre un oggetto Resource all'oggetto Node corrispondente, è sufficiente eseguire le operazioni seguenti:
Node node = resource.adaptTo(Node.class);
Esistono i seguenti casi d’uso:
Ottenere oggetti specifici per l’implementazione.
Ad esempio, un'implementazione basata su JCR dell'interfaccia generica Resource
fornisce l'accesso al JCR sottostante Node
.
Creazione rapida di oggetti che richiedono il passaggio di oggetti contestuali interni.
Ad esempio, il modello basato su JCR ResourceResolver
contiene un riferimento al JCR Session
della richiesta, 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.
adaptTo()
può restituire null.
Ci sono varie ragioni per questo, tra cui:
È importante gestire il caso null in modo corretto. Per i rendering jsp potrebbe essere accettabile che jsp non riesca se questo si traduce in un contenuto vuoto.
Per migliorare le prestazioni, le implementazioni sono libere di memorizzare nella cache l'oggetto restituito da una chiamata obj.adaptTo()
. Se il valore obj
è lo stesso, l'oggetto restituito è lo stesso.
Questa memorizzazione in cache viene eseguita per tutti i casi basati su AdapterFactory
.
Tuttavia, non esiste una regola generale: l'oggetto potrebbe essere una nuova istanza o una esistente. Ciò significa che non puoi affidarti a entrambi i comportamenti. Pertanto è importante, soprattutto all'interno di AdapterFactory
, che gli oggetti siano riutilizzabili in questo scenario.
Sono disponibili diversi modi per implementare Adaptable.adaptTo()
:
dall'oggetto stesso; implementazione del metodo stesso e mappatura a determinati oggetti.
Da un AdapterFactory
, che può mappare oggetti arbitrari.
Gli oggetti devono comunque implementare l'interfaccia Adaptable
e devono estendere SlingAdaptable
(che passa la chiamata adaptTo
a un gestore di adattatori centrali).
Questo consente di inserire gli hook nel meccanismo adaptTo
per le classi esistenti, ad esempio Resource
.
Una combinazione di entrambi.
Per il primo caso, i javadocs possono indicare le adaptTo-targets
possibili. Tuttavia, per sottoclassi specifiche come la risorsa basata su JCR, spesso questo non è possibile. In quest'ultimo caso, le implementazioni di AdapterFactory
fanno tipicamente parte delle classi private di un bundle e quindi non sono esposte in un'API client, né sono elencate in javadocs. Teoricamente, sarebbe possibile accedere a tutte le AdapterFactory
implementazioni dal runtime di servizio OSGi e guardare le loro configurazioni "adaptables" (origini e destinazioni), ma non mapparle tra di loro. Alla fine, questo dipende dalla logica interna, che deve essere documentata. Da qui questo riferimento.
🔗 Adattamento risorse a:
Nodo | 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 JCR-property. |
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 un nodo JCR (o di altre risorse che supportano le mappe dei valori). |
ValueMap | Restituisce una mappa pratica delle proprietà, se si tratta di una risorsa basata su un nodo JCR (o di altre risorse che supportano le mappe dei valori). Può essere ottenuto anche (più semplicemente) utilizzandoResourceUtil.getValueMap(Resource) (gestisce le lettere maiuscole, ecc.). |
EreditarietàValueMap | Estensione di ValueMap che consente di tenere conto della gerarchia delle risorse quando si cercano le proprietà. |
ModificabileValueMap | Estensione di ValueMap che consente di modificare le proprietà di quel 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 di 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 del bundle jar se si tratta di una risorsa del 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 questa risorsa è uno script (ad esempio un file jsp) per il quale un motore di script è registrato con sling. |
Servlet | Se questa 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. |
StringBooleanLongDoubleCalendarValueString[] Boolean[] Long[] Calendar[] Value[] |
Restituisce i valori se si tratta di una risorsa basata su JCR-property (e il valore si adatta). |
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 nodo cq:Component . |
Design | Se si tratta di un nodo di progettazione (cq:Page ). |
Modello | Se si tratta di una risorsa nodo cq:Template . |
Blueprint | Se si tratta di una risorsa nodo cq:Template . |
Risorsa | Se si tratta di una risorsa nodo dam:Asset. |
Rappresentazione | Se si tratta di un rendering dam:Asset (nt:file sotto la cartella di rendering di un dam:Assert) |
Tag | Se si tratta di una risorsa nodo cq:Tag . |
UserManager | Basato sulla sessione JCR se si tratta di una risorsa basata su JCR e l'utente dispone delle autorizzazioni per accedere a UserManager. |
Autorizzabile | Authorizable è l’interfaccia di base comune per Utente e Gruppo. |
User | Utente è uno speciale Authorizable 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 di payload pagina/flusso di lavoro specificato. |
ReplicationStatus | Stato di replica per la risorsa specificata o il relativo sottonodo jcr:content (selezionato per primo). |
ConnectorResource | Restituisce una risorsa di connettore adattata per alcuni tipi, se si tratta di una risorsa basata su nodo JCR. |
Configurazione | Se si tratta di una risorsa nodo cq:ContentSyncConfig . |
ConfigEntry | Se si trova sotto una risorsa nodo cq:ContentSyncConfig . |
🔗 ResourceResolversi adatta a:
Sessione | La sessione JCR della richiesta, se si tratta di un risolutore di risorse basato su JCR (predefinito). |
PageManager | |
ComponentManager | |
Designer | |
AssetManager | Basato sulla sessione JCR, se si tratta di un risolutore di risorse basato su JCR. |
TagManager | Basato sulla sessione JCR, se si tratta di un risolutore di risorse basato su JCR. |
UserManager | UserManager fornisce l'accesso e i mezzi per gestire oggetti autorizzabili, ad esempio utenti e gruppi. UserManager è associato a una sessione specifica. |
Autorizzabile | Utente corrente. |
User |
Utente corrente. |
QueryBuilder | |
Esternalizzatore | Per esternalizzare gli URL assoluti, anche con l'oggetto di richiesta. |
🔗 SlingHttpServletRequests si adatta a:
Nessuna destinazione, ma implementa Adattabile e può essere utilizzato come origine in un AdapterFactory personalizzato.
🔗 SlingHttpServletResponsesi adatta a:
ContentHandler (XML) |
Se si tratta di una risposta sling rewriter. |
🔗 La pagina si adatta a:
Resource |
Risorsa della pagina. |
LabeledResource | Risorsa con etichetta (== this). |
Nodo | Nodo della pagina. |
... | Tutto ciò a cui la risorsa della pagina può essere adattata. |
🔗 I componenti si adattano a:
Risorsa | Risorsa del componente. |
---|---|
LabeledResource | Risorsa con etichetta (== this). |
Nodo | Nodo del componente. |
… | Tutto ciò a cui può essere adattata la risorsa del componente. |
🔗 I modelli si adattano a:
Resource |
Risorsa del modello. |
LabeledResource | Risorsa con etichetta (== this). |
Nodo | Nodo di questo modello. |
... | Tutto ciò a cui può essere adattata la risorsa del modello. |
Autorizzabile, Utente e Gruppo si adattano a:
Nodo | Restituisce il nodo principale utente/gruppo. |
---|---|
ReplicationStatus | Restituisce lo stato di replica per il nodo home utente/gruppo. |
Le risorse si adattano a:
Risorsa | Risorsa della risorsa. |
---|---|
Nodo | Nodo della risorsa. |
… | Tutto ciò a cui la risorsa può essere adattata. |
I tag si adattano a:
Risorsa | Risorsa del tag . |
---|---|
Nodo | Nodo del tag. |
… | Tutto ciò a cui la risorsa del tag può essere adattata. |
Inoltre, Sling / JCR / OCM fornisce anche un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
per oggetti COM personalizzati (Mappatura del contenuto degli oggetti).