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 funcionam 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() Pode retornar nulo.

Há vários motivos para o retorno nulo, incluindo o seguinte:

  • 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 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. Dessa forma, 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).

    Este método 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, essa instrução geralmente 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, é 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, depende da lógica interna, que deve ser documentada. Daí esta referência.

Referência reference

Sling sling

Recurso adapta-se a:

Se for um recurso baseado em nó JCR ou uma propriedade JCR, fazer referência a um nó
Propriedade
Se for um recurso baseado em propriedades do JCR
Item
Se for um recurso baseado em JCR (nó ou propriedade)
Mapa
Retorna um mapa das propriedades, se for um recurso baseado em nó JCR (ou outro recurso que suporte mapas de valores)
ValueMap
Retorna um mapa conveniente de propriedades se 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 contabilizada 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 for um recurso baseado em nó JCR e o tipo de nó for nt:file ou nt:resource; se for um recurso de pacote; conteúdo de arquivo, se for um recurso do sistema de arquivos). Ou retorna os dados de um recurso de propriedade JCR binário.
URL
Retorna um URL para o recurso (URL do repositório deste nó se for um recurso baseado em nó JCR; URL do pacote jar se for um recurso do pacote; URL do arquivo se for um recurso do sistema de arquivos)
Arquivo
Se for um recurso do sistema de arquivos
SlingScript
Se o recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com o sling
Servlet
Se o recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com sling, ou se for um recurso servlet
Cadeia de caracteres
Booleano
Longo
Duplo
Calendário
Valor
Cadeia de caracteres[]
Booleano[]
Longo[]
Calendário[]
Valor[]
Retorna os valores se for um recurso baseado em propriedades JCR (e o valor se ajustar)
RecursoRotulado
Se for um recurso baseado em nó JCR
Página
Se for um recurso baseado em nó JCR e o nó for um cq:Page (ou cq:PseudoPage)
Componente
Se for um recurso de nó cq:Component
Design
Se for um nó de design (cq:Page)
Modelo
Se for um recurso de nó cq:Template
Blueprint
Se for um recurso de nó cq:Template
Ativo
Se for um recurso de 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 for um recurso de nó cq:Tag
UserManager
Com base na sessão JCR, se ele 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 ele 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 for um recurso baseado em nó JCR
Configuração
Se for um recurso de nó cq:ContentSyncConfig
ConfigEntry
Se 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 for um resolvedor de recursos baseado em JCR
TagManager
Com base na sessão JCR, se 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 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 para objetos OCM personalizados (Mapeamento de Conteúdo de Objeto).

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