Uso de adaptadores Sling using-sling-adapters

O Sling oferece um Padrão de adaptador para traduzir convenientemente objetos que implementam a interface Adaptável. Esta interface fornece um método adaptTo() genérico que traduz o objeto para o tipo de classe que está sendo passado como argumento.

Por exemplo, para traduzir um objeto Resource para o objeto Node correspondente, você pode simplesmente fazer:

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

Casos de uso use-cases

Existem os seguintes casos de uso:

  • Obter objetos específicos de implementação.

    Por exemplo, uma implementação baseada em JCR da interface genérica Resource fornece acesso ao JCR subjacente Node.

  • Criação de atalhos de objetos que exigem que objetos de contexto interno sejam passados.

    Por exemplo, o ResourceResolver baseado em JCR contém uma referência ao JCR Session da solicitação, que por sua vez é necessária para muitos objetos que funcionarão com base nessa sessão de solicitação, como o PageManager ou UserManager.

  • Atalho para serviços.

    Um caso raro - sling.getService() também é simples.

Valor de retorno nulo null-return-value

adaptTo() retorna nulo.

Há várias razões para isso, incluindo:

  • a implementação não dá suporte ao tipo de destino
  • uma fábrica de adaptadores que lida com esse caso não está ativa (por exemplo, devido a referências de serviço ausentes)
  • falha na condição interna
  • serviço não disponível

É importante que você lide com o caso nulo normalmente. Para renderizações jsp, pode ser aceitável que o jsp falhe se isso resultar em um conteúdo vazio.

Armazenamento em cache caching

Para melhorar o desempenho, as implementações estão livres para armazenar em cache o objeto retornado de uma chamada obj.adaptTo(). Se o obj for o mesmo, o objeto retornado será o mesmo.

Este cache é executado para todos os casos baseados em AdapterFactory.

No entanto, não há uma regra geral: o objeto pode ser uma nova instância ou uma existente. Isso significa que você não pode confiar em nenhum dos comportamentos. Portanto, é importante, especialmente dentro de AdapterFactory, que os objetos sejam reutilizáveis nesse cenário.

Como funciona how-it-works

Há várias maneiras de implementar o Adaptable.adaptTo():

  • Pelo próprio objeto; implementando o próprio método e mapeando para determinados objetos.

  • Por um AdapterFactory, que pode mapear objetos arbitrários.

    Os objetos ainda devem implementar a interface Adaptable e devem estender SlingAdaptable (que passa a chamada adaptTo para um gerenciador de adaptador central).

    Isso permite ganchos no mecanismo adaptTo para classes existentes, como Resource.

  • Uma combinação de ambos.

Para o primeiro caso, os documentos Java™ podem indicar o que adaptTo-targets é possível. No entanto, para subclasses específicas, como o Recurso baseado em JCR, geralmente isso não é possível. No último caso, as implementações de AdapterFactory normalmente fazem parte das classes privadas de um pacote e, portanto, não são expostas em uma API cliente, nem listadas em documentos Java™. Teoricamente, seria possível acessar todas as implementações de AdapterFactory do tempo de execução do serviço OSGi e examinar suas configurações (fontes e destinos) "adaptáveis", mas não mapeá-las entre si. No final, isso depende da lógica interna, que deve ser documentada. Daí esta referência.

Referência reference

Sling sling

Recurso adapta-se a:

