On Tue, Oct 7, 2008 at 8:56 AM, Joshua Oransky <[EMAIL PROTECTED]> wrote:
> Because I want to keep all of my development inside of Sling. Besides, I
> only want to process this on certain resourceTypes; something that is
> already done by the whole Sling framework. In fact, if storing files from a
> form was as easy as storing text info, I wouldn't even need this... feature
> request?

maybe i am completely misunderstanding your use case, but i still
think that a filter does the job. you operate completely within sling
and have a configurable OSGI component as well. i hacked up an
untested sample:

package my.package;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.resource.Resource;
import org.osgi.service.component.ComponentContext;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Dictionary;
import java.util.List;

/**
 * @scr.component label="My Filter" description="Filters file uploads."
 */
public class MyPostFilter implements Filter {

    /**
     * @scr.property values.0="myapp/components/name"
     * label="Resource types to observe"
     */
    private static final String RESOURCE_TYPES = "workspacename";

    private List<String> resourceTypes = new ArrayList<String>();

    public void init(FilterConfig filterConfig) {
    }

    public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) throws IOException, ServletException {

        final SlingHttpServletRequest slingRequest =
(SlingHttpServletRequest) request;

        final Resource resource = slingRequest.getResource();

        if (resourceTypes.contains(resource.getResourceType())) {

            final Collection<RequestParameter[]> parameters =
slingRequest.getRequestParameterMap().values();
            for (RequestParameter[] parameter : parameters) {
                for (RequestParameter param : parameter) {
                    if (param.isFormField() && 0 < param.getSize()) {
                        // identified file
                        final InputStream inputStream = param.getInputStream();
                        // process stream....
                    }
                }

            }
        }

        // continue filtering
        chain.doFilter(request, response);
    }

    public void destroy() {
    }

    protected void activate(ComponentContext context) {
        final Dictionary properties = context.getProperties();
        final String[] paths = (String[]) properties.get(RESOURCE_TYPES);
        resourceTypes.addAll(Arrays.asList(paths));
    }
}


greetings,
dom.

Reply via email to