Show Menu
SUJETS×

Utilisation des adaptateurs Sling

Sling propose un modèle Adaptateur permettant de convertir facilement les objets qui mettent en œuvre l’interface Adaptable . This interface provides a generic adaptTo() method that will translate the object to the class type being passed as the 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.
    For example, a JCR-based implementation of the generic Resource interface provides access to the underlying JCR Node .`
  • Création de raccourcis d’objets qui nécessitent la transmission d’objets de contexte internes.
    For example, the JCR-based ResourceResolver holds a reference to the request's JCR Session , which in turn is needed for many objects that will work based on that request session, such as the PageManager or UserManager .
  • Raccourci vers les services.
    A rare case - sling.getService() is simple as well.

Valeur renvoyée nulle

adaptTo() peut renvoyer la valeur null.
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

To improve performance, implementations are free to cache the object returned from a obj.adaptTo() call. 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

There are various ways that Adaptable.adaptTo() can be implemented:
  • Par l’objet proprement dit ; implémentation de la méthode et mappage sur certains objets.
  • By an AdapterFactory `, which can map arbitrary objects.
    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 noeud JCR ou d’une propriété JCR référençant un noeud.
Propriétés 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é).
Mapper 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). Can also be achieved (more simply) by using ResourceUtil.getValueMap(Resource) (handles null case, etc.).
InheritanceValueMap Extension of ValueMap which allows the hierarchy of resources to be taken into account when looking for properties.
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’un "fichier" nt:resource
AuthorizableResourceProvider org.apache.sling.jackrabbit.usermanager /system/userManager
cq:Page cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig
Session 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 Selon la session JCR, s’il s’agit d’un résolveur de ressources basé sur JCR.
TagManager Selon la session JCR, s’il s’agit d’un résolveur de ressources basé sur JCR.
UserManager Selon la session JCR, s’il s’agit d’un résolveur de ressources basé sur JCR et si l’utilisateur est autorisé à accéder à UserManager.
Autorisable Utilisateur actuel.
Utilisateur Utilisateur actuel.
PrivilegeManager
Preferences Préférences de l’utilisateur actuel (basées sur la session JCR s’il s’agit d’un résolveur de ressources basé sur JCR).
PreferencesService
PinManager
QueryBuilder
Externalizer Pour externaliser des URL absolues, même avec l’objet de requête.
Pas encore de cible, mais implémente l’interface Adaptable et peut être utilisé comme source dans une AdapterFactory personnalisée.
ContentHandler (XML) S'il s'agit d'une réponse de réécriture sling.

WCM

**Page ** s’adapte à :
Ressource Ressource de la page.
LabeledResource Ressource étiquetée (== this).
Node Noeud de la page.
Tout ce à quoi la ressource de la page peut être adaptée.
**Component ** s’adapte à :
Ressource du composant.
Ressource étiquetée (== this).
Noeud du composant.
Tout ce à quoi la ressource du composant peut être adaptée.
**Template ** s’adapte à :
Ressource Node.htmlRessource du modèle.
LabeledResource Ressource étiquetée (== this).
Node Noeud de ce modèle.
Tout ce à quoi la ressource du modèle peut être adaptée.

Sécurité

**Authorizable ** , User et **Group ** s’adaptent à :
Renvoie le noeud d’accueil utilisateur/groupe.
Renvoie l’état de réplication pour le noeud d’accueil utilisateur/groupe.

Gestion des actifs numériques

**Le fichier ** s’adapte à :
Ressource de la ressource.
Noeud de la ressource.
Tout ce à quoi la ressource de la ressource peut être adaptée.

Balisage

**La balise ** s’adapte à :
Ressource de la balise .
Noeud de la balise .
Tout ce à quoi la ressource de la balise peut être adapté.

Autres

Sling / JCR / OCM fournit, en outre, une [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) pour les objets OCM ( Object Content Mapping ) personnalisés.