Hey Justin,

The reason why it is odd to me is that it should be agnostic to being wrapped 
or not.

You use the resourceresolver to get the resource and then do an adapt, all not 
knowing anything about being wrapped or not, seeing as the resource resolver 
also does the wrapping internally, why wouldn't the adaptTo do it?

Resource resource = resourceResolver.getResource("/my/path");
SelfModel selfModel = resource.adaptTo(SelfModel.class);

Greets,
Roy

> On 12 Jun 2017, at 21:32, Justin Edelson <jus...@justinedelson.com> wrote:
> 
> Hi Roy,
> OK. That makes sense (and I'm sorry I missed that part in your original
> email). The problem is that if you use WrappedResource, it delegates the
> adaptTo() call to the wrapped resource, i.e. the wrapper is lost at that
> point and the AdapterFactory (i.e. Sling Models) doesn't have access to it
> anymore. I'm not sure how this can be best be handled. One approach would
> be in your wrapper class to implement the adaptTo method. Something like:
> 
> class Wrapper extends ResourceWrapper {
>        private Wrapper(Resource r) {
>            super(r);
>        }
> 
>        @Override
>        public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
>            AdapterType adapter = adapterManager.getAdapter(this, type);
>            if (adapter != null) {
>                return adapter;
>            } else {
>                return super.adaptTo(type);
>            }
>        }
>    }
> 
> But this looks a bit odd to me, although I can't quite put my finger on why.
> 
> Regards,
> Justin
> 
> On Mon, Jun 12, 2017 at 3:21 PM Roy Teeuwen <r...@teeuwen.be> wrote:
> 
>> Hey Justin,
>> 
>> Cool, thanks for the integration test!
>> Just change the modelFactory.createModel to
>> resource.adaptTo(SelfModel.class) and you will see that the test fails :)
>> 
>> Greets,
>> Roy
>>> On 12 Jun 2017, at 18:52, Justin Edelson <jus...@justinedelson.com>
>> wrote:
>>> 
>>> FWIW, I committed an integration test at
>>> http://svn.apache.org/viewvc?view=revision&revision=1798489 checking
>> that
>>> the wrapped resource is injected via the @Self annotation. Would be
>>> interesting to see how this differs from what you are doing.
>>> 
>>> Regards,
>>> Justin
>>> 
>>> On Mon, Jun 12, 2017 at 12:23 PM Justin Edelson <
>> jus...@justinedelson.com>
>>> wrote:
>>> 
>>>> Hi Roy,
>>>> This sounds like unexpected behavior. Please create a JIRA for this,
>>>> ideally with a test case, if you have not already.
>>>> 
>>>> Thanks,
>>>> Justin
>>>> 
>>>> On Mon, Jun 12, 2017 at 4:38 AM Roy Teeuwen <r...@teeuwen.be> wrote:
>>>> 
>>>>> Hey Jason, Guys,
>>>>> 
>>>>> No one can give me an answer if this is a bug or something wanted? I
>> can
>>>>> always register a Jira ticket for and put it on the dev list of course
>>>>> 
>>>>> Greets,
>>>>> Roy
>>>>>> On 6 Jun 2017, at 21:50, Roy Teeuwen <r...@teeuwen.be> wrote:
>>>>>> 
>>>>>> Hey Jason,
>>>>>> 
>>>>>> No to both assumptions
>>>>>> 
>>>>>> - I used @Inject public Resource resource. Just tried the @Self, same
>>>>> result
>>>>>> - I have @Model(adaptables = Resource.class). I don't want to bind my
>>>>> model to a custom Resource class, that would be the same as saying I
>> have
>>>>> to do @Model(adaptables = JcrNodeResource.class), the decorator just
>>>>> decorates your resource implementation class, has nothing to do with
>> your
>>>>> Resource interface you are coming from.
>>>>>> 
>>>>>> Greets,
>>>>>> Roy
>>>>>>> On 6 Jun 2017, at 21:41, Jason Bailey <jason.bai...@sas.com> wrote:
>>>>>>> 
>>>>>>> Hey Roy,
>>>>>>> 
>>>>>>> Couple of Assumptions:
>>>>>>> 
>>>>>>> For the Self resource you have it defined as:
>>>>>>> 
>>>>>>> @Self
>>>>>>> public Resource resource;
>>>>>>> 
>>>>>>> and for the @Model you have something like
>>>>>>> @Model(adaptables = RoysCustomDecorator.class)
>>>>>>> 
>>>>>>> Am I close?
>>>>>>> 
>>>>>>> -Jason
>>>>>>> 
>>>>>>> -----Original Message-----
>>>>>>> From: Roy Teeuwen [mailto:r...@teeuwen.be]
>>>>>>> Sent: Tuesday, June 06, 2017 10:08 AM
>>>>>>> To: users@sling.apache.org
>>>>>>> Subject: Sling models - Resource decorator
>>>>>>> 
>>>>>>> Hey all,
>>>>>>> 
>>>>>>> I am using sling models version 1.2.2, and I have the following
>> logic:
>>>>>>> 
>>>>>>> - I find some resources with the resource resolver
>>>>> (resourceResolver.findResources)
>>>>>>> - The returned resources are the correct resources which are
>> decorated
>>>>> by my custom resource decorator
>>>>>>> - I iterate the list to cast them to the sling model I want them to
>>>>> be, using a resource.adaptTo
>>>>>>> - The sling model itself has a field Resource resource, to inject
>>>>> itself
>>>>>>> 
>>>>>>> What I notice now is that the injected resource is a JcrNodeResource
>>>>> and not my decorated resource class anymore. I guess this is a bug in
>> the
>>>>> sling models implementation? Am I doing something wrong here or is
>> this an
>>>>> actual bug in the sling models implementation? Is this maybe already
>> fixed
>>>>> in any of the future versions?
>>>>>>> 
>>>>>>> Greets,
>>>>>>> Roy
>>>>>> 
>>>>> 
>>>>> 
>> 
>> 

Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to