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.