Vous consultez actuellement l'aide de la version:

Sling propose un modèle Adaptateur permettant de convertir facilement les objets qui mettent en œuvre l’interface Adaptable. Cette interface fournit une méthode adaptTo() générique qui convertit les objets dans le type de classe qui est transmis comme argument.

Par exemple, pour convertir un objet Resource en objet Node correspondant, vous pouvez simplement procéder comme suit :

Node node = resource.adaptTo(Node.class);

Cas d’utilisation

Il existe plusieurs scénarios d’utilisation :

  • Obtenir des objets spécifiques à l’implémentation.
    Par exemple, une implémentation basée sur JCR de l’interface Resource permet d’accéder à l’objet Node JCR sous-jacent.
  • Création de raccourcis d’objets qui nécessitent la transmission d’objets de contexte internes.
    Par exemple, le ResourceResolver basé sur JCR contient une référence à la session JCR de la requête qui, à son tour, est nécessaire pour de nombreux objets qui s’exécuteront sur la base de cette session de requête ; PageManager ou UserManager, par exemple.
  • Raccourci vers les services.
    Cas peu fréquent : sling.getService() s’avère également simple.

Valeur renvoyée nulle

adaptTo() peut renvoyer une valeur nulle.

Plusieurs raisons peuvent expliquer cela :

  • Cette implémentation ne prend pas en charge le type cible.
  • Une « adapter factory » qui gère ce cas n’est pas active (en raison de références de service manquantes, par exemple.)
  • La condition interne a échoué.
  • Le service n’est pas disponible.

Il est important de traiter ce cas de manière appropriée. Pour les rendus JSP, l’échec de JSP est acceptable si cela se traduit par un élément de contenu vide.

Mise en cache

Pour améliorer les performances, les implémentations peuvent mettre en cache l’objet renvoyé par un appel obj.adaptTo(). Si obj est identique, l’objet renvoyé l’est également.

Cette mise en cache est exécutée pour tous les scénarios basés sur AdapterFactory.

Cependant, il n’existe pas de règle absolue : l’objet peut soit être une nouvelle instance, soit une instance existante. Cela signifie que vous ne pouvez pas compter sur un comportement en particulier. Par conséquent, il est important, notamment dans AdapterFactory, que les objets soient réutilisables dans ce scénario.

Fonctionnement

Adaptable.adaptTo() peut être implémenté de différentes façons :

  • Par l’objet proprement dit ; implémentation de la méthode et mappage sur certains objets.
  • Par une AdapterFactory, qui peut mapper des objets arbitraires.
    Les objets doivent cependant implémenter l’interface Adaptable et étendre SlingAdaptable (qui transmet l’appel adaptTo à un gestionnaire d’adaptateur central).
    Cela autorise les hooks dans le mécanisme adaptTo pour les classes existantes, comme Resource.
  • Une combinaison des deux.

Pour le premier cas, vous pouvez consulter les JavaDocs pour connaître les adaptTo-targets possibles. Cependant, pour des sous-classes spécifiques, telles que la ressource basée sur JCR, cela s’avère souvent impossible. Dans ce cas, les implémentations de AdapterFactory font généralement partie des classes privées d’un lot et ne sont donc pas exposées dans une API cliente ni répertoriées dans les JavaDocs. En théorie, il serait possible d’accéder à toutes les implémentations AdapterFactory à partir de l’exécutable de service OSGi et d’observer leurs configurations « adaptables » (sources et cibles), mais pas de les mapper entre elles. En définitive, cela dépend de la logique interne, qui doit être documentée, d’où cette référence.

Référence

Sling

Resource s’adapte à :

