Show Menu
TÓPICOS×

Uso de adaptadores Sling

Sling oferta um padrão adapters.html Adaptador para converter convenientemente objetos que implementam a interface Adaptável . Essa interface fornece um método genérico adaptTo() que traduzirá o objeto para o tipo de classe que está sendo passado 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);

Use Cases

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 fornece acesso ao JCR subjacente Resource Node .
  • Criação de atalhos de objetos que exigem a transmissão de objetos de contexto internos.
    Por exemplo, o JCR ResourceResolver 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 na sessão da solicitação, como o 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 obj.adaptTo() chamada. Se o objeto obj for o mesmo, o objeto retornado será o mesmo.
Esse cache é executado para todos os casos AdapterFactory baseados.
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. Assim, é importante, principalmente dentro AdapterFactory , que os objetos sejam reutilizáveis nesse cenário.

Como funciona

Há várias maneiras de Adaptable.adaptTo() serem implementadas:
  • 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 Adaptable interface e ser estendidos SlingAdaptable (o que passa a adaptTo chamada para um gerenciador central do adaptador).
    Isso permite que os ganchos entrem no adaptTo mecanismo para classes existentes, como Resource .
  • Uma combinação de ambos.
No primeiro caso, os javadocs podem dizer o que adaptTo-targets é possível. 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 AdapterFactory implementações a partir do tempo de execução do serviço OSGi e observar 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 se adapta 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 simples) usando ResourceUtil.getValueMap(Resource) (manipula letras maiúsculas e minúsculas, etc.).
InheritanceValueMap Extensão do ValueMap que permite que a hierarquia de recursos seja considerada ao procurar propriedades.
ModificávelValueMap Uma extensão do ValueMap , que permite modificar as 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 conjunto; conteúdo de arquivo, se for um recurso do sistema de arquivos) ou os dados de um recurso de propriedade JCR binária.
URL Retorna um URL para o recurso (URL do repositório desse nó se for um recurso baseado em nó JCR; URL do pacote jar se este for um recurso de conjunto; URL do arquivo, se 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 sling.
Servlet Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com sling ou se for um recurso de servlet.
String Boolean Longo Duplo Calendar Value.htmlString.htmlBoolean.htmlLong.htmlCalendar.htmlValorString[]Boolean[]Long[]Calendar[]Valor[] Retorna os valores se este for um recurso baseado em propriedade JCR (e o valor se ajustar).
LabeledResource 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 cq:Component nó.
Design Se este for um nó de design ( cq:Page ).
Modelo Se este for um recurso de cq:Template nó.
Blueprint Se este for um recurso de cq:Template nó.
Ativo Se este for um recurso de nó dam:Asset.
Execução Se for um dam:representação de ativo (nt:file na pasta de renderização de um dam:Assert)
Tag Se este for um recurso de cq:Tag nó.
UserManager Com base na sessão do JCR se este for um recurso baseado em JCR e o usuário tiver permissões para acessar o UserManager.
Autorizável A opção Autorizável é a interface base comum para Usuário e Grupo.
Usuário O usuário é um Autorizável especial que pode ser autenticado e representado.
SimpleSearch Pesquisa abaixo do recurso (ou use setSearchIn()) se este for um recurso baseado em JCR.
WorkflowStatus Status do fluxo de trabalho para o nó de carga de página/fluxo de trabalho especificado.
ReplicationStatus Status de replicação para o recurso fornecido ou seu subnó jcr:content (marcado primeiro).
ConnectorResource Retorna um recurso de conector adaptado para certos tipos, se for um recurso baseado em nó JCR.
Configuração Se este for um recurso de cq:ContentSyncConfig nó.
ConfigEntry Se estiver abaixo de um recurso de cq:ContentSyncConfig nó.
O ResourceResolver adapta-se a:
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 O UserManager fornece acesso e meios para manter objetos autorizados, ou seja, usuários e grupos. O UserManager está vinculado 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.
Nenhum público alvo ainda, mas implementa Adaptável e pode ser usado como fonte em um AdapterFactory personalizado.
ContentHandler (XML) Se isso for uma resposta de um sling rewriter.

WCM

A página ​se adapta 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.
O componente ​adapta-se a:
Recurso do componente.
Recurso rotulado (== this).
Nó do componente.
...
Tudo ao qual o recurso do componente pode ser adaptado.
O modelo ​adapta-se a:
Recurso Node.htmlRecurso do modelo.
LabeledResource Recurso rotulado (== this).
Nó deste modelo.
... Tudo ao qual o recurso do modelo pode ser adaptado.

Segurança

Autorizável , Usuário e Grupo se adaptam a:
Retorna o nó inicial do usuário/grupo.
Retorna o status de replicação do nó inicial do usuário/grupo.

DAM

O ativo se adapta a:
Recurso do ativo.
Nó do ativo.
...
Tudo ao qual o recurso do ativo pode ser adaptado.

Marcação com tags

A tag se adapta a:
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 um [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) para objetos MAC personalizados ( Object Content Mapping ).