🔗 O Slingoffer oferece um padrão de Adaptador para traduzir 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:
Node node = resource.adaptTo(Node.class);
Há 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 internos sejam passados.
Por exemplo, o ResourceResolver
baseado em JCR 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 na sessão da solicitação, como o PageManager
ou UserManager
.
Atalho para serviços.
Um caso raro - sling.getService()
também é simples.
adaptTo()
pode retornar nulo.
Há várias razões para isso, incluindo:
É importante lidar com o caso nulo normalmente. Para renderizações de jsp, pode ser aceitável ter a falha de jsp se isso resultar em um conteúdo vazio.
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 armazenamento em 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 depender de nenhum dos comportamentos. Portanto, é importante, especialmente dentro de AdapterFactory
, que os objetos sejam reutilizáveis neste cenário.
Há várias maneiras de implementar Adaptable.adaptTo()
:
Pelo próprio objeto; implementação do próprio método e mapeamento 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 central de adaptadores).
Isso permite que os ganchos sejam conectados ao mecanismo adaptTo
para classes existentes, como Resource
.
Uma combinação de ambos.
No primeiro caso, o javadocs pode 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 do cliente, nem listadas em javadocs. Teoricamente, seria possível acessar todas as implementações AdapterFactory
do tempo de execução do serviço OSGi e examinar suas configurações "adaptáveis" (fontes e alvos), mas não mapeá-las umas às outras. No fim, isso depende da lógica interna, que deve ser documentada. Daí esta referência.
🔗 O recurso se adapta a:
Nó | Se esse for um recurso baseado em nó JCR ou uma propriedade JCR que faz referência a um nó. |
Propriedade | Se esse for um recurso baseado em propriedade do JCR. |
Item | Se esse 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 outro recurso que suporta mapas de valor). |
ValueMap | Retorna um mapa conveniente das propriedades, se for um recurso baseado em nó JCR (ou outro recurso que suporta mapas de valor). Também pode ser alcançado (mais simplesmente) usandoResourceUtil.getValueMap(Resource) (lida com letras maiúsculas e minúsculas, etc.). |
InheritanceValueMap | Extensão de ValueMap que permite que a hierarquia de recursos seja levada em conta ao procurar propriedades. |
ValueMap modificável | 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 esse 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 esse 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 desse nó se este for um recurso baseado em nó JCR; URL do pacote jar se este for um recurso de 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 é registrado com sling. |
Servlet | Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script é registrado com sling ou se for um recurso de servlet. |
StringBooleanLongDoubleCalendarValueString[] Boolean[] Long[] Calendar[] Valor[] |
Retorna o(s) valor(es) se for um recurso baseado em propriedade JCR (e o valor se encaixa). |
RotuladoRecurso | Se esse for um recurso baseado em nó JCR. |
Página | Se esse 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 um dam:Asset rendition (nt:file na pasta de renderização de um dam:Assert) |
Tag | Se este for um recurso de nó cq:Tag . |
UserManager | Com base 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 de 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 determinados tipos, se 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 . |
🔗 ResourceResolveradapts 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 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á vinculado a uma Sessão específica. |
Autorizável | O usuário atual. |
Usuário |
O usuário atual. |
QueryBuilder | |
Externalizador | Para exteriorizar URLs absolutos, mesmo sem o objeto de solicitação. |
🔗 SlingHttpServletRequestadapts a:
Nenhum destino ainda, mas implementa Adaptável e pode ser usado como fonte em um AdapterFactory personalizado.
🔗 SlingHttpServletResponseadapts para:
ContentHandler (XML) |
Se esta for uma resposta de gravação de sling. |
🔗 Pageadapts para:
Recurso |
Recurso da página. |
RotuladoRecurso | Rótulo de recurso (== this). |
Nó | Nó da página. |
... | Tudo que o recurso da página pode ser adaptado. |
🔗 Os componentes se adaptam a:
Recurso | Recurso do componente. |
---|---|
RotuladoRecurso | Rótulo de recurso (== this). |
Nó | Nó do componente. |
… | Tudo que o recurso do componente pode ser adaptado. |
🔗 O modelo se adapta a:
Recurso |
Recurso do modelo. |
RotuladoRecurso | Rótulo de recurso (== this). |
Nó | Nó desse template. |
... | Tudo que o recurso do modelo pode ser adaptado. |
Autorizável, Utilizador e Agrupamento
Nó | Retorna o nó inicial do usuário/grupo. |
---|---|
ReplicationStatus | Retorna o status de replicação do nó inicial do usuário/grupo. |
O ativo se adapta a:
Recurso | Recurso do ativo. |
---|---|
Nó | Nó do ativo. |
… | Tudo o que o recurso do ativo pode ser adaptado. |
As tags se adaptam a:
Recurso | Recurso da tag. |
---|---|
Nó | Nó da tag. |
… | Tudo que o recurso da tag pode ser adaptado. |
Além disso, Sling / JCR / OCM também fornece um [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
para objetos MAC personalizados (Mapeamento de conteúdo do objeto).