I often write PostProcessors to catch a modification to a resource or
property based on certain criteria.
 I usually know the name of the property I want to act on, and the
resource type of the resource being posted to.
For instance, I want to interfere with a user posting some HTML to a
'html' property on a resource with type "custom-html", to run the HTML
through Tidy or something.

I find myself writing code like this ever-so-often:

public class MyPostProcessor implements SlingPostProcessor {
  public void process(SlingHttpServletRequest, List<Modification> changes) {
    // This PostProcessor should only act on resources with MY_RESOURCE_TYPE
    if (request.getResource().getResourceType() != MY_RESOURCE_TYPE) {
       return;
    }
   // This PostProcessor should only act on property modifications
when the property name is MY_PROPERTY_NAME
    for (Modification change : changes) {
     // Only act on MODIFY
      if (change.getType().equals(ModificationType.MODIFY)) {

        Session session = request.getAttribute("javax.jcr.Session");
       // Only at on Property modification, not Node
        if (session.getItem(change.getSource()).isNode()) {
          continue;
        }
        String propertyName = change.getSource();
        if (propertyName.indexOf("/")>-1) propertyName =
propertyName.substring(propertyName.lastIndexOf("/")+1);
        if (!propertyName.equals(MY_PROPERTY_NAME) {
          continue;
        }
...
and so on.

It appears to me that it would be useful to register a
SlingPostProcesor for only some posts - e.g. when there's a match on
resourceType, property name or other criteria.
These criteria could be specified as scr.properties on the
SlingPostProcessor implementation. SlingPostServlet would then only
pass the matching SlingPostProcessors on to the SlingPostOperation -
or maybe the filtering should be done by the SlingPostOperation.

It strikes me that this would make registering a SlingPostProcessor
somewhat similar to registering a Servlet. Maybe there are some
synergies here.

What do you think? Is this idea worth pursuing?

-- 
Vidar S. Ramdal <[email protected]> - http://www.idium.no
Sommerrogata 13-15, N-0255 Oslo, Norway
+ 47 22 00 84 00 / +47 21 531941, ext 2070

Reply via email to