Utilisation des adaptateurs Sling using-sling-adapters

Sling propose un Modèle adaptateur permettant de convertir facilement les objets qui implémentent 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 use-cases

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 JCR Session 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 null-return-value

adaptTo() peut renvoyer une valeur nulle.

Il existe plusieurs raisons pour le retour nul, notamment :

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

Il est important que vous gériez le cas « null » de manière élégante. Pour les rendus jsp, il peut être acceptable que le jsp échoue si cela entraîne un élément de contenu vide.

Mise en cache caching

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 aucune règle générale : l’objet peut être soit une nouvelle instance, soit une instance existante. Par conséquent, cela signifie que vous ne pouvez vous fier à aucun des comportements. Par conséquent, il est important, notamment dans l’AdapterFactory, que les objets soient réutilisables dans ce scénario.

Fonctionnement how-it-works

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).

    Cette méthode autorise les hooks dans le mécanisme adaptTo pour les classes existantes, comme Resource.

  • Une combinaison des deux.

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

Référence reference

Sling sling

Resource s’adapte à :

Nœud
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é)
Mappage
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
ModifiableValueMap
Une extension de la fonction ValueMap, qui permet de modifier les propriétés sur ce noeud.
InputStream
Renvoie le contenu binaire d’une ressource de fichier (s’il s’agit d’une ressource basée sur un nœud JCR et que le type de nœud est nt:file ou nt:resource ; s’il s’agit d’une ressource de bundle ; contenu du fichier, s’il s’agit d’une ressource de système de fichiers). Ou renvoie 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 bundle jar s’il s’agit d’une ressource de type bundle ; URL de fichier s’il s’agit d’une ressource de système de fichiers)
Fichier
S’il s’agit d’une ressource de système de fichiers
SlingScript
Si cette ressource est un script (par exemple un fichier jsp) pour lequel un moteur de script est enregistré auprès de Sling
Servlet
Si cette ressource est un script (par exemple un fichier jsp) pour lequel un moteur de script est enregistré auprès de Sling ou s’il s’agit d’une ressource de servlet
String
Boolean
Long
Double
Calendar
Value
String[]
Boolean[]
Long[]
Calendar[]
Value[]
Renvoie les valeurs 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 de type cq:Page (ou cq:PseudoPage)
Composant
S’il s’agit d’une ressource de nœud cq:Component
Conception
S’il s’agit d’un nœud de conception (cq:Page)
Modèle
S’il s’agit d’une ressource de nœud cq:Template
Plan directeur
S’il s’agit d’une ressource de nœud cq:Template
Asset
S’il s’agit d’une ressource de nœud dam:Asset
Rendu
S’il s’agit d’un rendu dam:Asset (nt:file dans le dossier de rendu d’un nœud dam:Asset)
Balise
S’il s’agit d’une ressource de nœud cq:Tag
UserManager
En fonction de la session JCR, s’il s’agit d’une ressource basée sur JCR et que l’utilisateur ou l’utilisatrice est autorisé à accéder à UserManager
Authorizable
Authorizable est la base commune de User et Group
Utilisateur/Utilisatrice
Utilisateur/Utilisatrice est un objet Authorizable spécial qui peut être authentifié et dont il est possible d’emprunter l’identité
SimpleSearch
Effectue une recherche sous la ressource (ou utilise setSearchIn()) s’il s’agit d’une ressource basée sur JCR
WorkflowStatus
Statut du workflow pour le nœud de la payload de la page/du workflow donné
ReplicationStatus
Statut 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 un nœud 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
La session JCR de la requête, s’il s’agit d’un résolveur de ressources basé sur JCR (par défaut)
PageManager
ComponentManager
Designer
AssetManager
Basé sur la session JCR, s’il s’agit d’un résolveur de ressources basé sur JCR
TagManager
Basé sur la session JCR, s’il s’agit d’un résolveur de ressources basé sur JCR
UserManager
UserManager permet d’accéder aux objets autorisables et de les gérer, c’est-à-dire les utilisateurs/utilisatrices et les groupes. UserManager est lié à une session particulière
Authorizable
Utilisateur/utilisatrice actuel
Utilisateur/Utilisatrice
Utilisateur/utilisatrice actuel
QueryBuilder
Service Externalizer
Pour externaliser des 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 wcm

Page s’adapte à :

Resource
Ressource de la page
LabeledResource
Ressource étiquetée (== this).
Nœud
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).
Nœud
Nœud de ce modèle.
Tous les éléments auxquels la ressource du modèle peut être adaptée.

Sécurité security

Authorizable, Utilisateur et Grouep s’adaptent à :

Node
Renvoie le nœud racine utilisateur/groupe.
ReplicationStatus
Renvoie le statut de réplication pour le nœud racine utilisateur/groupe.

Gestion des ressources numériques (DAM) dam

Asset s’adapte à :

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

Balisage tagging

Tag s’adapte à :

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

Autres other

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

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab