Great idea and I'm definitely +1 on such a web console plugin. Not
sure if this is a web console plugin or a configuration status
renderer (we need the last one as well).

I think instead of defining the additional metadata through the java
annotations with additional classes like the
JcrNodeResourceAdapterMeta in your example, what about having a meta
data file in META-INF of the bundle instead. I know its separate from
the java code though.

Regards
Carsten

2011/11/11 Justin Edelson <[email protected]>:
> Working with new Sling developers, I find that one of the concepts
> they have trouble with is in the area of Adapters and that it is hard
> to find out what objects are adaptable to which classes. Although it
> is possible to document this (see for example
> http://dev.day.com/docs/en/cq/current/developing/sling-adapters.html),
> because new Adapters can be dynamically added (or removed) through
> OSGi services, any documentation is potentially incomplete.
>
> What I would like to do is create a new Web Console plugin which
> displays the list of available adaptation pairs. I'm still thinking
> about the UI, but you could imagine that a first version would be a
> select list on the left listing the adaptable classes and a list on
> the right of the possible adapters for the selected adaptable.
>
> For implementations of AdapterFactory, the necessary metadata already
> exists in the service registry, but for cases where a class implements
> its own adapters, this metadata needs to be added.
>
> In order to do this, I propose the following:
> 1) The creation of such a Web Console plugin (obviously).
> 2) The creation of new OSGi Services for classes which implement their
> own adaptations. For example:
> @Component
> @Service(value=Object.class)
> @Properties({
>    @Property(name="adaptables",
> value="org.apache.sling.api.resource.Resource"),
>    @Property(name="adapters", value={
>            "javax.jcr.Node",
>            "javax.jcr.Item",
>            "java.io.InputStream",
>            "java.net.URL",
>            "java.util.Map",
>            "org.apache.sling.api.resource.ValueMap"
>    })
> })
> public class JcrNodeResourceAdapterMeta { }
>
> 3) The establishment of a new service property, named
> adapter.condition, which optionally indicates the conditions under
> which an adaptation can be made. For example, in the case above:
>    @Property(name="adapter.condition", value="If the resource is a
> JcrNodeResource")
>
> The Web Console plugin would need to note that potentially not all
> adapters are listed, but I believe that if we add the metadata for all
> the adapters in Sling, that will set a good precedent for downstream
> projects to follow. If we want, we could also add a note which says
> "If there's an adapter not listed here, please file an issue with the
> adapter provider." :)
>
> Adding this metadata is not a trivial amount of effort, but it also
> something I feel will pay dividends down the road.
>
> WDYT?
>
> Justin
>



-- 
Carsten Ziegeler
[email protected]

Reply via email to