Sling Adapters

🔗 Slingaanbiedingen een adapterpatroon om voorwerpen gemakkelijk te vertalen die de interface 🔗 Adaptable uitvoeren. Deze interface biedt een algemene methode adjustTo() waarmee het object wordt omgezet in het klassetype dat als argument wordt doorgegeven.

Bijvoorbeeld om een voorwerp van het Middel aan het overeenkomstige voorwerp van de Knoop te vertalen, kunt u eenvoudig doen:

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

Gevallen gebruiken

Er zijn de volgende gebruiksgevallen:

  • Hiermee krijgt u implementatiespecifieke objecten.

    Bijvoorbeeld, verleent een op JCR-Gebaseerde implementatie van generische Resource interface toegang tot onderliggende JCR Node.

  • Het maken van sneltoetsen voor objecten waarvoor interne contextobjecten moeten worden doorgegeven.

    Bijvoorbeeld, op JCR-Gebaseerd ResourceResolver houdt een verwijzing naar JCR Session van het verzoek, die beurtelings voor vele voorwerpen nodig is die op die verzoekzitting gebaseerd zullen werken, zoals PageManager of UserManager.

  • Snelkoppeling naar services.

    Een zeldzaam geval - sling.getService() is ook eenvoudig.

Null-retourwaarde

adaptTo() kan null retourneren.

Hiervoor zijn verschillende redenen, waaronder:

  • de implementatie ondersteunt het doeltype niet
  • een adapterfabriek die deze zaak afhandelt, is niet actief (bijv. vanwege ontbrekende serviceverwijzingen)
  • interne voorwaarde is mislukt
  • service is niet beschikbaar

Het is belangrijk dat u de null-case netjes afhandelt. Voor jsp-renderingen kan het acceptabel zijn dat de jsp mislukt als dat resulteert in een leeg stuk inhoud.

Caching

Om prestaties te verbeteren, zijn de implementaties vrij om het voorwerp in het voorgeheugen onder te brengen dat van een obj.adaptTo() vraag is teruggekeerd. Als obj het zelfde is, is het teruggekeerde voorwerp het zelfde.

Deze caching wordt uitgevoerd voor alle AdapterFactory gebaseerde gevallen.

Er is echter geen algemene regel: het object kan een nieuw of een bestaand object zijn. Dit betekent dat u niet op één van beide gedrag kunt vertrouwen. Daarom is het belangrijk, vooral binnen AdapterFactory, dat de voorwerpen in dit scenario herbruikbaar zijn.

Hoe werkt het

Er zijn verschillende manieren waarop Adaptable.adaptTo() kan worden geïmplementeerd:

  • door het object zelf; het implementeren van de methode zelf en het toewijzen aan bepaalde objecten.

  • Door een AdapterFactory, die willekeurige voorwerpen in kaart kan brengen.

    De objecten moeten nog steeds de Adaptable-interface implementeren en SlingAdaptable uitbreiden (die de adaptTo-aanroep aan een centrale adapterbeheerder doorgeeft).

    Hierdoor kunnen koppelingen naar het adaptTo-mechanisme voor bestaande klassen worden gebruikt, zoals Resource.

  • Een combinatie van beide.

In het eerste geval kunnen de javadocs aangeven wat adaptTo-targets mogelijk is. Voor specifieke subklassen zoals de op JCR gebaseerde Resource is dit echter vaak niet mogelijk. In het laatste geval maken implementaties van AdapterFactory doorgaans deel uit van de klassen van het type private van een bundel en worden ze dus niet weergegeven in een client-API, en worden ze niet vermeld in javadocs. Theoretisch, zou het mogelijk zijn om tot alle AdapterFactory implementaties van OSGi de dienstruntime toegang te hebben en hun "adaptable"(bronnen en doelstellingen) configuraties te bekijken, maar niet hen aan elkaar in kaart te brengen. Uiteindelijk hangt dit af van de interne logica, die moet worden gedocumenteerd. Vandaar deze verwijzing.

Referentie

Sling

🔗 Bron wordt aangepast aan:

