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);
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.
adaptTo()
pode retornar nulo.
Há várias razões para isso, incluindo:
É 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.
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.
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.
O recurso adapta-se a:
Nó | 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) 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 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 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. |
StringBooleanLongDoubleCalendarValueString[] Boolean[] Long[] Calendar[] Value[] |
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 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 de nó dam:Asset. |
Representaçã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 nó cq:Tag . |
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 nó cq:ContentSyncConfig . |
ConfigEntry | Se estiver abaixo de um recurso de nó 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 | 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. |
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. |
A página adapta-se a:
Recurso |
Recurso da página. |
LabeledResource | Recurso rotulado (== this). |
Nó | 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ó | 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ó | Nó deste modelo. |
... | Tudo ao qual o recurso do modelo pode ser adaptado. |
Autorizável, Utilizador e Grupo
Nó | Retorna o nó inicial do usuário/grupo. |
---|---|
ReplicationStatus | Retorna o status de replicação do nó inicial do usuário/grupo. |
Os ativos se adaptam a:
Recurso | Recurso do ativo. |
---|---|
Nó | Nó do ativo. |
… | Tudo ao qual o recurso do ativo pode ser adaptado. |
As tags adaptam-se a:
Recurso | Recurso da tag . |
---|---|
Nó | Nó da tag . |
… | Tudo ao qual o recurso da tag pode ser adaptado. |
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).