Uso de adaptadores Sling

O Slingues oferece um padrão de adaptador para converter convenientemente objetos que implementam a interface adaptável. Esta interface fornece um método genérico adaptTo() que irá traduzir o objeto para o tipo de classe que está sendo transmitido como argumento.

Por exemplo, para traduzir um objeto de Recurso para o objeto Nó correspondente, basta fazer o seguinte:

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

Casos de uso

Há os seguintes casos de uso:

  • Obtenha objetos específicos da 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 a transmissão de objetos de contexto internos.

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

  • Atalho para serviços.

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

Valor de Retorno Nulo

adaptTo() pode retornar nulo.

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

  • a implementação não suporta o tipo de público alvo
  • um adaptador de fábrica que manuseia este caso não está ativo (por exemplo, devido a referências de serviço ausentes)
  • falha na condição interna
  • serviço não está disponível

É importante que você manipule a caixa nula com cuidado. Para renderizações jsp, pode ser aceitável que o jsp falhe se isso resultar em um conteúdo vazio.

Cache

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

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

No entanto, não há 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 neste cenário.

Como funciona

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

  • Pelo próprio objeto; implementação do próprio método e mapeamento para certos 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 central de adaptadores).

    Isso permite que os ganchos sejam inseridos no mecanismo adaptTo para classes existentes, como Resource.

  • Uma combinação de ambos.

No primeiro caso, os javadocs podem indicar o que adaptTo-targets são possíveis. No entanto, para subclasses específicas, como o recurso baseado no JCR, isso geralmente não é possível. No último caso, as implementações de AdapterFactory são normalmente parte das classes privadas de um pacote e, portanto, não são expostas em uma API de cliente, nem listadas em javadocs. Teoricamente, seria possível acessar todas as implementações AdapterFactory do OSGi tempo de execução do serviço e verificar suas configurações "adaptáveis" (fontes e públicos alvos), mas não mapeá-las umas às outras. Afinal, isso depende da lógica interna, que deve ser documentada. Daí essa referência.

Referência

Sling

O recurso adapta-se a:

Se for um recurso baseado em nó JCR ou uma propriedade JCR que faça referência a um nó.
Propriedade Se este for um recurso baseado em propriedade do JCR.
Item Se for um recurso baseado em JCR (nó ou propriedade).
Mapa Retorna um mapa das propriedades, se este for um recurso baseado em nós JCR (ou outros mapas de valor de suporte de recursos).
ValueMap Retorna um mapa conveniente das propriedades, se for um recurso baseado em nós JCR (ou outros mapas de valor de suporte de recursos). Também pode ser obtido (mais simplesmente) usando
ResourceUtil.getValueMap(Resource) (lida com letras maiúsculas e minúsculas, etc.).
InheritanceValueMap Extensão de ValueMap que permite que a hierarquia de recursos seja considerada ao procurar propriedades.
PersistableValueMap Se este for um recurso baseado em nó JCR e o usuário tiver permissões para modificar as propriedades nesse nó.
Observação: vários mapas persistentes não compartilham seus valores.
InputStream Retorna o conteúdo binário de um "arquivo"nt: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

O ResourceResolveradapts para:

Sessão 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 do JCR, se for um resolvedor de recursos baseado em JCR.
TagManager Com base na sessão do JCR, se for um resolvedor de recursos baseado em JCR.
UserManager Com base na sessão do JCR, se este for um resolvedor de recursos baseado em JCR e se o usuário tiver permissões para acessar o UserManager.
Autorizável O usuário atual.
Usuário
O usuário atual.
PrivilegeManager
Preferências Preferências do usuário atual (com base na sessão JCR se for um resolvedor de recursos baseado em JCR).
PreferencesService
PinManager
QueryBuilder
Externalizador Para externalizar URLs absolutos, mesmo sem o objeto de solicitação.

O SlingHttpServletRequestadapta-se a:

Nenhum público alvo ainda, mas implementa Adaptável e pode ser usado como fonte em um AdapterFactory personalizado.

SlingHttpServletResponseadapta-se a:

ContentHandler
(XML)
Se isso for uma resposta de um sling rewriter.

WCM

A página adapta-se a:

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

Os componentes se adaptam a:

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

O modelo adapta-se a:

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

Segurança

Autorizável, Utilizador e Grupo

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

DAM

Os ativos se adaptam a:

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

Marcação com tags

As tags adaptam-se a:

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

Outro

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

Nesta página

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free