Uso de adaptadores Sling using-sling-adapters

Sling oferece um Padrão do adaptador para traduzir convenientemente objetos que implementam a Adaptável interface. Essa interface fornece uma interface adaptTo() método que traduz o objeto para o tipo de classe que está sendo transmitido 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 do genérico Resource fornece acesso ao JCR subjacente Node.

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

    Por exemplo, a variável baseada em JCR ResourceResolver mantém uma referência à solicitação do JCR Session, que por sua vez é necessário 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 obj.adaptTo() chame. Se a variável obj for o mesmo, o objeto retornado será o mesmo.

Esse armazenamento em cache é executado para todos AdapterFactory casos baseados.

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. Por isso, é importante, especialmente dentro AdapterFactory, de que os objetos são reutilizáveis nesse cenário.

Como funciona how-it-works

Há várias maneiras de Adaptable.adaptTo() pode ser implementado:

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

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

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

    Esse método permite ganchos na adaptTo para classes existentes, como Resource.

  • Uma combinação de ambos.

Para o primeiro caso, os documentos Java™ podem indicar o que adaptTo-targets são possíveis. No entanto, para subclasses específicas, como o Recurso baseado em JCR, essa instrução geralmente não é possível. Neste último caso, as AdapterFactory normalmente fazem parte das classes privadas de um pacote e, portanto, não estão expostas em uma API do cliente, nem listadas em documentos Java™. Teoricamente, é possível acessar todos os AdapterFactory implementações do OSGi tempo de execução do serviço e observar as configurações (fontes e destinos) de "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 obtida (de forma mais simples) utilizando
ResourceUtil.getValueMap(Resource) (trata maiúsculas e minúsculas e assim por diante)
InheritanceValueMap
Extensão do 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 agrupado; conteúdo do 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
String
Booleano
Longo
Duplo
Calendário
Valor
String[]
Booleano[]
Long[]
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 cq:Component recurso de nó
Design
Se for um nó de design (cq:Page)
Modelo
Se for um cq:Template recurso de nó
Blueprint
Se for um cq:Template recurso de nó
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 cq:Tag recurso de nó
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 cq:ContentSyncConfig recurso de nó
ConfigEntry
Se estiver abaixo de um cq:ContentSyncConfig recurso de nó

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 absolutos, 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.

Componente adapta-se 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 adaptar a:

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

DAM dam

Ativo adapta-se a:

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

Marcação com tags tagging

Tag adapta-se 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 uma AdapterFactory para OCM personalizado (Mapeamento de conteúdo do objeto) objetos.

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