Knooppunt Als dit een JCR-node-based resource is of een JCR-eigenschap die verwijst naar een knooppunt.
Eigenschap Als dit een op JCR-eigenschap gebaseerde bron is.
Item Als dit een op JCR gebaseerde bron (knooppunt of eigenschap) is.
Kaart Keert een kaart van de eigenschappen terug, als dit een JCR-knoop-gebaseerd middel (of andere middel ondersteunend waardekaarten) is.
ValueMap Retourneert een handig te gebruiken kaart van de eigenschappen, als dit een JCR-node-based resource (of andere resource die waardekaarten ondersteunt) is. Kan ook (eenvoudigere) worden bereikt door
ResourceUtil.getValueMap(Resource) (behandelt ongeldige geval, enz.) te gebruiken.
InheritanceValueMap Uitbreiding van ValueMap waarmee de hiërarchie van bronnen kan worden gebruikt wanneer u eigenschappen zoekt.
PersistableValueMap Als dit een JCR-node-based middel is en de gebruiker toestemmingen heeft om eigenschappen op die knoop te wijzigen.
Opmerking: meerdere permanente kaarten delen hun waarden niet .
InputStream Hiermee wordt de binaire inhoud van een "bestand" geretourneerdnt:resource
AuthorizableResourceProviderorg.apache.sling.jackrabbit.usermanager/system/userManager
cq:Pagecq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

🔗 ResourceResolveradapts aan:

Sessie De JCR-sessie van het verzoek, als dit een op JCR gebaseerde resourceoplosser is (standaardwaarde).
PageManager
ComponentManager
Designer
AssetManager Gebaseerd op de zitting JCR, als dit op JCR-Gebaseerde middeloplosser is.
TagManager Gebaseerd op de zitting JCR, als dit op JCR-Gebaseerde middeloplosser is.
UserManager Gebaseerd op de zitting JCR, als dit op JCR-Gebaseerde middeloplosser is, en als de gebruiker toestemmingen heeft om tot UserManager toegang te hebben.
Toestemming De huidige gebruiker.
Gebruiker
De huidige gebruiker.
PrivilegeManager
Voorkeuren Voorkeuren van de huidige gebruiker (op basis van een JCR-sessie als dit een op JCR gebaseerde resourceoplosser is).
PreferencesService
PinManager
QueryBuilder
ExternalAlizer Voor het externaliseren van absolute URLs, zelfs met uit het verzoekvoorwerp.

🔗 SlingHttpServletRequestadapts aan:

Geen doelstellingen nog, maar voert Aangepast uit en kon als bron in een douane AdapterFactory worden gebruikt.

🔗 SlingHttpServletResponse past zich aan:

ContentHandler
(XML)
Als dit een sling rewriter reactie is.

WCM

🔗 Pagina-aanpassingen aan:

Resource
Bron van de pagina.
LabeledResource Gelabelde bron (== dit).
Knooppunt Knooppunt van de pagina.
... Alles waaraan de bron van de pagina kan worden aangepast.

🔗 Componenten worden aangepast aan:

Resource Bron van de component.
LabeledResource Gelabelde bron (== dit).
Knooppunt Knooppunt van de component.
Alles waaraan de bron van de component kan worden aangepast.

🔗 Temperaturen aanpassen aan:

Resource
Bron van de sjabloon.
LabeledResource Gelabelde bron (== dit).
Knooppunt Knooppunt van deze sjabloon.
... Alles waaraan de bron van de sjabloon kan worden aangepast.

Beveiliging

Toegestane, 🔗 gebruikers en 🔗 groepen passen zich aan:

Knooppunt Retourneert het thuisknooppunt van de gebruiker/groep.
ReplicationStatus Retourneert de replicatiestatus voor het thuisknooppunt van de gebruiker/groep.

DAM

🔗 Elementen aanpassen aan:

Resource Middelen van het actief.
Knooppunt Node of the asset.
Alles waaraan de middelen van het actief kunnen worden aangepast.

Tags

🔗 Tags aanpassen aan:

Resource Bron van de tag.
Knooppunt Knooppunt van de tag.
Alles waaraan de bron van de tag kan worden aangepast.

Overig

Daarnaast biedt Sling / JCR / OCM ook een [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) voor aangepaste OCM-objecten (Objectinhoudtoewijzing).

Op deze pagina