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