001    /*
002     * Copyright 2007 Ivan Dubrov
003     * Copyright 2007 Robin Helgelin
004     *
005     * Licensed under the Apache License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.tynamo.security.services.impl;
019    
020    import java.io.IOException;
021    
022    import javax.servlet.Filter;
023    import javax.servlet.FilterChain;
024    import javax.servlet.ServletException;
025    import javax.servlet.ServletRequest;
026    import javax.servlet.ServletResponse;
027    import javax.servlet.http.HttpServletRequest;
028    import javax.servlet.http.HttpServletResponse;
029    
030    import org.apache.tapestry5.services.HttpServletRequestFilter;
031    import org.apache.tapestry5.services.HttpServletRequestHandler;
032    
033    public class HttpServletRequestFilterWrapper implements HttpServletRequestFilter {
034            private final Filter filter;
035    
036            public HttpServletRequestFilterWrapper(final Filter filter) {
037                    this.filter = filter;
038            }
039    
040            public final boolean service(final HttpServletRequest request, final HttpServletResponse response, final HttpServletRequestHandler handler)
041                            throws IOException {
042                    // Assume request handled if filter chain is NOT executed
043                    final boolean[] res = new boolean[] { true };
044                    try {
045                            filter.doFilter(request, response, new FilterChain() {
046                                    public void doFilter(final ServletRequest request, final ServletResponse response) throws IOException, ServletException {
047                                            res[0] = handler.service((HttpServletRequest) request, (HttpServletResponse) response);
048                                    }
049                            });
050                    } catch (ServletException e) {
051                            IOException ex = new IOException(e.getMessage());
052                            ex.initCause(e);
053                            throw ex;
054                    }
055                    return res[0];
056            }
057    }