Sling ofrece un Patrón de adaptador para traducir convenientemente los objetos que implementan el Adaptable interfaz. Esta interfaz proporciona un adaptTo() método que traduce el objeto al tipo de clase que se pasa como argumento.
Por ejemplo, para traducir un objeto Resource al objeto Node correspondiente, simplemente puede hacer lo siguiente:
Node node = resource.adaptTo(Node.class);
Hay los siguientes casos de uso:
Obtenga objetos específicos de la implementación.
Por ejemplo, una implementación basada en JCR del genérico Resource
proporciona acceso al JCR subyacente Node
.
Creación de acceso directo de objetos que requieren que se pasen objetos de contexto interno.
Por ejemplo, el basado en JCR ResourceResolver
contiene una referencia al de la solicitud JCR Session
, que a su vez es necesaria para muchos objetos que funcionarán en función de esa sesión de solicitud, como la PageManager
o UserManager
.
Acceso directo a servicios.
Un caso raro - sling.getService()
es simple también.
adaptTo()
devuelve null.
Esto se debe a varios motivos, entre ellos:
Es importante que gestione correctamente el caso nulo. Para las representaciones jsp, puede ser aceptable que jsp falle si esto resulta en un fragmento de contenido vacío.
Para mejorar el rendimiento, las implementaciones pueden almacenar en caché el objeto devuelto por un obj.adaptTo()
llamada. Si la variable obj
es el mismo, el objeto devuelto es el mismo.
Este almacenamiento en caché se realiza para todos los AdapterFactory
casos basados en.
Sin embargo, no hay una regla general: el objeto podría ser una instancia nueva o una existente. Esto significa que no puede confiar en ninguno de los comportamientos. Por lo tanto, es importante, especialmente en el interior AdapterFactory
, que los objetos se pueden reutilizar en este escenario.
Hay varias formas en que Adaptable.adaptTo()
se puede implementar:
Por el propio objeto; implementando el método en sí y asignándolo a determinados objetos.
Por un AdapterFactory
, que puede asignar objetos arbitrarios.
Los objetos aún deben implementar el Adaptable
interfaz y debe ampliarse SlingAdaptable
(que pasa el adaptTo
llamada a un administrador de adaptadores central).
Esto permite la conexión a adaptTo
mecanismo para clases existentes, como Resource
.
Una combinación de ambos.
En el primer caso, los documentos de Java™ pueden indicar lo siguiente adaptTo-targets
son posibles. Sin embargo, para subclases específicas como el recurso basado en JCR, a menudo esto no es posible. En este último caso, las implementaciones de AdapterFactory
suelen formar parte de las clases privadas de un paquete y, por lo tanto, no se exponen en una API de cliente ni se enumeran en documentos de Java™. En teoría, sería posible acceder a todas las AdapterFactory
implementaciones desde el OSGi tiempo de ejecución del servicio de y observe sus configuraciones "adaptables" (fuentes y destinos), pero no para asignarlas entre sí. Al final, esto depende de la lógica interna, que debe documentarse. De ahí esta referencia.
Recurso se adapta a:
Nodo | Si es un recurso basado en nodos JCR o una propiedad JCR que hace referencia a un nodo. |
Propiedad | Si es un recurso basado en propiedades JCR |
Elemento | Si es un recurso basado en JCR (nodo o propiedad) |
Asignar | Devuelve un mapa de las propiedades, si se trata de un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores) |
ValueMap | Devuelve un mapa práctico de las propiedades, si se trata de un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores). También se puede lograr (de forma más sencilla) utilizandoResourceUtil.getValueMap(Resource) (gestiona mayúsculas y minúsculas nulas, etc.) |
InheritanceValueMap | Extensión de ValueMap que permite tener en cuenta la jerarquía de recursos al buscar propiedades |
ModillableValueMap | Una extensión del ValueMap, que permite modificar las propiedades de ese nodo |
InputStream | Devuelve el contenido binario de un recurso de archivo (si es un recurso basado en nodos JCR y el tipo de nodo es nt:file o nt:resource ; si es un recurso de paquete; contenido de archivo (si es un recurso del sistema de archivos) o los datos de un recurso de propiedad JCR binario |
URL | Devuelve una URL al recurso (URL del repositorio de este nodo si es un recurso basado en nodos JCR; URL del paquete jar si es un recurso del paquete; URL del archivo si es un recurso del sistema de archivos) |
Archivo | Si es un recurso del sistema de archivos |
SlingScript | Si este recurso es una secuencia de comandos (por ejemplo, un archivo jsp) para la que un motor de secuencias de comandos está registrado con sling |
Servlet | Si este recurso es un script (por ejemplo, un archivo jsp) para el que un motor de scripts está registrado con sling o si es un recurso servlet. |
Cadena Booleano Largo Doble Calendario Valor Cadena[] Booleano[] Long[] Calendario[] Valor[] |
Devuelve los valores si se trata de un recurso basado en la propiedad JCR (y el valor se ajusta). |
EtiquetadoRecurso | Si es un recurso basado en nodos JCR |
Página | Si es un recurso basado en nodos JCR y el nodo es un cq:Page (o cq:PseudoPage ) |
Componente | Si se trata de un cq:Component recurso de nodo |
Diseño | Si es un nodo de diseño (cq:Page ) |
Plantilla | Si se trata de un cq:Template recurso de nodo |
Modelo | Si se trata de un cq:Template recurso de nodo |
Recurso | Si es un recurso dam:Asset node |
Representación | Si es una representación dam:Asset (nt:file bajo la carpeta de representación de dam:Assert) |
Etiqueta | Si se trata de un cq:Tag recurso de nodo |
UserManager | En función de la sesión JCR, si se trata de un recurso basado en JCR y el usuario tiene permisos para acceder a UserManager |
Con autorización | El autorizable es la interfaz base común para usuarios y grupos |
Usuario | El usuario es un autorizable especial que puede autenticarse y suplantarse |
SimpleSearch | Busca debajo del recurso (o use setSearchIn()) si es un recurso basado en JCR |
WorkflowStatus | Estado del flujo de trabajo para la página o el nodo de carga útil del flujo de trabajo dado |
ReplicationStatus | Estado de replicación para el recurso determinado o su subnodo jcr:content (comprobado primero) |
ConnectorResource | Devuelve un recurso de conector adaptado para ciertos tipos, si es un recurso basado en nodos JCR |
Configuración | Si se trata de un cq:ContentSyncConfig recurso de nodo |
ConfigEntry | Si es inferior a cq:ContentSyncConfig recurso de nodo |
ResourceResolver se adapta a:
Session | Sesión JCR de la solicitud, si se trata de una resolución de recursos basada en JCR (valor predeterminado) |
PageManager | |
ComponentManager | |
Designer | |
AssetManager | En función de la sesión JCR, si se trata de una resolución de recursos basada en JCR |
TagManager | En función de la sesión JCR, si se trata de una resolución de recursos basada en JCR |
UserManager | UserManager proporciona acceso a objetos autorizables, es decir, usuarios y grupos, y los medios para mantenerlos. UserManager está enlazado a una sesión en particular |
Con autorización | El usuario actual |
Usuario |
El usuario actual |
QueryBuilder | |
Externalizador | Para externalizar direcciones URL absolutas, incluso sin el objeto de solicitud |
SlingHttpServletRequest se adapta a:
Aún no hay destinos, pero implementa Adaptable y podría utilizarse como origen en un AdapterFactory personalizado.
SlingHttpServletResponse se adapta a:
ContentHandler (XML) |
Si es una respuesta de reescritura de sling |
Página se adapta a:
Resource |
Recurso de la página |
EtiquetadoRecurso | Recurso etiquetado (==) |
Nodo | Nodo de la página |
... | Todo a lo que se puede adaptar el recurso de la página |
Componente se adapta a:
Resource | Recurso del componente. |
---|---|
EtiquetadoRecurso | Recurso etiquetado (==). |
Nodo | Nodo del componente. |
… | Todo a lo que se puede adaptar el recurso del componente. |
Plantilla se adapta a:
Resource |
Recurso de la plantilla |
EtiquetadoRecurso | Recurso etiquetado (==) |
Nodo | Nodo de esta plantilla |
... | Todo a lo que se puede adaptar el recurso de la plantilla. |
Autorizable, usuario y Grupo** adaptar a:
Nodo | Devuelve el nodo principal del usuario/grupo. |
---|---|
ReplicationStatus | Devuelve el estado de replicación del nodo principal del usuario/grupo. |
Recurso se adapta a:
Resource | Recurso del recurso. |
---|---|
Nodo | Nodo del recurso. |
… | Todo a lo que se puede adaptar el recurso del recurso. |
Etiqueta se adapta a:
Resource | Recurso de la etiqueta. |
---|---|
Nodo | Nodo de la etiqueta. |
… | Todo a lo que se puede adaptar el recurso de la etiqueta. |
Además, Sling/JCR/OCM también proporciona un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
para OCM personalizado (Asignación de contenido de objeto) objetos.