Hi Am 29.03.2013 um 21:18 schrieb Justin Edelson:
> Fixing/changing AdapterManager shouldn't be out of the question :) Absolutely: How about a special adaptable and adapter class name of "*" which just means "any" ? Regards Felix > > > > > On Fri, Mar 29, 2013 at 4:04 PM, Dan Klco <dan.k...@sixdimensions.com>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: justinedel...@gmail.com [mailto:justinedel...@gmail.com] On Behalf >> Of Justin Edelson >> Sent: Friday, March 29, 2013 3:36 PM >> To: dev@sling.apache.org >> 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 <dan.k...@sixdimensions.com >>> 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:image003.gif@01CCF856.90108760] >>> <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 >> >> -- Felix Meschberger | Principal Scientist | Adobe