Node S’il s’agit d’une ressource basée sur un nœud JCR ou une propriété JCR faisant référence à un nœud.
Propriété S’il s’agit d’une ressource basée sur une propriété JCR.
Élément S’il s’agit d’une ressource basée sur JCR (nœud ou propriété).
Map Renvoie un mappage des propriétés, s’il s’agit d’une ressource basée sur un nœud JCR (ou une autre ressource prenant en charge les mappages de valeurs).
ValueMap Renvoie un mappage simple d’emploi des propriétés, s’il s’agit d’une ressource basée sur un nœud JCR (ou une autre ressource prenant en charge les mappages de valeurs). On peut également obtenir ce résultat (plus simplement) en utilisant
ResourceUtil.getValueMap(Resource) (gestion du cas de valeur nulle, etc.).
InheritanceValueMap Extension de ValueMap, ce qui permet la prise en compte de la hiérarchie de ressources lors de la recherche de propriétés.
PersistableValueMap S’il s’agit d’une ressource basée sur un nœud JCR et que l’utilisateur est autorisé à modifier des propriétés sur ce nœud.
Remarque : Plusieurs mappages persistants ne partagent pas leurs valeurs.
InputStream Renvoie le contenu binaire d’une ressource « fichier » (s’il s’agit d’une ressource basée sur un nœud JCR et que le nœud et de type nt:file ou nt:resource ; s’il s’agit d’une ressource de type lot ; contenu du fichier s’il s’agit d’une ressource de système de fichiers) ou les données d’une ressource de propriété JCR binaire
.
URL Renvoie une URL pointant vers la ressource (URL de référentiel de ce nœud s’il s’agit d’une ressource basée sur un nœud JCR ; URL de lot JAR s’il s’agit d’une ressource de type lot ; URL de fichier s’il s’agit d’une ressource de système de fichiers).
File S’il s’agit d’une ressource de système de fichiers.
SlingScript Si cette ressource est un script (un fichier jsp, par exemple) pour lequel un moteur de script est enregistré auprès de sling.
Servlet Si cette ressource est un script (un fichier jsp, par exemple) pour lequel un moteur de script est enregistré auprès de sling ou s’il s’agit de ressource de servlet.
Authorizable
(Jackrabbit)
S’il s’agit d’une ressource autorisable (depuis
AuthorizableResourceProvider dans org.apache.sling.jackrabbit.usermanager, sous /system/userManager).
String
Boolean
Long
Double
Calendar
Value
String[]
Boolean[]
Long[]
Calendar[]
Value[]
Renvoie la (les) valeur(s) s’il s’agit d’une ressource basée sur une propriété JCR (et que la valeur convient).
LabeledResource S’il s’agit d’une ressource basée sur un nœud JCR.
Page S’il s’agit d’une ressource basée sur un nœud JCR et que le nœud est cq:Page (ou cq:PseudoPage).
Component S’il s’agit d’une ressource de nœud cq:Component.
Design S’il s’agit d’un nœud de conception (cq:Page, généralement sous
/etc/designs).
Template S’il s’agit d’une ressource de nœud cq:Template.
Blueprint S’il s’agit d’une ressource de nœud cq:Page (des vérifications plus précises seront possibles à l’avenir).
Asset S’il s’agit d’une ressource de nœud dam:Asset.
Rendition S’il s’agit d’un rendu dam:Asset (nt:file dans le dossier de rendu d’un nœud dam:Asset).
Tag S’il s’agit d’une ressource de nœud cq:Tag.
Preferences S’il s’agit d’une ressource de nœud cq:Preferences pour un utilisateur/groupe valide.
Profile S’il s’agit du profil sous un nœud utilisateur/groupe (par exemple :
cq/security/components/profile).
UserManager En fonction de la session JCR, s’il s’agit d’une ressource basée sur JCR et que l’utilisateur est autorisé à accéder à UserManager.
Authorizable
(cq-security)
Il s’agit d’un nœud d’accueil autorisable.
User
(cq-security)
Il s’agit d’un nœud d’accueil utilisateur.
PrivilegeManager  
SimpleSearch Effectue une recherche sous la ressource (ou utilise setSearchIn()) s’il s’agit d’une ressource basée sur JCR.
WorkflowStatus État du workflow pour le nœud de charge utile de la page/du workflow donné.
ReplicationStatus État de réplication de la ressource donnée ou de son sous-nœud jcr:content (vérifié en premier).
ConnectorResource Renvoie une ressource de connecteur adaptée pour certains types, s’il s’agit d’une ressource basée sur JCR.
Config S’il s’agit d’une ressource de nœud cq:ContentSyncConfig.
ConfigEntry Si elle se situe sous une ressource de nœud cq:ContentSyncConfig.

ResourceResolver s’adapte à :

Session Session JCR de la requête, s’il s’agit d’un outil de résolution de ressources basé sur JCR (par défaut).
PageManager  
ComponentManager  
Designer  
AssetManager Sur la base de la session JCR, s’il s’agit d’un outil de résolution de ressources basé sur JCR.
TagManager Sur la base de la session JCR, s’il s’agit d’un outil de résolution de ressources basé sur JCR.
UserManager Sur la base de la session JCR, s’il s’agit d’un outil de résolution de ressources basé sur JCR, et si l’utilisateur est autorisé à accéder à UserManager.
Authorizable  Utilisateur actuel.
User
Utilisateur actuel.
PrivilegeManager  
Preferences Préférences de l’utilisateur actuel (sur la base de la session JCR, s’il s’agit d’un outil de résolution de ressources basé sur JCR).
PreferencesService  
PinManager  
QueryBuilder  
Externalizer Pour externaliser les URL absolues, même sans l’objet de requête.

SlingHttpServletRequest s’adapte à :

Pas encore de cible, mais implémente l’interface Adaptable et peut être utilisé comme source dans une AdapterFactory personnalisée.

SlingHttpServletResponse s’adapte à :

ContentHandler
(XML)
S’il s’agit d’une réponse de réécriture sling.

WCM

Page s’adapte à :

Resource
Ressource de la page.
LabeledResource Ressource étiquetée (== this).
Node Nœud de la page.
... Tous les éléments auxquels la ressource de la page peut être adaptée.

Component s’adapte à :

Resource Ressource du composant.
LabeledResource Ressource étiquetée (== this).
Node Nœud du composant.
... Tous les éléments auxquels la ressource du composant peut être adaptée.

Template s’adapte à :

Resource
Ressource du modèle.
LabeledResource Ressource étiquetée (== this).
Node Nœud de ce modèle.
... Tous les éléments auxquels la ressource du modèle peut être adaptée.

Sécurité

Authorizable, User et Group s’adaptent à :

Node Renvoie le nœud d’accueil utilisateur/groupe.
ReplicationStatus Renvoie l’état de réplication du nœud d’accueil utilisateur/groupe.

Gestion des actifs numériques (DAM)

Asset s’adapte à :

Resource Ressource de l’actif.
Nœud Nœud de l’actif.
... Tous les éléments auxquels la ressource de l’actif peut être adaptée.

Balisage

Tag s’adapte à :

Resource Ressource de la balise.
Nœud Nœud de la balise.
... Tous les éléments auxquels la ressource de la balise peut être adaptée.

Autres

Sling / JCR / OCM fournit, en outre, une AdapterFactory pour les objets OCM (Object Content Mapping) personnalisés.

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne