🔗 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);
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.
adaptTo()
kan null retourneren.
Hiervoor zijn verschillende redenen, waaronder:
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.
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.
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.
🔗 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 |
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 |
🔗 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. |
🔗 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. |
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. |
🔗 Elementen aanpassen aan:
Resource | Middelen van het actief. |
---|---|
Knooppunt | Node of the asset. |
… | Alles waaraan de middelen van het actief kunnen worden aangepast. |
🔗 Tags aanpassen aan:
Resource | Bron van de tag. |
---|---|
Knooppunt | Knooppunt van de tag. |
… | Alles waaraan de bron van de tag kan worden aangepast. |
Daarnaast biedt Sling / JCR / OCM ook een [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
voor aangepaste OCM-objecten (Objectinhoudtoewijzing).