Se este for um recurso baseado em nó JCR ou uma propriedade JCR que faz referência a um nó.
Propriedade
Se este for um recurso baseado em propriedades JCR
Item
Se este for um recurso baseado em JCR (nó ou propriedade)
Mapa
Retorna um mapa das propriedades, se este for um recurso baseado em nó JCR (ou outros recursos que suportam mapas de valores)
ValueMap
Retorna um mapa conveniente de propriedades se este for um recurso baseado em nó JCR (ou outro recurso que suporte mapas de valor). Também pode ser obtido (de forma mais simples) usando
ResourceUtil.getValueMap(Resource) (processa maiúsculas e minúsculas e assim por diante)
InheritanceValueMap
Extensão de ValueMap que permite que a hierarquia de recursos seja considerada ao procurar propriedades
ModisibleValueMap
Uma extensão do ValueMap, que permite modificar propriedades nesse nó
InputStream
Retorna o conteúdo binário de um recurso de arquivo (se este for um recurso baseado em nó JCR e o tipo de nó for nt:file ou nt:resource; se este for um recurso de pacote; conteúdo de arquivo, se este for um recurso do sistema de arquivos) ou os dados de um recurso de propriedade JCR binário
URL
Retorna um URL para o recurso (URL do repositório deste nó se este for um recurso baseado em nó JCR; URL do pacote jar se este for um recurso do pacote; URL do arquivo se este for um recurso do sistema de arquivos)
Arquivo
Se este for um recurso do sistema de arquivos
SlingScript
Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com o sling
Servlet
Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com o sling ou se for um recurso de servlet.
Cadeia de caracteres
Booleano
Longo
Duplo
Calendário
Valor
Cadeia de caracteres[]
Booleano[]
Longo[]
Calendário[]
Valor[]
Retorna os valores se este for um recurso baseado em propriedades JCR (e o valor se ajustar).
RecursoRotulado
Se este for um recurso baseado em nó JCR
Página
Se este for um recurso baseado em nó JCR e o nó for um cq:Page (ou cq:PseudoPage)
Componente
Se este for um recurso de nó cq:Component
Design
Se este for um nó de design (cq:Page)
Modelo
Se este for um recurso de nó cq:Template
Blueprint
Se este for um recurso de nó cq:Template
Ativo
Se este for um recurso do nó dam:Asset
Representação
Se for uma representação dam:Asset (nt:file na pasta de representação de um dam:Assert)
Tag
Se este for um recurso de nó cq:Tag
UserManager
Baseado na sessão JCR, se este for um recurso baseado em JCR e o usuário tiver permissões para acessar o UserManager
Autorizável
A Autorizável é a interface básica comum para usuários e grupos
Usuário
O usuário é um Authorizable especial que pode ser autenticado e representado
PesquisaSimples
Pesquisa abaixo o recurso (ou use setSearchIn()) se este for um recurso baseado em JCR
WorkflowStatus
Status do fluxo de trabalho para determinada página/nó de carga do fluxo de trabalho
StatusReplicação
Status de replicação para o recurso fornecido ou seu subnó jcr:content (marcado primeiro)
ConnectorResource
Retorna um recurso de conector adaptado para determinados tipos, se este for um recurso baseado em nó JCR
Configuração
Se este for um recurso de nó cq:ContentSyncConfig
ConfigEntry
Se isso estiver abaixo de um recurso de nó cq:ContentSyncConfig

ResourceResolver adapta-se a:

Session
A sessão JCR da solicitação, se for um resolvedor de recursos baseado em JCR (padrão)
PageManager
ComponentManager
Designer
AssetManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR
TagManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR
UserManager
O UserManager fornece acesso e meios para manter objetos autorizáveis, ou seja, usuários e grupos. O UserManager está associado a uma sessão específica
Autorizável
O usuário atual
Usuário
O usuário atual
QueryBuilder
Externalizador
Para externalizar URLs absolutas, mesmo sem o objeto de solicitação

SlingHttpServletRequest adapta-se a:

Ainda sem destinos, mas implementa Adaptable e pode ser usado como origem em um AdapterFactory personalizado.

SlingHttpServletResponse adapta-se a:

ManipuladordeConteúdo
(XML)
Se esta for uma resposta de reescrita do sling

WCM wcm

Página adapta-se a:

Recurso
Recurso da página
RecursoRotulado
Recurso rotulado (== este)
Nó da página
..
Tudo ao qual o recurso da página pode ser adaptado

O componente se adapta a:

Recurso
Recurso do componente.
RecursoRotulado
Recurso rotulado (== este).
Nó do componente.
Tudo ao qual o recurso do componente pode ser adaptado.

Modelo adapta-se a:

Recurso
Recurso do modelo
RecursoRotulado
Recurso rotulado (== este)
Nó deste modelo
..
Tudo ao qual o recurso do modelo pode ser adaptado.

Segurança security

Autorizável, Usuário e ​ Grupo** adaptam-se a:

Retorna o nó inicial do usuário/grupo.
StatusDaReplicação
Retorna o status de replicação do nó inicial do usuário/grupo.

DAM dam

O ativo se adapta a:

Recurso
Recurso do ativo.
Nó do ativo.
Tudo ao qual o recurso do ativo pode ser adaptado.

Marcação com tags tagging

A marca se adapta a:

Recurso
Recurso da tag.
Nó da tag.
Tudo ao qual o recurso da tag pode ser adaptado.

Outro other

Além disso, o Sling/JCR/OCM também fornece um [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) para objetos OCM personalizados (Mapeamento de conteúdo de objeto).

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2