Fixing/changing AdapterManager shouldn't be out of the question :)
On Fri, Mar 29, 2013 at 4:04 PM, Dan Klco <[email protected]>wrote: > Justin, > > I total agree, however I didn't see a way to inject adaptables into the > Sling Adapter Manager without knowing the exact class to be adapted ahead > of time. I would imagine there would be a way to change this, but I can't > see one which would not require changing the Sling Adapter Manager. > > If we could add a hook where you could specify an AdapterFactory to handle > requests for a subclass of a particular class, assuming the exact class is > not matched then we should be able to support adapting to proxy instances > without further code for implementers. > > At the moment, there is an abstract class included in the Sling Proxy > project which will make it easier for implementers to implement an > AdapterFactory for their interfaces. > > Thanks for the feedback and please let me know if I missed something, > > -Dan > > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf > Of Justin Edelson > Sent: Friday, March 29, 2013 3:36 PM > To: [email protected] > Subject: Re: Sling Dynamic Proxy > > Hi Dan, > This looks very interesting, but I'm curious why this code: > > ISlingProxyService slingProxyService;**** > > {...}**** > > Page page = slingProxyService.getProxy(resource, Page.class); > > Is not just > > Page page = resource.adaptTo(Page.class); > > > Regards, > > Justin > > > On Fri, Mar 29, 2013 at 3:14 PM, Dan Klco <[email protected] > >wrote: > > > Hello Everyone,**** > > > > **** > > > > A colleague (Michael Kelleher) and I have built an extension we would > > be interested in incorporating into Sling, as a contributed module. > > **** > > > > **** > > > > A short synopsis of this is, it functions as a far simpler, read-only > > ORM for Sling. It allows a developer to define an Interface, and with > > the use of Annotations, and a Service, create an instance backed by > > resource(s) within JCR. The mapping of method names to JCR properties > > is configured with annotations and interpreted by the Java Proxy > > InvocationHandler to map back to Sling Resources and properties.**** > > > > **** > > > > Here's an example usage of the Sling Dynamic Proxy:**** > > > > **** > > > > public interface Page extends ISlingProxy {**** > > > > **** > > > > /****** > > > > * Gets the property jcr:created**** > > > > */**** > > > > @SlingProperty(name="jcr:created")**** > > > > public Date getCreationDate();**** > > > > **** > > > > /****** > > > > * Gets the property jcr:description at the sub path > > jcr:content, the path is not required and can be absolute**** > > > > */**** > > > > @SlingProperty(name="jcr:description", > > path="jcr:content") > > **** > > > > public String getDescription();**** > > > > **** > > > > /****** > > > > * Gets the property jcr:title at the sub path > > jcr:content, the path is not required and can be absolute**** > > > > */**** > > > > @SlingProperty(name="jcr:title", > > path="jcr:content")**** > > > > public String getTitle();**** > > > > **** > > > > /****** > > > > * Gets the content resource, this could also return a > > class which can be adapted from a resource or another proxy > > instance.**** > > > > */**** > > > > @SlingReference(path="jcr:content")**** > > > > public Resource getContentResource();**** > > > > **** > > > > /****** > > > > * Gets the children of the current resource, the > > return type should match the return type in the generic of the return > > Iterator.** > > ** > > > > */**** > > > > @SlingChildren(returnType=Resource.class, path="")**** > > > > public Iterator<Resource> getChildren();**** > > > > }**** > > > > **** > > > > You could then retrieve an instance of the proxy as such:**** > > > > **** > > > > Resource resource;**** > > > > ISlingProxyService slingProxyService;**** > > > > {...}**** > > > > Page page = slingProxyService.getProxy(resource, Page.class);**** > > > > **** > > > > You can check out the code, including some basic tests on GitHub:**** > > > > https://github.com/sixdimensions/sling-proxy**** > > > > **** > > > > We both hope this project will be of interest to the Sling developers > > and the Sling community.**** > > > > **** > > > > Thanks,**** > > > > ** ** > > > > Dan Klco**** > > > > Senior Staff Engineer, Adobe WEM / Day CQ5**** > > > > San Ramon, CA / Dayton, OH**** > > > > ** ** > > > > [image: Description: Description: Description: > > cid:[email protected]] > > <http://www.sixdimensions.com/>**** > > > > Cell (937) 231-3050**** > > > > Office (937) 343-1326**** > > > > Fax (877) 510-5082**** > > > > LinkedIn <http://www.linkedin.com/in/klcodanr> | > > @KlcoDanR<https://twitter.com/klcodanr> > > **** > > > > ** ** > > > > *People. Deliver. Progress.* > > > > ** ** > > > > ----- > No virus found in this message. > Checked by AVG - www.avg.com > Version: 2013.0.2904 / Virus Database: 2641/6211 - Release Date: 03/28/13 > >
