Hi Justin

it's right we can get the same result without adding this method, however
with adding this method we really make clear that there is a contract
change.
We don't need a refactoring of the Resource api, just an extension - which
imho we should have done from the beginning.

Carsten


2014-03-15 14:37 GMT+01:00 Justin Edelson <jus...@justinedelson.com>:

> Hi Carsten,
> I don't understand the coupling between the addition of
> Resource.getValueMap() and having the Mongo, Merged, and JMX
> ResourceProviders start using DeepReadValueMapDecorator.
>
> IIOW, couldn't we get the same effect *without* changing the Resource
> API? That has an impact on downstream users and I'd suggest putting it
> in the category of "things to address the next time we do a
> refactoring of the Resource API".
>
> Regards,
> Justin
>
> On Sat, Mar 15, 2014 at 8:57 AM, Carsten Ziegeler <cziege...@apache.org>
> wrote:
> > Exactly, if you have a look at the implementation or read my description,
> > you see that the jcr implementation did not change at all. So, for all
> jcr
> > backed resources nothing has changed and the deep read is done there.
> > Implementations are free to implement the deep read themselves or can use
> > the provided support.
> >
> > Although, as mentioned in the beginning, the jcr implementation is wrong
> as
> > it does not use the resource tree, so a
> getValueMap().get("content/title")
> > might return something different than a
> > getChild("content").getValueMap().get("title"). But this has always been
> > the case, and as the jcr implementation is very complicated with all the
> > encoding stuff it contains, I think we shouldn't touch this.
> >
> > Carsten
> >
> >
> > 2014-03-14 20:28 GMT+01:00 Alexander Klimetschek <aklim...@adobe.com>:
> >
> >> IIUC, a deep read is now done generically by fetching sub resources
> first
> >> and each value map will from now on only read their "local" values.
> >>
> >> I think this introduces overhead for a lot of common operations. For
> every
> >> descendant node you now have to read and instantiate a resource and
> value
> >> map. So far with the JCR property map this was left to the JCR repo.
> >>
> >> IMO we should not change much here and simply support deep reads
> whereever
> >> possible in the resource implemention (and the missing part here is in
> the
> >> /mnt/overlay resource merger AFAIU).
> >>
> >> Cheers,
> >> Alex
> >>
> >> On 14.03.2014, at 08:45, Carsten Ziegeler <cziege...@apache.org> wrote:
> >>
> >> > I just found out that we have to change our idea a little bit, we
> can't
> >> > demand that Resource#adaptTo(ValueMap.class) always returns a value
> map.
> >> > The nice exception is the JcrPropertyResource...
> >> >
> >> > Regards
> >> > Carsten
> >> >
> >> >
> >> > 2014-03-14 15:08 GMT+01:00 Carsten Ziegeler <cziege...@apache.org>:
> >> >
> >> >> Hi Felix,
> >> >>
> >> >> yes, the changes I just committed in fact deprecate
> >> >> ResourceUtil.getValueMap() and let that method call
> >> resource.getValueMap()
> >> >> (if resource is not null of course).
> >> >>
> >> >> The utility code is an implementation of the value map which supports
> >> the
> >> >> deep read methods. See the new DeepReadValueMapDecorator class.
> >> >>
> >> >> Existing implementations which currently return a value map simply
> need
> >> to
> >> >> wrap their value map with this new decorator. Of course they are
> free to
> >> >> implement the deep reads by themselves.
> >> >>
> >> >> I wanted to change the jcr resource provider, but that would
> introduce
> >> >> incompatibilities to a lot of wired path encoding stuff in the
> >> >> implementation. So it's safer to leave it as is.
> >> >>
> >> >> Carsten
> >> >>
> >> >>
> >> >> 2014-03-14 14:58 GMT+01:00 Felix Meschberger <fmesc...@adobe.com>:
> >> >>
> >> >> Hi
> >> >>>
> >> >>> Am 14.03.2014 um 11:42 schrieb Carsten Ziegeler <
> cziege...@apache.org
> >> >:
> >> >>>
> >> >>>> The only other option I see is to make ValueMap a first class
> citizen
> >> >>> and:
> >> >>>
> >> >>> I think this makes sense independently of deep reads or not -- and
> >> maybe
> >> >>> we should have done this right when we introduced the ValueMap...
> >> >>>
> >> >>>> a) add a getValueMap() method to Resource - default implementation
> in
> >> >>>> AbstractResource does the same as ResourceUtil does today
> >> >>>
> >> >>> In essence ?
> >> >>>
> >> >>>> ValueMap AbstractResource.getValueMap() {
> >> >>>>    return ResourceUtil.getValueMap(this);
> >> >>>> }
> >> >>>
> >> >>> or rather copy the ResourceUtil.getValueMap(Resource) method to
> >> >>> AbstractResource.getValueMap(), implement the deep-read logic there
> >> and do
> >> >>>
> >> >>>> ValueMap ResourceUtil.getValueMap(Resource r) {
> >> >>>>    return r.getValueMap();
> >> >>>> }
> >> >>>
> >> >>> while at the same time deprecating
> ResourceUtil.getValueMap(Resource) ?
> >> >>>
> >> >>>
> >> >>>> b) clearly state that deep gets are allowed for reading from those
> >> maps
> >> >>>
> >> >>> That would go to the JavaDoc of Resource.getValueMap() along with
> the
> >> >>> requirement to never return null.
> >> >>>
> >> >>>> c) provide utility code in AbstractResource (or maybe somewhere
> else)
> >> so
> >> >>>> implementations do not need to copy the same code over and over
> again
> >> >>>
> >> >>> What kind of utility code ?
> >> >>>
> >> >>> What would existing implementations do ?
> >> >>>
> >> >>> I would assume the JCR-based one would have to be touched to not
> >> support
> >> >>> deep reads itself, others will benefit. Right ?
> >> >>>
> >> >>> Regards
> >> >>> Felix
> >> >>>
> >> >>>>
> >> >>>> This would mean:
> >> >>>> a) current code does not need to change, regardless whether
> >> >>> ResourceUtil or
> >> >>>> adaptTo is used
> >> >>>> b) a value map is always provided
> >> >>>> c) all value maps support deep reads
> >> >>>> d) no code duplication necessary
> >> >>>>
> >> >>>> Carsten
> >> >>>>
> >> >>>>
> >> >>>> 2014-03-14 11:37 GMT+01:00 Carsten Ziegeler <cziege...@apache.org
> >:
> >> >>>>
> >> >>>>> The idea behind ResourceUtil.getValueMap is that it never returns
> >> null
> >> >>>>> while resource.adaptTo(ValueMap) can.
> >> >>>>> That's the whole point of this utility method.
> >> >>>>>
> >> >>>>> I assume people who do resource.adaptTo(ValueMap) never check for
> >> null
> >> >>>>> which is bound to fail
> >> >>>>>
> >> >>>>> Carsten
> >> >>>>>
> >> >>>>>
> >> >>>>> 2014-03-14 11:30 GMT+01:00 Amit.. Gupta. <amitg...@adobe.com>:
> >> >>>>>
> >> >>>>>> FWIW, there are lots of calls to resource.adaptTo(ValueMap) in
> >> >>> rendering
> >> >>>>>> code.
> >> >>>>>> +1
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>> --
> >> >>>>> Carsten Ziegeler
> >> >>>>> cziege...@apache.org
> >> >>>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> --
> >> >>>> Carsten Ziegeler
> >> >>>> cziege...@apache.org
> >> >>>
> >> >>>
> >> >>
> >> >>
> >> >> --
> >> >> Carsten Ziegeler
> >> >> cziege...@apache.org
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Carsten Ziegeler
> >> > cziege...@apache.org
> >>
> >>
> >
> >
> > --
> > Carsten Ziegeler
> > cziege...@apache.org
>



-- 
Carsten Ziegeler
cziege...@apache.org

Reply via email to