Hi Liam

Based on the fact that the @Self injection should provide a Resource
object,  I assume your model is adaptable from a Resource (it would
help to provide the class including its @Model annotation).

The way this feature is implemented, I assume that it does not work
for adapting Resource objects. The reason is that the
SlingModelsUseProvider can handle the adaption before the
JavaUseProvider, but the implementation is only in the
JavaUseProvider.

The tests for SLING-6504 implement an adapter factory by hand (i.e.
don't use @Model), which is (I assume) why the SlingModelsUseProvider
doesn't handle it and the JavaUseProvider get's a chance.

Therefore, a workaround would be to implement an adapter factory by
hand. I agree that that kind of defies the point of Sling Models.
Another workaround might be to restrict your Sling Model to a specific
resource type.

I suggets you open a JIRA ticket and maybe you can provide a PR to
enhance the SlingModelsUseProvider to support the "adaptable" argument
as well.

@Vlad: I'm not sure that the feature is "not designed" to work with
Sling Models (after all Sling Models is just a convenient way to
register an adapter factory). I would be of the opinion that this is a
bug (or at least a limitation/oversight in the implementation). It
clearly is a violation of the principle of least surprise, which I
believe should be avoided.

Regards
Julian

On Wed, Jun 12, 2019 at 8:44 AM Vlad Bailescu <v...@bailescu.ro> wrote:
>
> Hi Liam,
>
> AFAIK, the mentioned pattern is not designed to work with Sling Models. It
> simply uses the adaptTo pattern to transform the adaptable to the given
> class.
>
> Best,
> Vlad
>
>
> On Tue, Jun 11, 2019 at 9:00 PM Liam C <l...@treescan.co.uk.invalid> wrote:
>
> > Hello,
> >
> > Is anyone able to replicate this, or to confirm that they have been
> > able to get something similar to { 'com.example.ModelClass' @
> > adaptable=item} working in their projects, please?
> >
> > Failing this, is there some workaround that could be used within
> > Sightly/HTL to adapt a specified resource to a Model class? Although
> > it is possible to access resource properties (e.g. item.myProperty),
> > some business logic is contained within models that requires access
> > via getters rather than via the resource properties.
> >
> > Thanks for any guidance.
> >
> > Liam
> >
> > On 2019/04/01 12:13:43, Liam C <l...@treescan.co.uk.INVALID> wrote:
> > > Hello everyone,
> > >
> > > In SLING-6504 (https://issues.apache.org/jira/browse/SLING-6504),
> > > functionality was added to allow adapting a resource that is different
> > > to the underlying page resource. Feike Visser's example
> > > (
> > https://github.com/heervisscher/htl-examples/commit/93666b5eebdeb36c25adf2e310f55049ec3767ce
> > )
> > > suggests that it is possible and simple, but I haven't managed to
> > > succesfully implement it. In my experience so far, the adaptable is
> > > ignored.
> > >
> > > If I use the following code in my Sling Model:
> > >
> > > @Self
> > > Resource adaptable;
> > > public Resource getAdaptableSelf()
> > > {
> > >     return adaptable;
> > > }
> > >
> > > ...it reveals that the adaptable that reaches the model is null.
> > >
> > > I wondered if this might have to do with the fact that the code in
> > > SLING-6504 modified the JavaUseProvider, but the
> > > SlingModelsUseProvider handles the instantiation before the
> > > JavaUseProvider can be reached.
> > >
> > > Can anyone confirm whether this option is still working in Sling 11?
> > >
> > > Thanks,
> > >
> > > Liam
> > >
> >

Reply via email to